티스토리 뷰

 
3주간 프로젝트를 마치고 회고록을 씁니다.
앞으로 남은 과제들이 많아서 해당 부분들은 차차 업데이트 할 예정입니다.
 
 

개발 배경

  • “네카라쿠배 개발자와 함께 Spring으로 인스타그램 서버 만들기” 라는 딥다이브(클론 코딩 챌린지) 에 참여하게 되었다.
  • 챌린지의 주된 목표는 인스타그램 API 개발과 함께 1. Spring Security & JWT 사용 2. CI/CD 파이프라인을 구축하여 자동화 배포하는 것이다.
  • 진행 중인 하루냥 프로젝트에서 Spring Security 에 대한 이해도 부족, 젠킨스 자동화 배포 구현 실패 경험으로 스스로 완성해보자는 목표가 있었다.

 

 
 

구현기간

23.03.24 ~ 23.04.13 (3주)
 
 

깨달은 점

강의로만 보던 스프링 시큐리티는 직접 구현하다보니 생각보다 더! 많이! 복잡하고 어려웠다.

  • 뭐든 눈으로 보는건 쉽다. 기본적인 인증, 인가부터 에러 핸들러에 JWT까지 신경쓰다 보니 생각보다 너무 할게 많았다. 인프런에서 시큐리티 강의를 봤음에도 불구하고 타임어택이 강렬했다..
  • 역시 내 프로젝트에 직접 적용하는거 만큼 효과적인 계단식 성장법은 없는 거 같다.

 

짧은 시간 내에 설계, API 구현, 문서화까지 모두 하는건 생각보다 많은 리소스가 든다.

  • 현재 재직 중인 회사의 업무는 기간이 정해진 외부 프로젝트 구축이다. 이런 회사 특성상 시니어 개발자분들이 미리 설계해놓은 프로젝트에 들어가서(사실 대부분 회사가 그럴거 같긴 하지만..) 할당 받은 기능만 집중해서 구현하다보니 전체적인 설계, 도메인& 데이터베이스 모델링 등등 전반적인 프로젝트 구성에 대한 이해도가 많이 떨어진다.
  • 그래서 프로젝트를 혼자 설계하려고 하면 너무나도 막막하고.. 어디서부터 손을 대야할지 고민하는 시간이 길었다. 그래도 이번엔 나름 사이드 프로젝트를 한번 해서 그런지 아예 갈피조차 못 잡은 건 아닌데, 그래도 구현하다보니 점점 체계 없이 진행하게 되는 내 모습… 시간에 대한 압박감으로 더 그랬다.
  • 특히 개발 문서화는 아직도 습관이 들지 않았다. 그때 그때 하면서 같이 기록하거나, 미리 설계하는 단계에서 작성해야 하는데 정리를 못해서 앞으로 해야할 과제로 남아있다.

 

사용자 요구사항을 정리하고, API 설계서를 만드는건 중요하다.

  • 초반에 설계가 중요한 이유가 이거다. 사용자 요구사항을 적다보면 필요한 기능의 주요 로직, 예외처리 사항이 저절로 정리가 된다. (왜 온보딩 글을 보면 요구사항 정리만 한참을 하는지 새삼 느낀다.) 또 Request, Response 를 잘 정리해놓는 것도 꼭 필요하다. 문서로 정리를 안하니까 스스로도 헷갈려서 힘들었다. 다시 한번 문서화의 중요성..

 

클린코드!

  • 최근에 도메인 주도 개발에 관심이 있어서 책을 보니까 저절로 객체지향에 대해 신경쓰게 된다. 이번에 조건에 있는 클린코드 규칙도 결국 이 일환이 아닐까 생각한다.
  • ‘도메인에 관련된 중요한 로직은 도메인 내부에 작성한다.’ 지키려고 노력했다. 머릿속에 항상 생각하면서 코드를 쓰려고 하니 이전보다 더 나은 스타일이 된 거 같긴 하다.

 
 

부족했던 점

요구사항을 잘 보자.

  • 이 프로젝트는 구현에 필요한 가이드를 호스트님이 제공해주고, 그에 맞춰서 개발하면 기준에 따라 점수를 매기는 식으로 진행된다. 포인트를 중점으로 두고 기능을 구현한다지만 사람 마음이 그렇다.. 하다보면 자꾸 모든 기능 구현에 대해 욕심이 난다. API 명세서에 있는 회원, 팔로우, 글, 댓글, 피드, DM 그 어느것도 인스타그램에서 빠질 수 없는 항목들 아닌가? 그래서 하나도 놓치고 싶지 않았다. 오오 대왕 실패의 원인 등장!
  • 물고기를 다 낚으려고 하다보니 이것저것 맛보기하는 기분.
  • 굵직한 기능을 기간 내에 완성하지 못했다.
    • 시큐리티에 대한 전반적인 코드 구현은 했고, 토큰 발급까지도 하긴 했는데.. 인증객체에서 contextId 가져오는걸 못했다. 이건 시큐리티 이해도 부족이라고 생각하고 반드시 수정해야겠다.
    • 특히 cusror pagination은 생각보다 더 구현이 까다로워서 시간을 많이 투자했는데도 아직 완성을 못해서 아쉽다.

 

