[Pre-Onboarding] - 에이모 기술과제 회고

김주현·2021년 12월 10일
0

짧지만 길었던 위코드 과정이 끝나고, 기업협업을 택했다면 현업에 나가서 일을 하고 있겠지만

아직은 python,django만으로는 학습이 부족하다는 판단이 들어 1개월간 원티드에서 주최하

는 백엔드 코스과정이 있다는 소식을 듣고 참여하기 위해 신청서를 접수하였다.

신청결과 위코드x원티드-프리온보딩과정에 참여하게 되었고, 지금부터 첫과제에 대한 과정과 소감을 적어나가도록 하겠다.

에이모 과제 정보

  • 위코드x원티드 백엔드 프로온보딩 과제1
  • 기업명 : 에이모
  • 깃허브 링크

django vs flask

참여기업은 총 14개의 기업이 참여를 하였고 그 중 첫 과제는 에이모라는 기업에서 낸 과제로,

다음과 같이 3일이내로 선호기술스택을 사용하여 기술구현을 해야합니다.
*꼭 선호기술스택이 아니어도 되지만 가산점 부여 안 될 수 있음!

처음엔 django와 flask 중에 익숙한 django를 사용할지 처음접해본 flask 사용할지에 대해 고민이 많았다. 여러 회의끝에 django로 시작하였지만 mongodb와 연동을 하려면 djongo가 필요하다는데 mongodb 역시 처음 사용해보는 저장소이니 이왕 공부하기로 한거 flask와 같이 공부해보자 라는 취지로 flask를 선택했다.

내가 담당한 API

view작성에 대한 코드는 django와 별반 다를게 없었으며, 댓글 CRUD를 위해 get/post/delete/put 메서드를 사용했다.

class CommentApi(Resource):
    @jwt_required()
    def post(self):
        try:
            user = get_jwt_identity()
            data = request.get_json()
            body = data['body']
            
            comment   = Comment(
                body  = body,
                user  = user,
                post  = Post.objects.get(id=data['post'])
            ).save()
            
            return {'message' : 'SUCCESS', 'comment_id' : str(comment.id)}, 201

        except KeyError:
            return {'message' : 'KEY-ERROR'}, 400
        
    @jwt_required()
    def get(self):
        try:
            comments = Comment.objects.all()
            offset   = int(request.args.get('offset', 0))
            limit    = int(request.args.get('limit', 5))
            
            comment_list = [{
                'post'       : comment.post.title,
                'body'       : comment.body,
                'user'       : comment.user.email,
                'updated_at' : '{}'.format(comment.updated_at)
            }for comment in comments[offset:offset+limit]]
        
            return comment_list, 200
    
        except KeyError:
            return {'message' : 'KEY_ERROR'}, 400

    @jwt_required()
    def delete(self, comment_id):
        try:
            user = get_jwt_identity()
            Comment.objects.get(id = comment_id, user=user).delete()
            
            return {'message' : 'SUCCESS'}, 200
        
        except Comment.DoesNotExist:
            return {'message' : 'COMMENT_DOES_NOT_EXIST'}, 400

    @jwt_required()
    def put(self, comment_id):
        try:
            data    = request.get_json()
            user    = get_jwt_identity()
            comment = Comment.objects.get(id=comment_id, user=user)
            comment.update(updated_at=datetime.utcnow, **data)

            return {'message' : 'SUCCESS'}, 200

        except KeyError:
            return {'message' : 'KEY_ERROR'}, 400

        except Comment.DoesNotExist:
            return {'message' : 'COMMENT_DEOS_NOT_EXIST'}, 400

소감

위코드 당시, 프로젝트를 경험해보면서 여러 API를 다뤄본 바가 있어 금방 적응할거라고 생각했었다. 하지만 처음 접해본 flask와 mongodb를 처음부터 공부하면서 진행하기란 쉽지 않았습니다.

초기세팅부터 django랑 너무 달라서 적응하느라 시간이 오래 걸렸다.
django로 했을 당시 명령어 한줄이면 프로젝트생성부터 앱생성까지 한번에 되었는데 flask는 실행파일부터 db파일 그리고 기능별 앱파일들을 손수 내가 알아서 생성해야 했다.

원래 팀별 인원이 6명으로 배정이 되었지만 이번 과제는 과제규모가 작다보니 3명씩 나눠서 진행하였습니다.

다행히 이번에 참여했던 인원들 중 같은 위코드 기수 수강생들이 많았기에 배정된 팀원들 역시 같은 위코드 기수 수강생이어서 그런지 어색함 없이 의사소통 진행이 잘 되었습니다.

짧다면 짧은 3일이 채 안되는 기간동안 각자맡은 api를 구현하면서 막혔던 코드를 서로 봐주면서 도와주었기 때문에 혼자 공부할 때보다 해소하지 못했던 코드를 바로바로 해결할 수 있어서 너무 좋았습니다.

팀원들과 공부하면서 mongodb에 공부하며 알아본 결과, RDBMS에 비해 성능이 100배이상 빠르고 정말 최적화된 프레임워크라고하여 요즘 스타트업들은 mongodb를 많이 쓴다고 합니다. 이를 통해 nosql에 대해 자세히 짚고 넘어가야 겠다는 생각이 들었고 대용량데이터를 db에 저장할땐 mongodb를 써야 성능을 늘릴수 있다는 것을 알게 되었습니다.
프로젝트를 진행하면서 장고에 익숙해서 그런지 처음써본 flask와 mongodb를 프로젝트에 적용해보니 세팅과정에서 오류가 많이 발생하여 오류해결 하느라 시간소모를 많이해서, 천만건의 대용량데이터를 저장해보지 못한 것이 너무 아쉬었습니다.
앞으로 나오게 될 기업과제에서 선호하는 기술스택이 django가 아닐 수도 있다는 생각이 들었고, 타 프레임워크에 익숙해질 수 있게 노력해야겠다는 생각이 들었습니다.

0개의 댓글