[dream.log] 기업협업 후기

dream.log·2021년 10월 13일
0

dream.log

목록 보기
11/12
post-thumbnail

벌써 기업협업을 다녀온지도 10일 정도가 경과했다.
위코드 수료 후, 푹 쉬기도 하고.. 이력서 및 포트폴리오 정리를 우선으로 진행하다보니
기업협업 후기와 위코드 수료에 관한 회고가 조금 늦어지게 됐는데..
그래도 기억이 더 날아가기 전에 후기를 남겨보고자 한다.

♣️ 기업 협업 진행 배경

2차 프로젝트를 한창 진행하던중 기업 협업에 대한 안내를 받았다.
여러 리스트 중 주체적으로 업무를 진행할 수 있고 프로젝트가 흥미가 가는 기업 을 위주로 추렸고,
1순위로 희망했던 기업에 협업을 다녀왔다.

위코드에서는 2주간 프로젝트를 진행했었기에 한달이면 상대적으로 여유롭게 마무리할 수 있지 않을까? 하고 생각했지만..... 그 생각은 아주 오산이었다^^!

한 달 여간 수원에서 성수까지 왕복 네시간을 다녔다.
두달을 몰입했던 여파인지 체력적으로 유달리 많이 힘들었다.
하지만 좋은 팀원들과 함께 했기에 무사히 프로젝트를 마칠 수 있었던 듯 하다!

♣️ 프로젝트 적용 기술 및 구현 기능

☑️ 언어, 프레임워크, 데이터베이스
Python, Django Rest Framework, MySQL(RDS)

☑️ 기타 도구 |
Sendgrid, s3(AWS storage)

☑️ API 문서화
Swagger (with drf-yasg)

☑️ 협업 도구
Git + GitHub, Github Issues, Github Projects

☑️ 배포 관련
Docker, Github Actions, AWS(ECR, EC2)

☑️ 구현 기능 (내가 구현한 기능 파랑색 볼드)

✔️ 지원 이력 관리(관리자 전용) API
✔️ 슈퍼 어드민 생성/ 조회 / 수정/ 삭제 API
✔️ 어드민 페이지 내 대시보드/ 최근 공고/ 최근 지원자 API
✔️ 어드민용 공고, 지원자 전체 조회 / 공고, 지원자 일부 정보 조회 API
✔️ 지원자 평가 코멘트 생성/조회/수정/삭제 API
✔️ 채용공고 생성/수정 텍스트 에디터 기능 추가

  • 이전 기수 구현 기능
    유저 회원가입/로그인, 정보 조회/수정, 비밀번호 변경 관련 API
    채용 목록 조회/생성, 채용 상세 조회/수정/삭제 API
    지원서 작성, 조회, 수정, 삭제 API

♣️ 기억에 남는 코드

⚠️ 해당 프로젝트는 오픈 소스로 진행되었습니다.

📨 어드민 페이지 내부 대시보드 데이터 구현

@admin_only
  def get(self, request):
      try:           
          today_standard    = datetime.now()
          before_day        = today_standard - timedelta(days=1)
          before_weeks      = today_standard - timedelta(weeks=1) 
          after_weeks       = today_standard + timedelta(weeks=1)

          applicant         = Application.objects.values_list("created_at", flat=True).distinct()
          today_applicant   = [a for a in applicant if a >= before_day]       
          recruit_progress  = Recruit.objects.filter(deadline__gte=datetime.now())
          new_progress      = Recruit.objects.filter(created_at__range=[before_weeks,today_standard])
          deadline_progress = Recruit.objects.filter(deadline__range=[after_weeks,today_standard])

          results = {
                  "today_applicant"  : len(today_applicant),
                  "progress_recruit" : recruit_progress.count(),
                  "new_recruit"      : new_progress.count(),
                  "deadline_recruit" : deadline_progress.count()
              }
          
          return JsonResponse({"results": results}, status=200)

      except Recruit.DoesNotExist:
          return JsonResponse({"message": "RECRUIT_NOT_FOUND"}, status=404)  

오늘의 지원자 / 진행중인 공고 / 새로등록된 공고 / 곧 마감될 공고에 해당하는 데이터를 찾아 숫자로 도식화하는 코드이다.
프로젝트 진행하면서도 날짜와 열심히 싸우고 왔는데...
SQL안에 들어있는 데이터를 불러와 (지원서 상의 날짜)
계산을 해야했기에 쉽지 않았다.
가장 첫 데이터인 '오늘의 지원자'를 계산하기 위해
어떤 방식이 좋을까 많은 고민을 했는데,
위코드데이때 경훈님께서 list comprehension을 사용해보라는 좋은 팁을 주셔서 무사히 해결할 수 있었다.

하나를 해결하고 나니, 그 다음 데이터들은 비교적 술술 풀렸다.
원하는 데이터 값을 잘 얻기 위해서는 쿼리문을 잘 다뤄야하고,
raw query도 능수능란하게 다룰 수 있어야 함을 깨달았다.


📨 어드민 별 읽지 않은 지원서에 New 라벨 붙이기