내가 하고 있는 프로젝트는 스프링 프레임워크에 필요한 라이브러리를 가져다 쓰는걸 잊지말자.

  • 시큐리티를 구현하다가 특정 메서드가 타입 에러가 나서 작동하지 않는 문제가 있었는데 3일 동안 해결을 못했다. 거의 처음으로 롤백 하다시피 해서 찾은 에러 원인은 잘못 가져다가 쓴 라이브러리였다. 너무 당연하게 가져와서 사용하는 컴포넌트들이 라이브러리에서 제공된다는걸 잊어버리고 1차 원인으로 찾아보지 않은게 문제였다.

 

개발자에 대한 정의

  • 개발자는 코더가 아니다. 사용자의 요구사항에 따라 컴퓨터 세상에서 서비스를 만들어 제공하는게 개발자의 최종 목표인걸 알고는 있다.
  • 근데 아직도 나는 코드 작성하는게 더 재밌고 좋다.. 데브옵스가 어렵기도 하고, 정신없이 코드를 작성하다보면 몰두해서 자꾸 다른걸 잊게 되는데 덕분에 CI/CD를 아직 구축을 못했다. 시간 분배를 못한게 중요한걸 놓친거 같아 아쉽다.

 

언어 숙련도가 더 필요하다.

  • 예~전부터 공부는 했지만 자바를 ‘본격적으로’ 공부하고 ‘실제로 프로젝트에 적용’하면서 쓴지는 얼마 안돼서 아직 너무 어렵다. 언어에 대한 공부를 같이 병행하면서 프로젝트를 하다보니 시간이 더 오래 걸렸다. 거기다 새로 나온 Java8의 함수형 프로그래밍은 더더욱 어색해서 공부할게 아직도 산더미처럼 쌓여있다!! 덕분에 모든 기능을 완성하진 못했지만 그래도 궁금한 점에 대해 소홀하지 않고 공부하면서 진행한건 후회하지 않는다.

 

바지 팀장

  • 우리 팀이 유일하게 팀장으로 지원한 사람이 없는 팀이었다. (하필이면?!)
  • 내가 연차가 제일 적기도 했고, 개발한다고 정신이 없어서 팀원들과 소통하지 못한 게 좀 아쉬웠다. 흠... 개발하는 거에 자신이 더 생기면 팀장 역할도 좀 잘하게 될까?

 
 

남은 과제

1. 스프링 시큐리티

  • 인증 객체에서 사용자 정보 가져오기 - SecurityUtil 클래스 (완료)
  • 작성중인 시큐리티 관련 글 포스팅

2. API

  • DM API 구현
  • 피드 - Cursor 기반 Pagination 구현 완성하기 (완료)
  • profile image - S3 Multipart Upload

3. 문서화

  • API Docs 구축

4. 개발 환경 구성

  • RDS & Mysql 연결
  • S3 이미지 서버 구성
  • CI/CD 파이프라인 구축 - github action

 
 

느낀 점

구현 기간 3주.
프로젝트 구축 경험이 있는 개발자에겐 넉넉하고, 경험이 없어서 삽질하는 개발자에겐 너무 짧은 시간.
 
할만한데? 싶으면 기간 내에 목표한 만큼 성장하는 게 아니라고 그랬다.
솔직히 막히는 부분이 점점 늘어갈 때는 힘들었다. 퇴근하고 개발하면서 요즘 체력도 많이 떨어졌고, 얼마 남지 않은 기간이 하루하루 조여올 때면 아 일주일만 더 있으면 좋겠다! 라고 한 열번쯤 생각한 거 같다. 그치만 만약 일주일 더 있어도 지금 못한 부분들을 완벽하게 구현했을지는? 모를 일이긴 하다.ㅎ
 
일단 다 완성은 못했지만 앞으로 어떻게 수정해 나가야 할지 길이 보여서 못한 부분 완성만 하면 정말로 성장하게 되지 않을까 싶다.
꼭 끝까지 해내는 걸로 이번 프로젝트를 잘 마무리해보자. 화이팅~
 
 
 
 
 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함