플러스 프로젝트 1일차

박재성·1일 전
0

플러스 프로젝트

목록 보기
1/1

📚 주제

✅ 필수 구현

3개의 프로젝트 중 택 1이나, 프로젝트 구현 과제 양에 비해 인원수가 많다 판단하여 새로운 주제 안에 두 가지를 녹여내기로 결정하였습니다.

📖 동시성 제어 프로젝트

  • 체크리스트
    • 필수 구현 기능
      1. 순간적으로 많은 요청이 쏟아질 수 있는 어플리케이션 기획
      2. 동시성 이슈 검증가능한 테스트 코드
      3. Redis Lock을 통한 동시성 이슈 제어
      4. 2번의 테스트코드 통해 동시성 이슈 검증
    • 추가 구현 기능(선택)
      1. Lock을 AOP 방식으로 적용가능하게 리팩토링
      2. Redis 대신 MySQL 이용한 Lock 구현

📖 Cache을 이용한 성능개선 프로젝트

  • 체크리스트
    • 필수 구현 기능
      1. 인기검색어 기능/ 검색기능
      2. CRUD
      3. 검색 API 에 In-memory Cache(Local Memory Cache) 적용
      4. 검색 API 에 Cache 를 적용했는지 Readme 기록
    • 추가 구현 기능(선택)
      1. In-memory Cache 가 적용된 v2 검색 API 를 Redis 를 이용한 Remote Cache 로 수정
      2. Dummy 데이터 적재
      3. 성능테스트
      4. Cache Eviction 을 이용, 캐시 데이터 동기화 문제 해결

📘 서울시 인터넷 쇼핑몰 현황(난이도 하)

  • 체크리스트
    • 필수 구현 기능
      1. CSV 파일을 database 테이블에 입력
      2. 필터 기능
    • 추가 구현 기능(선택)
      1. Pageable 기반 업체 리스트 조회
      2. csv를 database에 입력하는 코드 만들기
      3. QueryDSL 을 사용한 커서 기반 페이지네이션 및 필터
      4. OpenAPI 를 통해 database에 입력하는 코드 만들기
      5. 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

  • dto → to, from, of
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();
        

0개의 댓글