목록JAVA (154)
Lewis's Tech Keep
계기 Spring으로 user 관련 서비스를 만들다 DataJpaTest를 통한 테스트 코드 운용 중에 에러를 발생! 에러 메시지 o.h.e.internal.DefaultLoadEventListener : HHH000327: Error performing load command org.hibernate.exception.SQLGrammarException: could not prepare statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.e..
JPA를 하면서 좀 불만아닌 불만이랄까... 불변성 보장을 하고 싶은데 final을 쓸 수 없는 모순에 자꾸 부딪히게 된다.. (참고 링크) 일단 왜 final을 이용해 불변 객체로 만들고 싶은가 하면 특히 진행 중인 사이드 프로젝트에 web-flux 를 사용하려고 생각하고 있었는데, web-flux는 리액티브 웹 프레임워크이며 논블로킹 리액티브 스트림을 이용하게 될 것이기 때문에 불변임을 보장하여 좀 더 안정적인 프로그램을 만들고 싶었다. 불변 객체 일 때 장점 - https://mangkyu.tistory.com/131 [Java] 불변 객체(Immutable Object) 및 final을 사용해야 하는 이유 클린코드를 읽어도, 이펙티브 자바를 읽어도, 개발을 잘하는 팀의 얘기를 들어도 항상 좋은 코..
ATDD 프로젝트 시 발생했던 현상 및 해결, 피드백 Unchecked Exception 예외를 받는 커스텀 클래스 어떤 라이브러리에 종속된 예외의 경우 import org.springframework.dao.DataIntegrityViolationException; public class DuplicateEntityException extends DataIntegrityViolationException { } 위와 같은 클래스의 경우 DataIntegrityViolationException은 spring-data-jpa를 받아야지만 추가되는 예외 클래스다. 다른 예외를 생각하는 것이 좋다. 라이브러리 종속적 예외는 라이브러리 제거시 에러가 발생되기 때문이다. 다대다 관계를 푼 다대일 일대다에서 왼쪽이 ..
ATDD 프로젝트 ATDD? ATDD = 인수테스트 주도 개발 실패하는 인수 테스트 작성 -> TDD 사이클 (유닛 테스트 실패 -> 유닛 테스트 성공 -> 리팩토링) -> 성공하는 인수테스트 작성 -> 리팩토링 -> 실패하는 인수 테스트 작성 ATDD 시 고려사항 개발자만이 참여하는 테스트가 아니다. 기획, 개발 및 다른 관점을 가진 팀원들이 같이 참여하는 테스트라 생각하고 시나리오를 작성, 코드를 작성할 것 인수 조건 (인수 테스트가 충족해야하는 조건) 여러 포맷이 존재함 (이번 시도는 시나리오 기반 표현 방식) 시나리오의 단위 고려할 것 (나누는 단위에 따라 달라짐) 인수 테스트 인수 조건을 검증하는 테스트 실제환경과 유사하게 테스트 환경을 구성 문서화 Spring Rest Docs 활용해 API ..
2주차 내가 만든 것 : JPA 기반 백엔드 set- Naming 과 같은 상태 변경 보다는 메시지로 전달해야 한다. 매개변수가 많아질 때는 정적 팩토리메서드를 고려한다. 테스트가 많아질 때는 성격에 따라 Repository와 Domain 테스트로 나눌 수 있다. @Where annotation @Where 어노테이션을 이용하면 자동적으로 where 안에 설정한 Entity를 가져올 수 있다. (하지만 개인적으로 쪼금 고려해 볼 필요가 있다고 생각한다. => 무조건 Entity가 어떤 조건을 계속 만족한다는 상태를 준다는 것 자체가 제한을 둔다는 것이고 변화에 취약해 질 수 있다고 생각한다.) 픽스처 자주 사용하는 것들을 픽스쳐로 만든다 픽스처 올바르게 쓰기 : https://jojoldu.tistory..
JPA 프로젝트를 하다가 의문스러웠던 점이 있었는데 Repository 어노테이션 없이 autowired를 쓰는데 그대로 빈 주입이 잘 되는 것이었다. 빈을 등록하는 곳은 없는데 빈 주입은 가능하다는 점이 이상해서 찾아보게 되었다. repository annotation repository annotation2 spring document 위 링크들을 참고 해 보면 결론적으로는 spring boot 환경에서는 repository interface를 가지고 있는 구현체가 있으면 자동으로 빈 등록을 해주는 것이었다.
2주차 내가 만드려고 하는 것 : JPA 기반 백엔드 중복으로 들어간 createdAt, updatedAt을 보다가 예전에 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 에서 봤던 Auditing을 한번 써 보면 좋을 것 같아서 써 보았다. 하지만 책의 좋은 소스를 쓰레기처럼 활용했다는 생각이 든 한 주다. 써보면서 확실히 느낀게 나는 JPA의 Core Concepts, 왜 JPA가 현재 트렌드가 되어가고 있는지 알지 못한다는 것이었다. [JPA Core Concepts] [JPA에 관한 기본적인 개인적으로 납득이 간 좋은 이유 - 이영한님] 이번 주에 내가 집중적으로 학습하고자 했던 것은 JPA Core Concepts, 영속성 컨텍스트, Auditing 이다. Study List Jpa ..
- 객체 그래프란 : 엔티티들은 보통 서로 연관되어 있는 관계를 가지고 있고 이를 연결하면 그래프로 표현이 가능하다. - 이후로 글을 더 쓰려고 이것 저것 찾아봤는데 Entity Graph 와 Objects Graph 가 같은 개념인지 아니면 다른 개념인지 그래서 JPA에 적용할 때 어떤지 없어서 보류하지만 아래 참고 링크들은 굉장히 좋은 글들이라 링크를 남겨둔다. 조금 더 정리한 후에 해보자. - 참고 링크 : https://www.entityframeworktutorial.net/entityframework6/save-entity-graph.aspx - 참고 링크 : https://engkimbs.tistory.com/835 - 참고 링크 : https://bros.tistory.com/m/16