[인프런 워밍업클럽 백엔드 3기] 3주차 발자국
💻강의 수강
[실습] 클래스 생성
[실습] 공통 개발 - Exception과 Advice
[실습] 공통 개발 - DTO
[실습] 공통 개발 - 인터셉터
[실습] 조회 개발 - 연관관계 없음
[실습] 조회 개발 - 연관관계 있음
[실습] 삽입, 수정 API 개발 - 연관관계 없음
[실습] 삽입, 수정, 조회 API 개발 - 연관관계 일대다
[실습] 삽입, 삭제 API 개발 - 연관관계 다대다
각 엔터티의 Form과 TableDTO 라는 공통 클래스를 만들어 놨기 때문에 여러 엔터티에 한층 더 간편한 삽입/수정/삭제 API를 만들 수 있었다.
TableDTO 원리가 아직 반 정도 밖에 이해되지 않아 목/금 일정인 뷰페이지에 뿌리는 과정까지 마친 후 다시 TableDTO로 돌아가려 했는데 템플릿 이슈로 잠시대기!!!!
🔨오류
StudentDepartment 엔터티의 Student와 Department id를
이렇게 std_id, dept_id로 가져오는 어노테이션을 넣었고, Student 엔터티에서의 id 네임도 std_id, Department 엔터티의 id 네임도 dept_id 인데, 레포지토리에서 findByStdIdAndDeptId를 전혀 인식 못하는 사태 발생
구글링 끝에 이렇게 넣으니 겨우 인식됨........ 왜지? 실제 DB 컬럼명도 std_id 엔터티 설정된 네임도 std_id인데 ???
아무튼 되긴하니 다행이다
💟미션
<3/19 수 미션5 삽입/수정/삭제 API 작성, 테스트 각 3개 작성>
강의에서 배웠던 기억 더듬어가며 (아직 이해 못한 TableDTO는 복붙..) CRUD API는 수월하게 완성! 그러나 테스트😂
Mockito를 처음 써봐서 아직 감이안옴. 구글링 해가며 추가적으로 공부를 한다고 해봤는데 이게 맞나 싶다. Mockito만 좀더 파고들어가는 강의또한 들어봐야겠다
@WebMvcTest
일반적으로 사용하는 MVC 테스트용 어노테이션. MVC 관련 빈만 로드하기 때문에 전체 컨텍스트 필요없이 가볍게 테스트 할 수있다. (@Service, @Repository가 붙은 객체는 생성되지 않는다.)
분명 컨트롤러까지는 타는데 그 안에 있는 서비스는 진짜 무슨짓을 해도 안 타는 현상이 발생. 아예 실행조차 안되는게 이상하여 service, repository쪽에 뭔가 빠진게 있나 하고 거의 한시간 가량을 검토하고 트랜잭션 문제인가 싶어 이리저리 바꿔보고 해도 문제점을 찾지 못했다. 그러다 service에 있는 save 메소드 실행이 왜 안되지? 의 답이 서비스,메소드 자체의 문제가 아닌 다른곳에 문제가 있지 않을까? 로 변경. 바로 테스트 환경으로 눈을 돌렸는데 여기가 맞았다.
전체 환경을 테스트하는게 아니기 때문에 스프링 컨텍스트가 불필요하여 이 어노테이션 만으로 테스트 실행이 가능한 예외적인 어노테이션이다.
사실 @WebMvcTest를 사용한 상태에서 @MockBean으로 서비스, 레포지토리 등록하여 사용할 수 있지만 스프링 3.2 버전부터 @Deprecated 😂
@AutoConfigureMockMvc
MVC 자동 설정 담당. 컨트롤러 뿐만이 아니라 서비스, 레포지토리까지 테스트 할 때 사용
스프링 컨텍스트를 전부 로드한 후에 쓸수있는 어노테이션이기 때문에 @SpringBootTest 어노테이션으로 전체 환경 깔아놓은 후에 사용할 수 있다.
@SpringBootTest
이 어노테이션은 지금까지 강의와 같이 실습해봤던 레포지토리 테스트, 서비스 테스트와 달리 실제 운영상황에서 사용될 클래스들 전부를 테스트 해보는 통합테스트 를 실행할 때 쓰는 어노테이션이다.
애플리케이션 전체 컨텍스트를 로드한다 !!
이걸로 바꾸니 드디어 정상적으로 실행되는 나의 API들 🤤
테스트 완료 !!
댓글을 작성해보세요.