프로젝트

AI 검증 비즈니스 프로젝트 회고

개발공명 2024. 9. 25. 21:03

프로젝트 소개

GEMINI API를 기반으로 가게 사장님들의 가게 설명 작성을 도와주는 주문 서비스 개발

 

나의 개발 파트

  • AI API 개발
  • User API 개발
  • Payment API 개발
  • 회원가입/로그인 로직 구현
  • Redis 사용 캐싱 구현

 

기술 스택

 

백엔드 아키텍처

 

Liked

  • 좋은 팀원들에게 많이 배운 점
  • 팀원들과 잘 분업화 해서 주요 기능을 모두 완성한 점
  • Spring Security & JWT 이용한 인증, 인가 로직을 구현해본 점
  • Redis를 이용한 로그인 시 캐싱 구현해본 점
  • PR시 코드 리뷰 해야 merge할 수 있도록 한 점

 

Lacked

  • 도전 기능 전부 구현해보지 못한 점
  • Querydsl을 활용해보지 못한 점

 

Learned

  • JpaAuditing + BaseEntity를 사용한 Auditing Fields 처리
  • soft delete
  • 공통 응답, 공통 예외 처리
  • Spring Security & JWT 이용한 인증, 인가 로직 
    • @AuthenticationPrincipal
    • @Secured 
  • JWT 전달 방법 (Cookie or Header)
  • Pagenation
  • Postgresql 
  • Entity to Dto, Dto to Entity by static method
  • 프론트엔드와의 쿠키 문제
  • 전체 조회 로직과 검색 로직의 통합 (쿼리 파라미터 유무에 따른)

 

Longed for

  • Querydsl 적용
  • CI/CD 적용
  • 배포 프로세스 더 알아보기

 

피드백

  • CI/CD에 도전해보자.
    • ECS이용하지 않더라도 EC2에 바로 실행하는 구조로라도 진행해보자. 
  • 프로젝트를 MSA로 분리해보자.
  • 디렉토리 구조를 변경해보자. 
    • 각 도메인 내에 Controller, Domain, Repository 패키지 존재.
    • Layered Architecture에 따라 구조 구성하면 계층간의 파일들을 파악 용이할 것이다. 
  • Mapper보다는 DTO의 Static Method를 활용하자. 
    • DTO 변환에 Mapper보단 static method를 사용하자. 
    • Object 변환에 Mapper 사용하면 서비스 규모 커질수록 DTO 데이터 변경 필요할 때 Mapper의 변경점 잦아진다.
    • Object 변환 로직을 DTO 내부로 이동해 변경점을 DTO에만 두는 것을 추천한다. 
  • Entity내 Builder 생성자 관련
    • @Builder를 이용한 Builder 생성자보다 static method를 사용하면 코드가 더 간결하게 나올 수 있다. 
    • DDD 개념 중 하나인 Entity 생성에 대한 책임을 Entity로 이관하는 것이다. 
  • Service에서 Repository 불러오는 부분
    • 각 Service에서 Repository 주입 받아 사용.
    • 이렇게 하면 공통으로 구현해야 하는 로직이 많아짐
    • 다른 Service를 주입 받아 다른 Service의 로직을 불러오는 것이 더 좋다. 
  • 검색 로직 고도화
    • 가변적으로 필터 동작하도록 QueryDSL을 고도화 해보자. 

 

느낀 점

  • 좋은 팀원들에게 많은 것을 배운 것 같다. 
  • 공통 응답 처리, 예외 처리, JpaAuditing, Pagenation 등 아직 모르고 있는 것이 많다는 것을 느꼈다. 
  • Spring Security와 JWT를 통한 인증 인가를 구현해보면서 대략적인 프로세스를 알게 되어 좋았다. 
  • entity ↔ dto, 디렉토리 구조 등 사소한 팁들도 배울 수 있어 좋았다.