Go Together 여행 상품 추천 플랫폼 프로젝트 회고록

Spring boot, Spring Security, JPA, MySQL, Redis, Docker, AWS, Jenkins

Posted by iheese on October 20, 2022 · 4 mins read

프로젝트 설명

  • 시니어를 타겟으로 한 여행 상품 추천 플랫폼입니다.

  • UX/UI팀, 프론트엔드팀, 백엔드팀이 협업하여 만들었으며, 기업 연계 프로젝트로 실제 기업의 데이터를 이용하였습니다.
  • 현재 지속적으로 유지보수를 진행하고 기한 내에 구현하지 못한 부분을 완성 중에 있습니다.

  • 어떤 프로젝트인지 자세한 내용 + 소스 코드 클릭!!


이번 프로젝트에서 나의 역할

  • 사용자 파트
  • 큐레이션(상품 추천 데이터 저장)
  • 관리자 기능
  • 정적 파일 관리


신경썼던 점, 시도했던 점

내 코드 버리기

  • 전 미니 프로젝트를 진행하면서 의문이 정말 많이 들었다. 정답이 없지만 내 코드가 좋은 코드인가? 라는 생각을 맨날 했고 고착화된 코드를 작성하던 나를 발견했다.
  • 이번 프로젝트를 시작하면서 다른 조의 코드를 무작정 읽기 시작했다. 읽고 이해하려 노력했다. 좋은 점을 우리 코드에 녹여냈다. 팀원들과 함께 의견을 나눠 보며 나쁜 점은 바꿔나갔다. 이번 프로젝트에서 정말 많이 배웠다.
    • 예외 처리, Json 리턴 형식, 람다 사용 등


Spring Security

  • 전 미니 프로젝트 때는 Spring Interceptor를 이용해서 사용자 파트를 처리했다. 일단 라이브러리 의존도가 낮아지고 인증/인가 부분이 그렇게 어렵지 않았기 때문에 Spring이 지원하는 Interceptor를 이용했다.
  • 하지만 이번에는 팀원들과 회의 결과 Spring Security, JWT를 이용해 인증/인가를 처리했다.
    • 참고할 자료가 많았고, 실제로 사용자가 사용한다고 가정하고 만들어야 했기 때문에 더 안정성이 있는 Spring Security가 좋을 것 같다는 생각이 들었다.
    • Spring Security는 필터 기반으로 움직이기 때문에 Spring Context의 부담을 좀 줄여주지 않았을까? 생각이 든다.
  • Spring Security 덕분에 일반 회원과 관리자 회원 권한 처리와 회원 관련 로직을 쉽게 처리할 수 있었다.


Redis

  • NoSQL인 Redis를 꼭 이번 프로젝트에 사용해보고 싶었는데 사용자 파트를 맡은 덕분에 사용해볼 수 있었다.
  • Refresh Token을 저장하는 용도로 사용하여 토큰 재발급을 빠르게 처리할 수 있게 했다. 또한 로그아웃시 Access Token을 저장해 해당 Access Token으로 접근하지 못하게 구현했다.
    • 미니 프로젝트에서는 로그아웃시 해당 Access Token을 프론트측에서 삭제해서 처리했었다. 정말 아쉬운 부분이었다.


아쉬웠던 점

인원변동

  • 프로젝트가 진행되면서 UX/UI, 프론트엔드 인원에 변동이 생겼다. 특히 프론트엔드의 경우 4명이서 해도 시간이 부족할 양이었는데 어쩌다 보니 2분이서 남게 되었다.
  • 결국 기획 초반에 프로젝트 기간이 짧아서 프로젝트 양을 정말 보수적으로 잡았는데도 기획했던 부분보다 결국 완전하게 구현하지는 못했다. 백엔드 로직은 대부분 완성되긴 했지만 프론트엔드팀이 시간이 정말 부족했다.
  • 추후 프론트엔드팀과 남은 프로젝트를 완성시키기로 계획을 세우고 있다.


느낀 점

‘여행’

  • ‘여행’ 이라는 도메인은 정말 어려웠다. 항상 편하게만 여행 사이트를 이용했지 개발자의 입장에서 생각해보니 정말 쉽지 않았다. ERD(Entity Relationship Diagram) 설계부터 정말 난항이었다. 결국 수많은 회의 결과 결과물을 냈지만 분명히 부족한 부분이 있는 것 같다.


  • 이번 프로젝트는 정말 팀원들이 제 몫을 다 해주었다. 특히 백엔드에서는 DevOps 파트를 맡으신 분이 정말 Jenkins, Docker를 이용해 배포 부분을 모두 처리해주셔서 개발에 집중할 수 있었다.
    • 전 미니 프로젝트 때는 개발할 시간도 부족했고 더군다나 CI/CD를 구축할 시간이 없었다. 그래서 계속 로컬에서 서버로 프로젝트를 올렸다. 그 반복적인 일을 하다 보니 정말 CI/CD에 대해 갈증이 매우 생겼었다.
    • 비교적 여유가 생겨서 코드 리뷰할 수 있는 시간도, 내 코드에 대해 고민할 수 있는 시간이 조금 더 생겼었다.
  • 프론트엔드팀도 2명 뿐이었지만 조장님의 문서화 작업 덕분에 일처리의 효율을 정말 늘릴 수 있었다. 다시 한 번 정말 감사드린다.


잡다한 생각들

  • 어떤 멘토님께서 해주신 말 중에 협업이라는 과정은 1+1=2가 되는 건 정말 어렵고 2가 아닌 1.5만 나와도 성공이라고 하셨다. 이번 협업 프로젝트들을 통해 몸소 깨달았고 배웠다.


추가 학습할 키워드

  • AWS
  • Docker
  • Jenkins, CI / CD
  • Redis
  • 카카오, 네이버 API 로그인 연동 구현
  • Enum


Reference:

  • 백엔드 개발자 양성 과정 _ 패스트 캠퍼스의 기업 연계 팀프로젝트 후 회고록입니다.