프로젝트 소개
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, 디렉토리 구조 등 사소한 팁들도 배울 수 있어 좋았다.
'프로젝트' 카테고리의 다른 글
3차 프로젝트 3주차 WIL (4) | 2024.10.14 |
---|---|
3차 프로젝트 2주차 WIL (0) | 2024.10.07 |
대규모 AI 시스템 설계 프로젝트 회고 (3) | 2024.09.25 |
스프링 심화 대규모 AI 시스템 설계 프로젝트 - Starting Assignments (0) | 2024.09.25 |
스프링 심화 AI 검증 비즈니스 프로젝트 - Starting Assignments (0) | 2024.08.22 |