코딩테스트 문제를 마구잡이식으로 풀다 보니 아무래도 자료구조/ 알고리즘 관련 면접에서 막힌 경험이 생겼다.. 그리하여 남는 시간동안 자료구조/알고리즘 이론을 좀더 튼튼히 준비한후 동시에 코딩테스트 문제를 풀어보려한다.
4군데의 기업에서코딩테스트를 봤는데 2군데 합격, 2군데 불합격이떳다ㅎ... 대부분 유형은 프로그래머스, 백준과 같은 알려진 사이트에서의 문제, sql문제, restapi문제였고 경험은 없지만 지원하는 회사가 사용하는 프레임워크로 시험을 치는 회사가 있다고 했다. 약 2개월동안 좀 빡쌔게 기본을 다시 복습한뒤 이후부턴 여러 회사에 지원해보며 코딩테스트에 모두합격할수 있도록 대비해야겠다.
도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 Image라고 한다. 도커의 실행은 프로세스 실행을 하는것이므로 이 프로세스를 실행하기 위한 모든 파일과 설정값을 지닌것으로, 도커의 주체 즉, 실행할 파일이라고 생각하면 된다. 이미지 파일로 설정할수 있는것들은 mysql, ubuntu, nginx등 이미 만들어져 있는 공식적인 이미지 같은경우, 도커허브(https://hub.docker.com/)에서 모두 확인가능하며 깃허브에 코드를 올리는것과 마찬가지로 개개인이 만든이미지를 업로드하고 공유할수 있다. 그리고 외적으로는 개개인이 새롭게 자신만의 프로젝트를 올릴때는 깃허브와 같은 소스공유 방법을 통해 이미지를 빌드 할수 있다.
2.이미지 만들기
docker build -t corin2/testimage:ver1 .
-docker build -t : 도커 이미지 생성 명령어
-corin2 : 이미지를 생성한 사람의 이름
-testimage : 이미지 이름
-:ver1 : 태그 즉, 버전으로 활용가능
-. : 빌드 컨텍스트 위치로 통상적으로 현재위치인 .을 사용하나 필요에따라 다른 디렉터리를 지정하여도 문제없다.
추가로, .dockerignore파일또한 생성가능한데 .gitignore와 같은 역할로 민감한 정보를 가리는것 외에도 빌드시에 가상환경과 같은 부분을 같이 빌드하지 않기위해서도 사용된다.
즉, 위 명령어를 통해 생성된 이미지로 도커를 실행시킬수 있는것이다. 이미지는 통상적으로 Dockerfile스크립트 파일을 생성해 실행하는데 Dockerfile에 들어가는 명령어는 아래와 같다.
3.Dockerfile 명령어
FROM
기본이미지
RUN
쉘 명령어 실행
CMD
컨테이너 기본 실행 명령어
EXPOSE
오픈되는 포트 정보
ENV
환경변수 설정
ADD
파일 또는 디렉터리 추가
COPY
파일 또는 디렉터리 추가
ENTRYPOINT
컨테이너 기본 실행 명령어
VOLUME
외부 마운트 포인트 생성
WORKDIR
작업 디렉토리 설정
ARGS
빌드타임 환경변수 설정
LABEL
key - value데이터
ONBUILD
다른 빌드의 베이스로 사용될때 사용하는 명령어
USER
RUN, CMD, ENTRYPOINT를 실행하는 사용자
4.활용
도커 이미지 생성같은경우는 작업 환경에서 직접 빌드하는 방식도 있지만 주로 깃허브에서 소스를 가져와 빌드하는 방법이다. 이방법같은경우, 다음 목차에서 간단한 프로젝트를 가져와 빌드하도록 해보겠다.
일반적인 시스템은 단일 애플리케이션으로 구동이 되지 않습니다. 여러 개의 애플리케이션이 서로 의존성 있게 구성되어 시스템이 이뤄져 있습니다. 그렇다면 흔히 하나의 컨테이너가 하나의 애플리케이션을 담당한다고 하면 여러 개의 컨테이너가 필요로 합니다. 이때 필요한 기술이 도커 컴포즈(Docker Compose)입니다. 도커 컴포즈는 yaml 포맷으로 작성되며 여러 개의 컨테이너의 실행을 한 번에 관리를 할 수 있게 해 줍니다.
나의 경우, 위와 같이 만들어 하나의 레포지토리안에 client와 server를 분리하여 만들어 뒀다. 이부분은 팀원끼리 협의를 하면된다.
-소통 수단 협의
전체적인 팀협업 진행률 같은 경우, 노션을 만들어 매주마다 회의록을 적었으며 그주차에 해당하는 목표치를 todo형식으로 만들어 서로 진행률을 체크하며 프로젝트를 진행한다. 그리고 slack을 많이 사용한다고 하는데 이부분은 서로 대화가 가능한 수단을 만들어야 하는것이기 때문에 카톡이든 따로 문제는 없으니 협의를 통해 결정하면된다.
2. api 서버 개설 및 인프라 구축
-api서버 개설
GCP, AWS와 같은 클라우드 서비스를 이용해 추후 배포할 서버를 먼저 개설한다. 여기서 중요한것은 로컬에서 진행은 API가 유효한지 테스트로 활용후 테스트가 통과되면 배포서버에 즉시 업데이트를 해줘야 클라이언트에서 바로바로 테스트가 가능하기 때문에 로컬-POSTMAN(자가 테스트) -> 배포 서버-클라이언트 개발자 순으로 자가테스트를 한후 클라이언트 개발자와 테스트를 진행하게 된다. 즉, 처음엔 NGINX와 같은 웹서버를 통해 본인의 프로젝트를 공유한뒤 SWAGGER와 같은 명세서 자동화 라이브러리를 활용하여 API명세서를 찍어준다.
명세서는 들어갈내용이 API주소, request, response data내용등이다. 이부분은 클라이언트 개발자가 개발을 할때 타입을 지정해줘야하기 때문에 서로 협의를 통해 필요한 데이터를 결정하고 예시를 적어준다고 생각하면 된다. 위의 블로그를 참고하면 좋다.
-인프라 구축
개발을 본격적으로 들어가기전에 인프라구축의 경우 nginx, apache와 같은 웹서버를 통한 배포 https적용, DB서버, S3연동등 앞으로 개발간에 바뀌지 않을 부분등을 미리 설정해주는 편이 좋다. 중간에 DB가 바뀌면 많이 곤란한 상황이 생기니 DB서버먼저 연결을 잘해줘야하며, 웹 기반 프로젝트의 경우, 가장먼저 cors지정을 해줘야 클라이언트와 협업이 가능하니 이부분을 먼저 허용해주고, 앱 기반 프로젝트의 경우, 경험상 따로 지정을 해주지 않아도 문제는 없다. 그리고 https즉 인증서 적용의 경우, 요즘 보안상 필수이니 적용을 해주어야 하면 route53과 같은 서비스를 통해 도메인 까지 ip에 연결해주면 모든것은 끝난다.
3. 기획자와 디자이너
사실 개발 관련한 사항은 준비할점이 많지만 왠만하면 기획자, 디자이너 분들과는 많은 소통을 하며 최대한 맞춰주는것이 좋다. 개발 관련 지식은 모르면 구글링을 통해 왠만하면 도움을 얻을수 있지만 기획과 디자인 모두 상당한 스트레스를 요구하게 된다고 느꼈다. 그래서 왠만하면 협업 툴이나 회의 관련한 피드백은 최대한 맞춰주는것이 프로젝트 진행사항이 긍정적인 방향으로 흐를수 있는 방법이 아닐까?생각한다.
4.정리 (백엔드 개발자)
-레포지토리 개설
-배포시(s3,db,etc...)인증서를 적용한 배포
-클라이언트 개발자와 통신 확인(웹 기반 프로젝트의 경우, cors확인필수, 방화벽도 꼭 확인)
당장엔 취업할수 있는 가장 큰 방법은 개발자라는 직업이며 솔직히 개발하는것 자체가 즐겁다. 사람들과 소통하며 에러를 밤새서 수정하고 났을때 쾌감이 너무 좋다. 그리고 최종적으론 나만의 서비스를 만들어 창업을해서 좋은사람들과 팀을 꾸려 수익을 창출해보고싶다.
예전부터 혼자서 여행다니며 게스트하우스 파티에 참석하다보니 이렇게 즐거운 파티를 집근처에서도 모르는사람들과 진행할수 있는 서비스가 있으면 좋겠다라는 목적을 가지고 이번 bora팀을 꾸려 창업을 목표로 프로젝트를 진행하고 있는데 이번 기획회의 단계에서 이런걸 만들고 싶다 라는 목적만 있지 세부적으로 컨텐츠내용이 너무 부실하다는 피드백이 나왔다. 사실 어느정도 기획적으로 완성됐고 이제 네이밍만해서 디자인나오고 평소했던 개발을 통해 앱을 만드려고 했는데 당장 성공 할지 않할지 모르는 앱을 기획자분이 시간을 투자하기 힘들다는 피드백이 나와서 살짝 당황했다. 왜냐면 나보고 이 서비스의 확실한 컨텐츠가 뭐고 경쟁사와 비교했을때 특별한점이 무엇이냐? 라고 질문을 하셨는데 제대로 답을 못했기 때문이다. 그저 좋은 개발품을 만드려했지 좋은 서비스를 만드려고 노력을 안했다는 생각이 들었다..
20대초반부터 생각했던 아이디어였고 개발 실력이 늘면 내가 직접 개발해봐야지 라는 생각만 가지고 프로젝트에 임한것 같아 왠지 모르게 내 서비스에 미안해지는 마음이 생긴다.
그래서 생각해본것이 당장 내목표가 무엇일까?였다. 개발자로 취업해서 돈을 버는거냐? 아니면 창업을 해서 성공을 하고 싶은거냐 였는데 당장은 개발자 취업에 목표를 정했던것 같다. 사실 요즘 현장실습이 종료된 이후 cs공부만 하면 된다라는 생각에 기획쪽은 내영역이 아니라고 공부시간외엔 아무것도 안하고 쉬고만 있었는데 쉬는걸 좀 줄이고 bora에 좀더 애정을 가지고 다시 열심히 창업도 준비 해봐야겠다.
결론! 현장실습이 종료된 이후 긴장이 풀려서 많이 논것도 사실이니 cs공부와 동시에 bora 프로젝트 개발만 신경쓸게 아닌 기획자분의 요구에 맞춰 열심히 기획부분도 참여를 해봐야겠다. 갑자기 든 생각인데 당장 1년뒤 내가 어디에 취업해서 무엇을 하고 있을지 궁금하다. 현재의 시간이 낭비 되지 않도록 열심히 살아야 겠다ㅎ..
매 조건 절마다 return한건 테스트용도로 해둔건데 마지막에만 당연히 리턴문 돌려주면되니 알아서 필터링해주세요ㅎㅎ
- member 기능 개발
import json
from django.http import JsonResponse
from django.shortcuts import render
# Create your views here.from profiles.models import TeamProfile
from requests import Response
from rest_framework.generics import GenericAPIView
from .models import Member, WaitingForMember
from .serializers import WaitingMemberSerializer
classMemberAddView(GenericAPIView):defpost(self, request):"""
팀원 추가(POST)
---
{
'teamprofile': 2,
'member': 3
}
"""
requestData = json.loads(request.body)
teamprofile_id = requestData['teamprofile']
member_id = requestData['member']
print(requestData)
profile = TeamProfile.objects.get(id=teamprofile_id)
member = Member.objects.create(member=member_id)
wait_member = WaitingForMember.objects.get(teammember__id=teamprofile_id, waitmember=member.member)
wait_member.delete()
profile.members.add(member)
res = {
"message": "success"
}
return JsonResponse(res)
classMemberWaitingView(GenericAPIView):defget(self, request, teamprofile):"""
프로젝트 지원 대기 멤버 조회(GET)
---
{
'teamprofile': 2,
'waiting_member': 3
}
"""
teamprofile_id = request.GET.get('teamprofile')
teamprofile = TeamProfile.objects.get(id=teamprofile_id)
wating_member = teamprofile.waitingmember
serializer = WaitingMemberSerializer(wating_member, many=True, context={'request': request})
return Response(serializer.data)
defpost(self, request):"""
프로젝트 지원 대기 멤버 추가(POST)
---
{
'teamprofile': 2,
'waiting_member': 3
}
"""
requestData = json.loads(request.body)
teamprofile_id = requestData['teamprofile']
waiting_member = requestData['waiting_member']
try:
waiting_member = WaitingForMember.objects.get(teammember__id=teamprofile_id, waitmember=waiting_member)
print(waiting_member)
teamprofile = TeamProfile.objects.get(id=teamprofile_id, waiting_members=waiting_member)
print(teamprofile)
if teamprofile isNone:
raise Exception
res = {
"message": "fail"
}
except:
teamprofile = TeamProfile.objects.get(id=teamprofile_id)
waiting_members = WaitingForMember.objects.create()
waiting_members.waitmember = waiting_member
waiting_members.save()
teamprofile.waiting_members.add(waiting_members)
res = {
"message": "success",
'teamprofile': teamprofile_id,
'waiting_member': waiting_member
}
return JsonResponse(res)
팀 프로젝트의 멤버 추가기능을 개발하는데에 있어 신청을 했을때 받는 멤버와 팀장이 수락하여 멤버가된 모델을 분리하였고 역참조의 개념을 한번 익히는데 도움이 되었다. 사실 이 역참조라는걸 생각안하고 항상 구현하다보니 코드가 지져분해졌었는데 나중에 다끝나고 리팩토링할때 많이 쓰일것 같은? 기능이다. foreignkey의 related_name을 설정하여 외래키로 참조된 모델에서 역으로 참조한 모델을 참조할때를 역참조라고한다. 시간이 좀많이 걸렸다.
이젠 어느정도 명함을 내밀수 있게 완성이 되었다. 알림과 채팅만 남았다!!!! 현재 기능으로도 나쁘지 않다고 생각한다~
-KOTLUCK
이제 제대로 시작했다. 한국형 파티문화를 만들겠다! 라는 멋진 포부로 POTLUCK의 이름을따 KOTLUCK으로 지었는데 여러 회의를 거쳐 보라(BORA)라고 결정지었다!!!! 무엇보다 기획자 포지션이 정말 중요한데 너무 좋은분이 오신것같아 나도 함께 열심히 하고 있는중이다. 개발에 있어선 아직 세부기능이 확정이 안되서 일단 FCM을 활용하여 채팅, 알림기능 개발중이다. 이제 시간이 넘쳐나는 백수가 되었으니 졸업전 창업이라는 목표로 열심히 다시 불태워봐야겠다~~
-인턴
할말이 참많다.. 일단 엄청난 스트레스였던 패치랩 시연 및 발표가 끝이났다. 한20여분이 구글미트에 들어오셔서 보셨는데 많이좀 떨었고 개발을하며 ppt만들일은 없을줄알았는데 ppt까지 만들어서 발표하게 되었다. 리드님이랑 사수님이 질문때 많은 지원사격을 해주셨다는 생각이 들었고 두분은 모르시겠지만 사실나는 정말 감사했다ㅎㅎ 그리고 무엇보다 6개월간의 인턴 즉 현장실습이 종료되었다! 맨처음 글을올렸던 올해 6월말에 업무에 있어 조금이라도 도움이 되는 인턴이되자!라고 마음 먹었는데 다른 팀원분들도 그렇게 느끼셨으려나 모르겠다..ㅎ... 자주 실수도 하고 모르는것도 많아서 질문 투성이였는데 화한번 내지않고 모두 친절하게 알려주신 팀원분들께 그저 감사할 따름이다. 지금와서 생각해보면 업무가 정말 많다고 혼자서 불평도 했었고 초반에 엄청난 열정에 비해 조금은 게을러지고 했던것 같기만 하다. 사실 6개월간 많은 일이 있었고 처음으로 자취라는 것도 경험을 해서 후회되진 않는시간이었다. 무엇보다도 6개월전 무급이라도 개발자분들과 일을 함께 해볼수 있는 기회가 있었으면 좋겠다라고 생각도 했었고 불합 통지를 받았지만 추후 면접을 보지 않겠냐고 선뜻 다시 물어봐주신 pms-mpi셀 팀원분들한테 너무 고맙기만 한것같다. 자취라는 꿈과 개발일을하며 돈을 벌 첫기회를 준 기업이다. 사실, 일을 하기전 직급에 따라 불합리한 상황이 벌어지는것이 조금은 당연한거라 생각했는데 이스트시큐리티에서 일을 하며 정말 내가 잘못생각했구나!라는걸 느꼈다. 나에게도 중요한 업무를 할당해주시고 내의견을 조금이라도 무시하는 경향이 전혀없었으며 직급이 높다고 해서 불합리한 상황이란게 전혀없었다. 모든분들이 의견을 낼수 있으며 피드백을 바로바로주시고 정말 자유로운 분위기의 회사였다. 물론 기술스택이나 목표로 잡았던 기업이아니라 당장은 지원하진 않겠지만 회사생활을 해보면 이스트소프트라는 기업 정말 좋은 회사인걸알수 밖에없다. 개발자에서 대표가 되신 대표님부터 시작해서 현장실습생까지 모두가 동등한 위치에서 자신의 능력을 한껏 뽐낼수 있는 회사라고 생각한다. 많이 힘들었기도 했지만 얻은것도 많았던 터라 이제 막 나왔는데 아련한 기분이 든다ㅎㅎ.. 다만 걸리는건 중간에 이슈가 발생해서 업무를 다못끝냈다는거..? 많이 못끝내고나와 아쉽고 죄송하기만 하다....
-2021 회고
앞에 주저리 주저리 썻지만 요약하자면
6개월간의 자취생활과 꿈에 그리던 인턴을 해냈다!
한번은 제대로 완성해보고 싶었던 getit 프로젝트를 완성해냈다!
-2022 목표
창업 : BORA로 창업이 목표다. 당장 어떻게 하는진 모르겠다. 일단 앱개발해서 대회도 나가보고하고싶다.
졸업: 졸업이다. 코스모스 졸업인데 일단 정처기따면 졸업일테니 정처기가 목표인가?ㅎ..
취업: 학생이지만 내생각엔 취준생이 맞다 좋은회사가서 발전하고 싶다. 좋은회사 갈꺼다
cs, 알고리즘 공부좀 개학전까지 끝내두기!
django이외에 다른 무기하나더 장착해두기!
GETIT 광고달기: 에드센스 달고 싶다. 알림, 채팅기능달면 다른 스터디 모집엔 비교할수 없는 최고라고 자신한다. 광고비 받아서 서버비용이라도 충당하고 싶다ㅎㅎ...
여행: 사실 생각보다 돈좀 많이 모은것 같아 1달간 돈다쓰고올꺼다. 제주도가서 앞으론 쉬고싶지 않을정도로 좀 쉬다와야겠다.
필수적인것만 적었는데 다이뤘음 좋겠다!! 2022년도 화이팅!
그리고 2021년은 너무 그냥 고마운 한해였다!!
-끝-
+)사실 WIL컨텐츠는 아무래도 잠시 멈추려한다... 한번에 몰아쓰는 경향이 있는것 같아서 뭔가 제대로 매일 공부할만한 것이 생기면 그때 진행할꺼다ㅎㅎ....... 일단 남은기간동안 연합동아리 지원, 정보처리기사 공부, 프로젝트 진행이 대다수 일듯해서?? 일단 잠시는 멈춘다.. 다음에 시작하면 WIL이 아닌 TIL로 복귀하길...ㅎ
허허... 나약한 의지박약이 아니라 그냥 바빳던거다 ㅎ... 매일 쓰기로했지만 귀차니즘 + 일정상의 빡빡함 때문에 쓰지를 못했다. 인턴일이 꽤나 고되고 힘든것같다. 앞으로 15일여정도 남아있는데 유종의미를 얻고 싶다허허....
그리하여 어차피 매일 못쓴다면 적어도 매주쓰자! 라는 취지하에 TIL -> WIL로 변경하였다. 나중엔 MIL로 그리고 나중엔 YIL로..?ㅎ... 암튼 가장 많이 진행된건 인턴업무다... 약 3개월여간 기획후 개발까지 많은 발전이 있던것 같은데 최종시연전 팀원분들께 시연을 해보자!라고 리드님께서 말씀하셔서 약 한달간 또 밤을 새가며 이리저리 고쳤고 반은 성공으로 마무리 하였다. 최종시연은 약20여분 앞에서 시연하기로 했는데 그게 앞으로 1주일도 남지 않아서 이래저래 부담감은 크지만 그동안의 실수를 만회할 찬스라고 생각되기 때문에 유종의미를 얻을수 있는 절호의 찬스라 생각하고 열심히 준비하고 있다! 아마도 다음 WIL은 시연이 끝나고 멘탈탈탈 털린 상태로 작성하지 않을까?싶다. 일단 그동안 진행사항은
한주간 진행량
GETIT 프로젝트
-HTTPS적용
사실 이부분은 지난번에 했던건데 하다보니 제대로 적용이 안됐었다. client분과 잠시 일정상 프로젝트 중단했다 혼자서 하다보니 이부분을 모르고 있었는데 결국 또다시 2주간 삽질후 적용에 성공하게 되었다. 이것관련해서는 잊지 않기 위해 따로 블로그에 포스팅해뒀다.
https를 적용하며 구글,카카오,깃허브 3가지 소셜로그인 모두 에러가 발생했다. 당연히 요청하는 주소가 변경되서 문제가 생긴거라 손쉽게 고쳐질줄 알았는데 그게 아니였다... 깃허브, 구글을 문제가 없는데 카카오같은경우는 지금도 현재 수정을 못해서 또 밤새고 있는 중이다. 그리고 예를들어, test@gmail.com이라는 구글 계정이 있고 test@gmail.com이라는 깃허브 계정이 있으면 서버에 오류가 발생하는 문제가 있어서 이부분을 수정하게 되었다. 이것관련해서는 진짜 회사 프로젝트 시연하고 나서 소셜로그인 총정리!!라는 주제로 포스팅을 할예정이다(계속늦어지는것 같은건 느낌탓인가..ㅋ)
-세부 API수정
CLIENT개발자분중 한분이 취업을 하게 되며 한분이서 작업을 하다보니 지체된 감이 있는데 작업을 진행하시다 API에 추가 요구사항이 좀 많이 생겼다. 그래서 이것저것 고쳤고 현재도 고치고 있는중이다.
나에게 개발자를 준비하는데 있어 변곡점이 된 GETIT프로젝트 이므로 완성도 높게 올해안에 꼭! 마무리 지을것이다.
인턴
-패치랩 개발
할많하않... 너무 고되고 힘들고 스트레스 이빠이 받는다.. 처음 하는 분야가 너무 많아서 힘들고 그렇기 때문에 레퍼런스또한 없어서 많이 삽질중이다. 그래도 처음으로 REACT로 기능개발을 해봤고 REST통신간에 반복문을 돌려 원하는 값이 나올때까지 계속해서 요청을 보낼수 있구나! 회사에서 요구사항이 있을땐 이렇게 행동해야 하구나!라는걸 수없이 고통받으며 많이 느끼고 있는중이다. 이에 대한 설명은.. 나중에 최종시연이 마무리 되고나서 모든걸 적어낼것이다.. 무조건 깃헙에 결과물 올린다 하...... 애증의 패치랩 꼭 마무리짓자..........................
kotluck
-
기획사실 팀원들에게 정말 미안한 부분이기도하고 감사하기도 하다. 회사프로젝트에 치여서 시간이 없고 getit프로젝트가 마무리되서 시작한 프로젝트였는데 getit도 일정안에 끝내지 못해서 가장 후순위로 밀린데다 내친구를 불러와 기획자 포지션에 두고 진행중인데 많이 신경을 못썻는데도 불구하고 각자가 그래도 열심히 해주고 있는것 같다. 현재 기획단계에서 세부화가 정확히 안되서 여전히 기획 진행중이며 클라이언트 개발자 두분은 다행히? 바쁘셔서 일단은 쉬고 계신다 다음주부터 개발 다시 들어가겠다고 말씀드렸으니 기다려주신만큼 열심히 잘만들어봐야겠다.
다음목표
getit
-소셜로그인 정상화
-api수정
인턴
-패치랩 시연 가능하도록 개발 및 개발문서, 프로젝트 설명안 작성
kotluck은 잠시 쉰다.. 팀원분들 정말 미안합니다 ㅠ...
일단 다음주에 글을쓸때는 내가 너무 자랑스러워서 자존감 만땅인 상태로 WIL?일기인가...암튼 글작성하길 바라며 글을 마친다!!!!