[Retrospective]2차 프로젝트를 마치며(feat.wanted)

jake.log·2020년 10월 18일
0

2차 프로젝트가 끝났다.


1. 쉽게 생각하지 말자. 더 공부하자.


  • 로지텍 웹사이트 클론을 했던 1차 프로젝트를 하고 나서 '한번 해봤으니, 2차 프로젝트는 조금 더 수월하게 할 수 있겠지?'생각했다.

  • 조금은 자신감이 찬 상태로 시작해서인지, 모델링을 할 때 1차 프로젝트 때 보다는 수월하게 진행이 되었다. 같이 백엔드를 담당한 팀원과 웹사이트 분석하고 초기 모델을 만드는데 큰 어려움이 없었고, 원티드 웹사이트가 관계가 분명하게 보이는 것 같아 어렵지 않게 모델링을 진행했다.

  • Aquery를 이용한 원티드 모델링

  • 그러나.. 역시 너무 쉽게 생각했다. 나에게 자신이 아닌 자만이 있었다.

  • 1차 때보다 시간을 더 투자하기는 했지만 생각하지 못한 점이 있었다.

  • 작업을 진행하는데 있어 효율적인 데이터 전송을 위한 관계를 좀 더 깊이 있게 생각하지 못했다. 정말 단순하게 관계에 대해서만 생각하여 데이터를 효율적으로 뿌리는 모델에 대한 생각이 심도있게 이루어지지 못한 것이다. 이에 따라 models.py에서 지속적인 수정이 이루어졌고, views.py 를 하는데도 refactoring이 계속 되었다.

  • 기껏해야 한번 프로젝트를 한 건데 조금 익숙해졌다고 해서 더 깊이있게 공부하지 않고 모델이나 코드에 대해 한번 더 생각하지 않은 점을 반성한다.

  • 모델을 심도있게 짜지 못하니, 좋은 로직이 많이 나오지 못했던 것 같다. 새로운 로직을 만들어야하는데 모델의 관계가 불명확하여 더 좋은 로직을 만들지 못해 아쉬움으로 남는다.

  • 앞으로는 개발자로서 무언가를 경험했다고 해서 그게 무조건 나 내거가 된다고 생각하지말자.

  • 쉽게 할 수 있을거라는 생각은 버리자. 했던 것도 다시 보고, 조금 더 심도있게 공부해나가는 개발자가 되고 싶다.


2.새로운 도전을 두려워 하지 말자.


  • 2차 프로젝트는 1차 프로젝트와 다르게 저작권 문제로 크롤링을 진행하지 않았다. 그래서 이번 프로젝트는 view를 짜는데 충분한 시간을 투자했다. 2차 프로젝트를 하면서 새로 배우고 적용한 개념들이 많았다. 1차 프로젝트에서 product 애플리케이션을 하여 account(user) 애플리케이션에 사용되는 로직은 잘 이해하지 못했었는데, 이번에는 account 애플리케이션을 맡게 되어 로그인 데코레이터, 좋아요 기능, 이력서 CRUD 등 새로운 기능을 구현해 볼 수 있었다.

  • 1차 때 해보지 않았던 기능이라 코드를 잘 만들 수 있을지 두려움이 있었지만, 실제로 해보니 너무 재미있었고 view를 짜는데 이해도가 조금 더 상승한 것 같다.

  • 특히 소셜 로그인을 구현하는데 있어서 kakao developers의 공식 문서를 보면서 이해하려고 노력하며, 백엔드 동기들과 소통하면서 어떻게 구현할까 고민했던 과정은 이번 프로젝트에서 가장 즐거운 시간이었다.

  • 새롭게 기능을 만들고 모르는 기능을 구현해나갈 때 두려움은 있지만, 성공해 냈을 때 기쁨이 크다.이 기쁨을 잊지 말고, 항상 새로운 것에 대해 공부하고 도전하자.


3.조금은 알 것 같다. 깃과 깃허브!


  • 저번 프로젝트 때 깃과 깃허브는 구름같다고 했었다.

  • add, commit, push, pull 등 프로젝트 때 사용되는 기본적인 명령어들을 써보았지만, 팀으로 이루어져 있을 때 왜 conflict가 나고 어떤 순서로 flow가 이루어지는지 명확히 이해하지 못했다.

  • 그리고 이번에는 rebase까지! 그야말로 첩첩산중이 되었다.

  • 그러나 정말 신기하게도 프로젝트를 진행하면서 rebase를 하고 merge가 되고 pull origin master를 하는 과정을 통해 git에 대한 개념 정리가 잘 되었다. 멘토님께서 git flow에 대해 간략히 설명해주신 것이 가장 큰 도움이 되었고, 그림으로 git flow를 그려보며 이해해본것도 git 에 조금 더 친근해 질 수 있는 계기가 되었다.

