JSCODE에서 주관하는 백엔드 개발자를 위한 입문 프로젝트 스터디에 참여했다. Spring boot와 JPA를 이용한 CRUD를 할 수 있지만 CRUD를 넘어 다양한 기능을 추가하는 프로젝트에 참여하고 싶었던 시기에 좋은 기회를 얻었다고 생각한다.
활동 내용
기간
2023.05.08(월) ~ 2023.06.01(목)
진행 방식
매주 월요일, 목요일 2시간 동안 스터디를 진행했다.
처음 10분 정도는 멘토님들의 공지사항 전달이나 멘티들에게 해주고싶은 이야기 전달 등의 시간을 가졌다. 프로젝트에 관한 이야기를 넘어 개발자 선배로서의 진지하고 솔직한 이야기들을 전해들을 수 있어 좋았다.
그리고 남은 시간은 조원과 함께하는 시간을 가졌다. 만날 때마다 가벼운 아이스브레이킹 시간을 가지고 진행했다. 그리고 각자 진도 상황 파악과 함께 코드리뷰를 했다. 코드리뷰는 깃헙의 PR을 이용한 방식이었다.
팀원들과의 코드리뷰로 해결하지 못한 문제점은 멘토님들을 호출해 조언을 얻을 수 있었다.
마지막으로 다음 스터디 시간 전까지 새로운 요구사항을 구현하고 PR과 함께 블로그에 기록을 남기는 미션이 주어졌다.
회차별 요구사항



코드리뷰 🙄

