BackEnd(Java)(85)
-
[assertJ] isEqualTo vs isSameAs 비교
테스트 코드 작성 중 asserThat().isEqualTo랑 asserThat().isSameAs의 차이점이 궁금해서 찾아보게 되었다. 결과부터 말하자면 - isEqualTo : 값 자체를 비교하는 것이다 (ex. 5 == 5, "a" == "b") -> 동등성 비교 - isSameAs : 객체 참조 주소값을 비교하는 것이다. (ex Car a , Car b => a==b) -> 동일성 비교 아래의 그림 2, 3의 코드를 보면 더 자세히 이해할 수 있을것이다.
2022.03.30 -
@Transactional,@Commit
JPA에서 DB 연산(C,R,U,D)은 Transaction 단위 안에서 실행된다. 즉, 트랜잭션이 없는 연산은 실행될 수가 없다. JPA에서는 @Transactional라는 어노테이션을 제공하여 트랜잭션 기능을 제공한다. 실제 코드를 보면서 이해해 보자! 아래의 실제 테스트를 진행 중 그림 1과 같이 오류메시지가 나타났고 확인해 보니 "현재 스레드에 엔티티 매니저가 없다 그래서 persist 함수를 호출할 수가 없다"라는 에러 메시지가 뜬것을 확인할 수 있다. 앞에서 언급했듯이 JPA는 Transcation 단위 안에서 실행되므로 @Transactional 어노테이션을 입력해주면 실행이 된다! @Transactional 어노테이션을 추가 후 실행하였다.(그림 2 참고) 그런데... 실행은 잘 됐는데 D..
2022.03.30 -
단위 테스트
고민 프로젝트 진행 중 테스트를 하면서 각 역할별(domain, repository, service, controller 등...)들의 단위 테스트를 어떻게 작성해야 할지 고민이 생겼다. 먼저 Domain Layer는 객체 생성이라 테스트의 필요성을 느끼지 못하였고 Repository Layer는 EntityManager에 의존하여 기능 대부분을 수행하기에 DB에 데이터가 잘 들어 가는지 확인 과정을 진행하였다. 그런데 대부분의 핵심 로직은 Service Layer에 있다는 것을 인지하게 되었고 그러면 Service Layer는 어떻게 테스트를 진행해야 하는지 궁금해서 구글에 검색 중 좋은 글을 발견하게 되었다. 정리 Service는 Repository에 의존하기 때문에 Service 단의 단위 테스트가..
2022.03.30 -
Builder 패턴
엔티티를 구성 중 Setter를 사용하지 않고 엔티티 변경을 해 줘야 한다는 것은 인지하고 그러면 어떤 방식으로 엔티티의 각 변수에 값을 설정해 줄 수 있는지 구글에서 찾아보게 되었다. 찾아보던 중 Builder Pattern 키워드를 알게 되었고 잘 정리해놓은 글을 찾게 되어 해당 블로그를 참고하여 요약 및 정리를 할 것이다. 빌더 패턴(Builder Pattern) (객체의 생성 방법과 표현 방법을 분리한다) 빌더 패턴은 객체를 생성할 때 흔하게 사용하는 패턴이다. 나는 이펙티브 자바의 빌더 패턴과 Lombok의 @Builder에 대해서 정리할 것이다. Effective Java의 빌더 패턴 이펙티브 자바의 빌더 패턴은 가독성/유지보수가 더 편해지므로 빌더 패턴을 쓰라고 권장한다. 생성자 인자가 많을..
2022.03.30 -
RestApi 참고자료
RestAPI 개발 시 참고하면 좋은 자료들을 공유하려고한다. 참고자료 https://youtu.be/RP_f5dMoHFc https://shoark7.github.io/programming/knowledge/what-is-rest https://sharplee7.tistory.com/49 https://meetup.toast.com/posts/92 https://devlog-wjdrbs96.tistory.com/197?category=882974 (응답에 대한 예제가 있어서 적용하기 좋은 글이다.) http://blog.storyg.co/rest-api-response-body-best-pratics
2022.03.29 -
생성 시간, 수정 시간 자동으로 값 넣기
Spring Data 공식문서를 읽어보면 엔티티가 수정되거나 생성될 때 자동으로 행위자와 그 시간에 대한 정보를 제공(Capture)한다고 나와있다. 이 기능을 JPA Auditing라고 한다.(그림 1 참고) 그러면 실제 JPA에서 어떻게 설정하고 사용하는지 알아보자 설정 아래의 그림 2를 보면 먼저 클래스 위에 @EntityListeners를 사용하여 Auditing 기능을 사용한다고 선언 후 실제 생성시간, 수정 시간에 맞는 필드에 각각 @CreatedDate와 @LastModifiedDate를 사용하면 자동으로 시간이 설정돼서 들어가게 된다. 위 설정 후 프로젝트의 SpringBoot Main 부분 클래스에 @EnableJpaAuditing 어노테이션을 사용하여 JpaAuditing 기능을 사용한..
2022.03.29