📚 주제
✅ 필수 구현
3개의 프로젝트 중 택 1이나, 프로젝트 구현 과제 양에 비해 인원수가 많다 판단하여 새로운 주제 안에 두 가지를 녹여내기로 결정하였습니다.
📖 동시성 제어 프로젝트
- 체크리스트
- 필수 구현 기능
- 순간적으로 많은 요청이 쏟아질 수 있는 어플리케이션 기획
- 동시성 이슈 검증가능한 테스트 코드
- Redis Lock을 통한 동시성 이슈 제어
- 2번의 테스트코드 통해 동시성 이슈 검증
- 추가 구현 기능(선택)
- Lock을 AOP 방식으로 적용가능하게 리팩토링
- Redis 대신 MySQL 이용한 Lock 구현
📖 Cache을 이용한 성능개선 프로젝트
- 체크리스트
- 필수 구현 기능
- 인기검색어 기능/ 검색기능
- CRUD
- 검색 API 에 In-memory Cache(Local Memory Cache) 적용
- 검색 API 에 Cache 를 적용했는지 Readme 기록
- 추가 구현 기능(선택)
- In-memory Cache 가 적용된 v2 검색 API 를 Redis 를 이용한 Remote Cache 로 수정
- Dummy 데이터 적재
- 성능테스트
- Cache Eviction 을 이용, 캐시 데이터 동기화 문제 해결
📘 서울시 인터넷 쇼핑몰 현황(난이도 하)
- 체크리스트
- 필수 구현 기능
- CSV 파일을 database 테이블에 입력
- 필터 기능
- 추가 구현 기능(선택)
- Pageable 기반 업체 리스트 조회
- csv를 database에 입력하는 코드 만들기
- QueryDSL 을 사용한 커서 기반 페이지네이션 및 필터
- OpenAPI 를 통해 database에 입력하는 코드 만들기
- CSV파일의 데이터를 100개씩 읽어서 Database에 입력하기
📚 와이어프레임 설계
🔗 ERD 설계
📚 트러블슈팅
📌 1:3 의견 충돌
- 🍿영화
- 도메인
- 식별자
- 영화 제목
- 영화 런타임
- 개봉일
- 영화 설명
- 🎬영화 상영 정보
- 도메인
- 식별자
- 영화 ID (FK)
- 상영관 ID (FK)
- 상영일시
🔵영화를 만들 때 영화 상영 정보를 넣자! vs 🔴영화 만드는 것과 영화 상영 정보 넣는건 따로 넣자!
🔵: 영화와 영화 상영 정보를 한꺼번에 만들자. 한꺼번에 만드는게 훨씬 편하다.
🔴: 영화와 영화 상영 정보는 따로 관리되어야한다. REST API
를 지키자.
📖 해결
🔴영화와 영화 상영 정보는 따로 넣자!
실제 영화 예매 앱처럼 영화와 영화 상영 정보를 따로 관리하자. REST API
도 지키고 코드 이해하기도 편하다.
📚코드 컨밴션
패키지 구조
user
controller
service
domain
repository
dto
request
response
브랜치 전략
- main: 제품 출시 버전을 관리하는 메인 브랜치
- develop: 다음 출시 버전을 위해 개발하는 브랜치
- feature: 새로운 기능을 개발하는 브랜치
코드 예시
main
develop
feature/user(엔티티)-login(기능)
entity
- @table : 복수형으로 테이블명에 맞게 설정
- getter
- 빌더 패턴 : @NoArgsConstructor(access = AccessLevel.PROTECTED)
dto
public User toEntity() {
return User.builder.id(this.id)
}
public UserDTO from(User user) {
return UserDTO.builder.id(user.id).build();
}
public UserDTO of(User user, Schedule schedule) {
return UserDTO.builder.id(user.id).build();
}
- Dto 붙히지 않기
- 엔티티, 기능 이름 순으로 dto명 작성 ex) UserCreateRequest
- record로 dto클래스 만들기
포맷팅
- 메소드 파라미터가 길 경우 줄 바꿈 (컨트롤러, config)
public void create(
@RequestBody @Valid UserCreateRequest request,
@SessionAttribute Long userId
) {
- ctrl + alt + l, ctrl + alt + o 이용해서 줄 정리 해주기
- 변수, 메소드 사이 간격
- 메소드 chain시 . 줄바꿈
User.builder()
.id()
.build();
list.stream()
.map(..)
.toList();