성과
Spring boot와 JPA를 이용한 기본적인 요구사항은 실습을 통해 연습을 해왔기에 별다른 문제없이 진행할 수 있었다.
하지만 지금까지 경험해보지 못한 기술들은 원리나 사용 이유에 대해 탐구하는 시간이 많이 필요했다.
우선, 협업에 사용하는 GitHub의 PR(Pull Request)를 처음 사용하며 약간의 시행착오를 겪었지만 왜 사람들이 코드리뷰를 PR을 통해 진행하는 지 알 수 있는 좋은 기회였다. 사용하면 사용할수록 다른 사람의 코드를 보고 코멘트를 달 수 있는 편리한 기능을 제공해준다는 것을 알아갔다.
두번째로 API문서를 만드는 과정이었다. 백엔드는 뷰를 통한 통신보다 API 통신을 더 자주하게 된다. 하지만 API body에 대한 규격은 사실 정해지지 않았기에 문서를 통해 사용방법이나 예시를 정리해주는 과정이 필요하다. 이번 프로젝트에서 Swagger, spring docs를 통해 만들어볼 수 있는 기회를 가졌다.
세번째는 API 서버를 배포해보는 성과를 이뤘다. AWS beanstalk를 이용해 전세계 어디서든 브라우저를 통해 접속할 수 있는 나만의 첫 API 서버를 배포한 소중한 경험을 가져봤다. DB 서버도 함께 연동해볼 수 있는 기회를 가졌다. 서버를 배포하는 것 뿐만 아니라 프론트엔드와의 연결을 고려하여 CORS를 설정하거나, 로컬과 배포 환경을 나누는 경험 등을 해볼 수 있었다.
마지막으로 회원가입과 로그인은 쿠키와 세션을 이용한 실습과정밖에 진행해보지 못했지만, 요구사항이 JWT를 사용하는 것이었다. API 통신은 보통 stateless
하기 때문에 JWT가 갖는 장점과 함께 왜 JWT를 사용하는지에 대해 학습할 수 있는 기회가 됐다. 뿐만 아니라 현재 프로젝트의 요구사항을 넘어 회원들의 권한을 관리하는 스프링 시큐리티의 기술들을 추가로 학습해봤다. 기술을 구현한 것도 좋은 성과라고 할 수 있지만 인증과 웹 서비스에서 인증과 인가의 흐름을 확인하고 학습한 좋은 기회였다.
팀원들이 나를 바라본 이미지 및 장점
- 코딩을 잘하는 것 같다
- 우직하다
- 믿음직스럽다
- 습득력이 빠르다
- 근거있는 주장
한달간 함께 진행했던 동료 2분이 과분한 칭찬을 해주신 것 같다.
좋았던 점, 잘한 점
- 멘토가 있는 장점, 물어볼 수 있음
- 함께하는 동료분들이 계셨는데 한번도 빠지지 않고 매주 열심히 구현해 오셨음.
- 그 동료분들과 함께 공통 주제를 고민해볼 수 있음. 내가 생각해보지 못한 관점에서 문제를 바라보는 시각을 공유할 수 있음.
- 처음 접하는 내용을 어떻게든 구현을 했고 정상적으로 동작을 하도록 만들었음.
- 코드를 작성할 때 고민을 많이했는데 팀원들이 좋은 평가를 해줘서 좋았음.
- DTO, builder패턴, 정적 팩토리 메서드, setter 남발하지 않기 등 단순히 생산성만 고려한 코드가 아닌 재사용성, 유지보수 관리의 측면에서 효율적인 코드를 작성하기 위한 심화 미션을 추가적으로 수행해봤다.
힘들었던 점
- API 문서 작성 진행 중 처음에 spring docs가 아닌 spring fox를 사용했음. 블로그, 공식 문서, chatGPT 등 모든걸 동원해서 찾아봤지만 오류를 해결하지 못했음.
- 찾아본 내용 중에 spring fox의 업데이트 중단 내용이 있었음에도 간과했음. 사실 기술의 호환문제라는 것을 spring docs를 적용하며 깨달음. 역시 기술을 도입하기 전에는 이유를 명확히 하고 해당 기술에 대한 조사가 사전에 이루어져야한다는 말이 괜히 있는게 아니라는 것을 깨달았음.
- 배포하며 며칠간 밥을 제대로 못 먹었음. 분명 제대로 했는데 왜 안되는거야?
- 전체적인 가이드라인을 어느 인도인 유튜버 분을 보고 잡았음.
- AWS에 처음 가입해보고 처음 Beanstalk를 사용해봤는데, 첫 가입자는 ec2-role에 대한 정책 설정을 직접 해줘야하는 버그(?)가 있음을 검색을 통해 알았음. 사람들이 왜 인도인 유튜브, stack overflow 커뮤니티를 얘기하는지 알았음. 간단한 오류는 블로그에 많이 정리돼있지만 조금만 깊이 들어가면 앞의 두 플랫폼이 많이 도움이 된다.
- 코드 자체 컴파일 warning, 코드가 실행이 돼도 컴파일 과정 경고가 있으면 배포가 안된다는 사실을 깨달았음. 정확한 내용은 앞의 프로젝트1에 대한 회고에 있음.
- 회원가입, 로그인 구현에서 요구사항 넘어로 욕심을 부려봤음.
- JWT를 이용하고 payload에 PK만 넣어주면 되는 요구사항이었지만, 사실 회원가입과 로그인은 어느 프로젝트에서나 필요한 기능이라고 생각하고 스터디에서 요구하는 기능 외에도 추가적인 기능을 추가했음. 그 과정에서 JWT와 Spring security를 사용하기 위해 전체적인 개념과 데이터의 흐름을 이해하는데 많은 시간이 필요했음. 아직도 완벽히 이해한 것은 아니라 추가적인 학습이 필요함.
아쉬웠던 점
- 기록하는 습관이 없었기에 프로젝트를 진행하며 내가 정말 궁금했던 내용이나 그걸 찾아내는 과정과 해결하는 과정등을 글로 풀어내는 능력이 많이 부족하단 것을 깨달았음.
- 기록하는 습관과 연관된 문제점. 멘토님들에게 내가 궁금한 점을 질문할 때도 깔끔하게 정리하지 못하는 나의 모습을 발견했음.
- 구현은 해봤다도르. 앞서 구현한 내용을 내가 완벽히 이해했는가? 자료를 보지 않고도 다시 구현할 수 있는가?
- 심화미션을 많이 해봤지만 궁극적으로 테스트 코드를 작성하는 방법을 배워가고 싶었다. 하지만 매주 요구사항을 구현하고 그 내용을 이해하려다보니 테스트 코드를 작성하지 못했다. 사실 이 테스트코드 구현에 대해 더 공부하고 싶어 스터디 멤버분들께 개인적으로 공부하고 공유하자 제안했다. 다음주부터 이 스터디를 개인적으로 이어나갈 생각이다.