목록Java (152)
Lewis's Tech Keep
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
내가 구현한 것 : TDD 기반 프로그램 구현 느낀 점 모호한 변수명은 모두가 헷갈릴 뿐이다. 실무에서는 어떤 느낌인지 동료나 상사에게 꼭 물어 볼 것 위의 코드 처럼 IntStream을 이용하면 더 효율적으로 넘버를 활용 할 수 있다. Stream API는 병렬 처리도 지원하기 때문에 멀티 cpu 코어에서 이득을 볼 수 있다. private static final Map abc = IntStream.rangeClosed(MIN_BOUND, MAX_BOUND) .mapToObj(Abc::new) .collect(Collectors.toMap(abc -> abc.number, Function.identity())); 설계 시에 작은 부분부터 체크했기에 설계적 측면에서는 큰 이슈가 없었다. 하지만 리스트의 ..
내가 구현하려던 것 : TDD 기반 프로그램 개인적으로 어려웠던 부분 Optional 을 어떻게 이용해야 할지 고민을 했다. (정말 부끄럽지만 써본 적이 없어서다.) 어떻게 쓰는 것이 바른 것인지 찾아보고 그에 대한 해답을 참고해서 하는 수준이지만 아직 Optional을 제대로 안다고 할 수 있을까..? -> 한번 더 찾아보고 정리할 것 Optional 참고 링크 1: https://johngrib.github.io/wiki/java-optional/ Optional 참고링크 2: http://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/ 계속 자잘한 실수들이 나왔다. 한 줄에는 점..