-
[토이프로젝트] 객실 예약 사이트 - 2ed 스프린트Project/토이프로젝트 2023. 12. 8. 18:35
2ed 스프린트
0. 주요 목표
1. FE 메인화면 작업
2. BE 개발 서버 DB 생성 (k8s pv,pvc)
3. 메인화면 추천 객실 더미 데이터 생성
4. 도메인 모듈 기본 CRUD 테스트
도메인 모듈내에 기본 SpringDataJpa를 통해서 구현 작업
도메인 모듈 사용 시 jpa 활용 방법에 크게 3가지 방법이 보였다.
1. 도메인 모듈 자체에서 기본 CRUD 구현 하여 어플리케이션 레벨에서 사용
2. 도메인 모듈에서 인터페이스만 구현하고 어플리케이션 레벨에서 상속 받아 구현 후 사용
3. 2번째 방법에서 중간 모듈을 한번 더 만들어서 인터페이스를 구현하여 사용
2번째 방법이 의존성을 낮출 수 있지만 모듈로 분리하여 이용할때의 장점이 크게 없어 보였다.
아니면 3번째으로 중간 모듈을 만들어도 되는데 현재는 시간대비 큰 장점이 없어 보였다.
그래서 1번째 방법인 도메인 모듈계층에서 구현하여 어플리케이션에서는 빈을 주입 받아서 사용했다.
1. TripPenguin K8S DB 작업
K8S pv, pvc (Mysql)
https://heehee-myblog.tistory.com/51
2. TripPenguin Back 메인화면 작업
작업 ID : TSK-23
1. 테이블 생성
2. 시큐리티
3. 팔로우 CRUD 테스트
4. 유저 CRUD 테스트
4. dockerfile
5. mysql - application.yaml설정
6. K8S - pv, pvc 생성
7. K8S - etcd, secret 설정
3. TripPenguin Back 회사 작업
작업 ID : TSK-25
1. 회사 CRUD 테스트
4. TripPenguin Back 객실 작업
작업 ID : TSK-27
1. 객실 CRUD 테스트
2. 객실 이미지 CRUD 테스트
5. TripPenguin Back 리뷰 작업
작업 ID : TSK-28
1. 리뷰 CRUD 테스트
2. 객실 테이블 구조 변경 (썸네일 컬럼 추가)
6. TripPenguin Back 메인 추천 테스트
작업 ID : TSK-35
1. queryDsl 설정 추가 ( gradlew 빌드시 queryDsl 플러그인 사용 에러 - springboot 3.0 이상 오류 해결)
2. 메인 추천 객실 더미 데이터 생성
3. 테스트용 memoryDB 의존성 추가
주 테스트 대상 @DataJpaTest, @WebMvcTest, 통합 테스트의 경우 상당히 무겁기 때문에 필요한 경우 진행하도록함 (아직 X)
테스트시 주의 사항
1. 도메인 모듈의 경우 하위 모듈에서 가져올 빈이 없었기 때문에 컴포넌트 스캔시 하위모듈 패키지 위치를 고려할 필요가 없다.
2. 어플리케이션 모듈의 경우 하위 모듈인 도메인 모듈의 기본 CRUD 빈을 가져와서 테스트에 사용하기 때문에 컴포넌트 스캔 범위를 지정해줘야 한다.
도메인 모듈에서 @DataJpaTest 사용시 예시
컴포넌트 스캔범위는 최대한 테스트할 대상으로 좁혀서 진행하는게 빠르고 추후 수정 범위가 줄어든다.
아래는 전체 패키지를 스캔 범위로 지정된 경우이다.
@Retention(RetentionPolicy.RUNTIME) @ActiveProfiles("test") @ContextConfiguration(classes = TpRdbDomainTest.class) @EnableJpaRepositories(basePackages = {"com.trip.penguin"}) @EntityScan(basePackages = "com.trip.penguin") @ComponentScan(value = "com.trip.penguin") public @interface JpaDataConfig { }
@JpaDataConfig @DataJpaTest(properties = "classpath:application.yaml") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) public class CompanyCURDTest { private CompanyService companyService; private EntityManager em; private CompanyMS beforeCommitCompany; @Autowired public CompanyCURDTest(CompanyService companyService, EntityManager em) { this.companyService = companyService; this.em = em; } ....code }
코드 예시 :
도메인 모듈을 의존하는 어플리케이션 모듈에서 테스트
(도메인 모듈과 어플리케이션 모듈의 패키지 디렉토리가 똑같이 설정해버렸는데 이 경우에 도메인과 어플리케이션을 다 읽는다.)
@ActiveProfiles("test") @ContextConfiguration(classes = {TpBackInternalApp.class}) @DataJpaTest(properties = "classpath:application.yaml") @ComponentScan(basePackages = { "com.trip.penguin.user", "com.trip.penguin.cs", }, excludeFilters = @ComponentScan.Filter( type = FilterType.ASSIGNABLE_TYPE, classes = {UserMyPageController.class, UserMyPageService.class})) @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.ANY) @Import(TestContainer.class) public class AppDataCsTest { @Autowired private UserService userService; @Autowired private AppCsService appCsService; ....code }
더미데이터 호출 spring rest docs
프로젝트를 진행하는 과정에서 꼭 노션에서 할당된 작업 ID와 연관된 작업을 진행하려고 했는데 작업 과정에서 커밋도 많이 섞이고 연관되지 않은 작업이 굉장히 많았다. 너무 급하게 작업 위주로 프로젝트를 진행한 것 같아서 반성한다.
'Project > 토이프로젝트' 카테고리의 다른 글
[토이프로젝트] 스프링 클라우드 기반 MSA 앨범 판매 사이트 (0) 2023.12.10 [토이프로젝트] 스프링 클라우드 기반 MSA 앨범 판매 사이트 (0) 2023.12.10 [토이프로젝트] 객실 예약 사이트 - 3rd ~ 4th 스프린트 (0) 2023.12.09 [토이프로젝트] 객실 예약 사이트 - 1st 스프린트 (0) 2023.12.08