DevKim
간단한 테스트 코드 작성, Live template으로 자주 쓰는 것들 출력 키워드 만들기 본문
[01] 회원 엔티티 생성
[02] 회원 리포지토리
@PersisenceContext
: Entity manager 주입
*** save 메소드에서 member를 반환하지 않고, 귀찮지만 id를 반환하는 이유 ***
"command와 query를 분리하라" 원칙에 의해..
이건 side effect를 일으키는 command성이기 때문에, return 값은 거의 만들지 않는 것이 좋다.
대신에 id 정도 있으면 다음에 다시 조회할 수 있으니까,
이렇게 id정도만 조회하는 것으로 영한님은 주로 설계하신다고 한다.
<참고>
CQRS 명령 - 질의 책임분리
CQRS는 Command and Query Responsibility Segregation(명령과 조회의 책임 분리)을 나타냅니다. 이름처럼 시스템에서 명령을 처리하는 책임과 조회를 처리하는 책임을 분리하는 것이 CQRS의 핵심입니다. 이제 명령과 조회에 대해 정의할 필요가 있습니다. CQRS에서 명령은 시스템의 상태를 변경하는 작업을 의미하며 조회는 시스템의 상태를 반환하는 작업을 의미합니다. 정리하면, CQRS는 시스템의 상태를 변경하는 작업과 시스템의 상태를 반환하는 작업의 책임을 분리하는 것이다.
출처: https://coding-start.tistory.com/265
[03] 테스트 코드
@RunWith(SpringRunner.class)
= junit에게 스프링 관련된걸로 테스트할 것임을 알려줌
@Transactional 꼭 추가!!
= EntityManager을 통한 모든 데이터 변경은 항상 transaction 안에서 이뤄져야함
@Rollback을 작성하지 않은 경우
table에 아무것도 저장되지 않은 것을 볼 수 있다.
왜?
Test에 있으면 바로 roll back 해버림 (당연한 것..)
그래도 직접 내 눈으로 확인하고 싶을 땐,
@Rollback(false)로 설정해주면 잘 저장된 것을 볼 수 있다.
마지막으로
조회한거랑 저장한거랑 같은지 확인
결과는 True이다.
같은 transaction 안에서 저장하고,조회하면 영속성 컨텍스트(persistence context)가 똑같고,
같은 영속성 컨텍스트 안에서는 id값이 같으면 같은 entity로 인식한다.
* 꿀팁*
1. Live template
인텔리제이에서 제공하는 Live template으로 tdd + tab키로 test 메소드가 자동으로 생성되는 것도 추가로 설정했다.
(잘 쓰면 유용할 듯!!)
mia-dahae.tistory.com/m/171?category=862005
2. 쿼리 파라미터 로그 남기기
test 로그를 보면 쿼리 파라미터가 안남는 것을 확인할 수 있다!
개발할 때 답답할 수 있음..
친절하게 만들어놓으신 외부 라이브러리를 사용하자.
파라미터 로그가 보는걸 볼 수 있다
** 주의 **
이러한 외부 라이브러리들은 시스템 자원을 사용하므로, 이런 것들이 성능을 저하시킬 수도 있다.
그러므로 개발 단계에서는 편히 사용해도되지만,
운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다고한다
'Spring Boot' 카테고리의 다른 글
[Tip] Entity 설계 시 주의할 점 & 참고할 점 (0) | 2021.05.13 |
---|---|
[에러 해결] Test code -No runnable method 오류 해결법 (0) | 2021.05.13 |
[01] AOP (0) | 2021.05.06 |
[01] 회원 관리 예제 - 회원 웹 기능 (홈 화면 추가,등록,조회 화면 추가) (0) | 2021.05.06 |
[01] 스프링 Bean과 의존관계 - 컴포넌트 스캔과 자동 의존관계 VS. 직접 스프링 빈 등록 (0) | 2021.05.06 |