ApplicationAccessLog.objects.create(   
              user_id        = request.user.id,
              application_id = application_id,
          )
 ...
results = [{
 ...
  "log"               : ApplicationAccessLog.objects.filter(user_id=request.user.id, application_id=application.id).exists(),     
}]

코드로 보면 간단해보이는데, 유저를 구분해 라벨을 붙이는 기능을 어떻게 구현해야할지 감이 오지 않았다.
모델을 수정해 요청을 보낸 유저의 로그를 기록하고,
읽은 지원서의 로그를 기록한 정보를 프론트단에 보내주면 된다는 답을
CTO님께서 주셨고, 내용을 바탕으로 코드를 작성했는데 작동이 되다가도 안되고..
뭐가 문제일까 고민을 했는데, 로그를 만들어주는 create view를 지원서의 세부사항을 읽는 뷰에 붙여주지 않아서 생긴 문제였다!

비교적 간단하게...? 해결하긴 했지만, 유연한 사고와 다양한 방법을 많이 배워야겠다는 깨달음을 준 코드와 모델이었기에 기록으로 남긴다!

♣️ 배우고 느낀 점

💌 egile하게 일하기 (epic, story, task)

위코드에서도 에자일 방법론에 의거한 개발을 진행했지만,
github issue 탭을 활용해 현업에서 어떻게 활용하고 있는지를 체득할 수 있었다.
업무의 단위를 쪼개고 그에 맞추어 업무 진행 일정에 맞추어 개발을 진행한다.
처음이라 쉽지 않은 부분도 있었지만, 방법론을 익히고 준수하기 위해 노력했다.

그리고, 루틴을 잃지 않기 위해 트렐로도 만들고 주간 회의도 진행했다.
어제 한 일, 오늘 한 일, Blocker를 공유하며 프론트와 백엔드 간 업무 진행 내역에 대해 함께 소통했다.

[ 우리만의 업무 루틴을 잡기 위해 사용했던 트렐로 ]

소통에 적극적으로 임하고 어려운 문제를 함께 고민하고 해결한 우리 팀원들이 있어 PM으로서 정말 감사했다.

💌 Figma를 보며 작업 진행 페이지 구별

우리가 근무한 회사에는 UI/UX디자이너분이 계셨고,
그 분이 Figma로 구현해야 할 페이지의 디자인을 해서 우리에게 전달을 해주셨다.
해당 내용을 바탕으로 프론트는 큰 레이아웃에서 기능으로,
백엔드는 API별로 역할을 나누어 개발을 시작했다.
하지만 Figma만을 보고 개발을 진행하는 것은 처음이었기에
페이지의 세부적인 기능을 이해하고 있는 것들이 조금씩 다르기도 했고
역할분담을 하지 않았으나 개발이 필요한 페이지(!)가 등장하기도 했다.
처음이라 한 실수였겠지....!
실제 현업에서 일할 때는 Figma와 같은 디자인툴에 디자인 된 내용을 기반으로
개발을 진행하게 될테니 해당 부분에 대한 회의와 소통이 무척이나 중요함을 깨달았다.

💌 기존 코드 유지보수 진행
해당 작업은 처음 진행해보았기에 더욱 값졌다.
22기분들이 작업하고 가신 코드에 이어서 기능을 추가로 구현해야 했기에,
프로젝트 첫주에는 Django Rest Framework를 학습하며 이전에 작성된 코드를
학습하고 리팩토링 할만한 부분이 있는지 찾아보았다.
나와는 다른 방식으로 코드를 짜신 것을 보기도 하고, 쿼리문을 풀어내신 것을 보면서도 배울 수 있었다.
회사에 들어가서도 이 전에 작업한 코드를 익히는 것이 중요할텐데, 타인이 작성한 코드를 분석하는 연습도 중요하겠다는 생각이 들었다!
그렇기에 API 문서화도 잘 해두는 습관을 들이자!

💌 정답은 가까이 있다.
200 OK를 위해 다양한 방법의 시도와 구글링(a.k.a삽질) 을 유달리도 많이 했다.
물론 여러 라이브러리와 방법들을 찾아보며 실력이 성장했으리라 믿는다.
다만 고민이 깊어지다보면 정답과는 한참....먼 곳으로 가기도 하더라.
잘 풀리지 않으면 객관적인 눈으로 처음부터 찬찬히 다시 살펴보자!

유쾌한 분위기 메이커이자 위트있는 명성님,
묵묵히 해야 할 일을 다 해내는 주영님,
마음이 따뜻하고 배려심이 많은 유영님과 함께해서 무사히 끝낼 수 있었다.
부족한 막내 PM을 믿고 따라와주셔서 감사하다!

한 달간의 기업협업 끝!!!!!!!!!!

profile
한 걸음, 한 걸음 포기하지 않고 발전하는 Backend-developer 👩🏻‍💻 노션 페이지를 통한 취업 준비 기록과 회고를 진행하고 있습니다. 계획과 기록의 힘을 믿고, 실천하고자 합니다.

0개의 댓글