Spring

· Spring
개요 Spring JPA를 사용하여 개발을 진행하다 cascade = CascadeType.ALL과 orphanRemoval = true에 대한 예시를 많이 봐왔다. 연관관계를 갖는 엔티티 간 설정하는 것이라 들었고, 무엇인가 삭제했을 때 연쇄적으로 쉽게 삭제해준다고 막연하게 알고 있었다. 하지만 이를 남용하기엔 '삭제'와 관련 되어 있어 위험하다 판단 되어 제대로 찾아보기로 했다. 본문 Cascade.ALL은 PERSIST, MERGE, REMOVE, REFRESH, DETACH와 같은 상태 변환를 관리한다. 즉, 수정, 삭제, 추가의 작업이 일어날 때 연쇄적으로 관계를 갖는 엔티티에 영향을 주는 것이다. orphanRemoval은 부모, 자식을 가질 때 부모와의 관계가 끊어졌을 때 자식을 삭제하는 것..
· Spring
[개요] Spring을 통해 프로젝트를 진행하기 위해 로컬 DB인 MySQL을 연결하려 한다. Spring은 내부적으로 자체적인 DB 관련 애플리케이션이 존재한다. 그래서 미리 정의된 변수에 올바른 값만 넣어준다면 쉽게 DB와 연결할 수 있다. 해당 변수는 src/main/resources/application.properties 파일에서 할당할 수 있다. 그런데 값을 할당하는 과정에서 제대로 된 값을 넣었는데 연결을 실패하는 경우가 있다. 이들의 공통점을 분석해보고, 어떻게 하면 문제가 생기지 않을지 정리해보겠다. [본문] # MySQL spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql..
· Spring
개요 테스트 코드를 작성하며 @Test와 @SpringBootTest와 같은 어노테이션을 보게 되었는데 이 둘의 차이는 무엇인지 찾아봤다. 단위 테스트와 통합 테스트 - 단위 테스트: 스프링이나 컨테이너, JPA 등의 도움 없이 순수하게 자바 코드로 테스트하는 것 - 통합 테스트: 스프링과 컨테이너, JPA 등의 도움을 받아 실제 비즈니스 상에서의 환경과 최대한 비슷하게 만들어 테스트하는 것 -> 사진에서 보이듯이 클래스에 @SpringBootTest를 붙인 것과 붙이지 않은 것의 차이이다. 둘의 차이는? 둘의 가장 큰 차이는 결국 실행 시간이다. 단위 테스트는 메모리 상에서 다른 컨테이너의 도움 없이 자바만 실행하므로 굉장히 빠르게 테스트를 할 수 있는 반면, 통합 테스트는 그렇지 않기 때문에 많은 시..
· Spring
개요 서비스를 만들던 중 실 사용자를 만들게 될 제품을 만드는 것이니 Transaction을 도입하면 좋지 않겠나하는 피드백을 42내 캐비넷 서비스의 동료에게 받게 되었다. 트랜잭션에는 읽기 전용 옵션이 있는데 이를 적용하면 최적화가 된다는 내용을 접했고, CUD와 Read를 나누기 위해 주석으로 서비스 클래스를 나누던 도중, 'findBoard()'와 같이 특정 키를 이용해 Repository를 직접 접근하여 도메인을 가져오는 메서드는 트랜잭션을 걸어야 할까라는 고민을 하게 되었다. // BoardService.java public Board findBoard(String encryptedBoardId) { Long boardId = secureDataUtils.decrypt(encryptedBoard..
jayoon
'Spring' 카테고리의 글 목록