-직접 그려본 git flow


4.함께 일하고 싶은 개발자.


  • 1차 프로젝트 때 보다 많은 기능을 구현 했고, 여러 개념들이 많이 정리가 되었던 2차 프로젝트다.

  • AWS S3 bucket file upload, kakao social login, 등 재미있는 기능을 구현하면서 배움의 기쁨을 느꼈다. 이해가 안 되는 부분은 다시 공부하고 기록하며 이해하려고 노력했다. 주도적으로 공부하고 성장하는게 어떤건지 조금은 알게 된 것 같다.

  • 그러나 1차 프로젝트 처럼 이번 2차 프로젝트도 너무 나의 성장에만 집중했다. 1차 프로젝트 때 못한 것들을 많이 해보고 싶다는 마음에 내 코드에 집중했고, 팀원들과 같이 함께 무언가를 하려고 하지 못했다. 내가 실력이 부족해서 그런게 가장 큰 이유겠지만 팀원들이 고민하고 힘들어 하는 부분을 나도 고민해보고 같이 해결해보려고 노력했어야 했는데, 그러지 못했다.

  • 같이 일하고 싶은 개발자! 이런 개발자가 되기 위해서는 나에게만 집중하면 안 된다. 실력 성장은 기본이다. 성장에만 초점을 맞추지 않고, 주변에 같이 일하는 개발자들과 함께 가기위한 노력을 하자.

  • 이번 프로젝트 때 함께한 성호님과 다른 백엔드 동기 분들이 내가 어려워 하는 부분에 도움을 많이 주었는데 그때마다 너무 감사했고 다음 프로젝트에 함께하고 싶다는 생각을 했다. 나도 함께 일하고 싶은 개발자가 되기 위해 실력을 키우고 그 실력으로 도움을 주는 사람이 되자.

5.Appenddix) 기억하고 싶은 코드

아래 코드는 이력서 CRUD 중 Update에 해당하는 ResumeUpdateview 클래스다. patch 메소드로 update를 구현했는데 시간상 실제로 프론트와 통신을 절반밖에 구현하지 못해 아쉬운 마음이 있다.
코드를 짜는데 큰 어려움이 있었던 것은 아니지만, 많은 데이터를 update하고 상황에 따라 원하는 정보만 변경할 수 있는 로직을 구현했다는 것이 기억이 남는다.

class ResumeUpdateView(View):            
    @login_decorator
    def patch(self,request,resume_id):
        data = json.loads(request.body)
        user = request.user
        
        if Resume.objects.filter(id=resume_id).exists():
            
            if Resume.objects.get(id=resume_id).email != user.email:
                return JsonResponse({'message':'INVALID_ID'},status =400)

            try:
                resume = Resume.objects.get(id=resume_id)
                
                resume.title        = data['title']
                resume.author       = data['author']
                resume.email        = data['email']
                resume.phone_number = data['phone_number']
                resume.description  = data['description']
                resume.save()      

                updated_resume_json = {
                    'title' : resume.title ,
                    'author': resume.author,
                    'email' : resume.email,
                    'phone_number':resume.phone_number,
                    'description':resume.description
                }
                
                if data['career']:
                    for data in data['career']:
                        Career(
                            start_date   = data['start_date'],
                            end_date     = data['end_date'],
                            comapny_name = data['company_name'],
                            department   = data['department']
                        ).save()

                if data['education']:
                    for data in data['education']:
                        Education(
                            start_date    = data['start_date'],
                            end_date      = data['end_date'],
                            college_name  = data['college_name'],
                            major         = data['major'],
                            contents      = data['contents']
                        ).save()

                resume.resume_status ='작성 완료'
                print(resume.resume_status)
                return JsonResponse({'updated_resume':updated_resume_json},status=200)
            
            except Resume.DoesNotExist:
                return JsonResponse({'message' : 'UNKNOWN_RESUME'}, status = 404)

            except KeyError:
                return JsonResponse({'message':'KEY_ERROR'},status=401)       
        
        return JsonResponse({'message':'INVALID_ACCESS'},status=400)
profile
꾸준히!

0개의 댓글