우아한테크코스 4기

우아한테크코스 4기

스프링 통합 테스트에 사용되는 도구와 설정들(Sql, Transactional, JdbcTestUtils)

스프링이 제공하는 테스트 관련 기능과 설정 중, 테스트 격리에 관련하여 헷갈리는 부분들을 정리해봤습니다! 학습 결과 요약은 다음과 같습니다! @Sql 애너테이션을 클래스 레벨에 선언하면 매 테스트 메서드 실행 전에 수행된다 @Sql 애너테이션을 메서드 레벨에 선언하면 해당 테스트 메서드 실행 전에 수행된다 클래스 레벨에 선언하고 메서드 레벨에도 선언하면, 메서드 레벨에 선언한 스크립트로 오버라이드 된다. 둘 다 실행하거나 하려면 merge 관련 다른 설정을 찾아봐야할듯. @Transactional 애너테이션을 클래스 레벨에 선언하면 매 테스트 메서드에 트랜잭션을 생성하고, 테스트 수행 후 롤백한다 테스트 메서드에 @Rollback(false) 또는 @Commit을 선언해서 롤백하지 않고 반영해버릴 수도 ..

우아한테크코스 4기

find vs get (네이밍 컨벤션과 JPA에서의 내부 동작 차이)

요약 Optional findById(ID id) : 탐색하다. 탐색 결과가 없을 수 있음. 내부 예외 발생 없음. T getOne(ID id) : 가져오다. 가져오려는 대상이 없을 시, 내부에서 예외 발생. (EntityNotFoundException) getOne은 Deprecated 되었고 대신 getReferenceById 가 권장됨. getReferenceById는 EntityManager#getReference 를 사용하며, 조회된 entity 내부값 접근 전까지 lazy loading처리함. ✨ find vs get 리뷰어의 학습링크 Repository 내 구현되는 메서드 명으로 find 와 get 을 선택함에는 다소 신중함이 필요합니다. 메서드명으로 find를 쓰느냐, get을 쓰느냐에 따..

우아한테크코스 4기

🆙 테스트 어려운 부분 끌어올리기 (feat. Spring 체스 게임방)

🧑‍⚖️ 체스 게임방 삭제 관련 기능은 도메인 규칙이다 우아한테크코스 레벨 2 첫 미션, 스프링 체스 2단계에서 도메인 요구사항이 추가되었습니다. 여러 게임을 게임 방으로 관리하되, 게임 종료 상태이고 비밀번호가 일치할 경우 삭제할 수 있다는 것이었습니다. 첫 고민은 이 요구사항과 관련된 도메인 객체를 만들어야 하느냐 였습니다. 이 규칙은 실제 체스 규칙과는 상관이 없지만, 해결하고자 하는 주요 문제 영역이자 관심사라고 판단했습니다. 또한 프리젠테이션 레이어나 인프라스트럭처 레이어가 변경되더라도, 게임방 관리, 비밀번호 확인 등의 도메인 규칙이 변경되지 않는다면 동일하게 사용되어야 한다고 판단했습니다. 그래서 도메인 객체 Room 추가했습니다. 📨 Room 에게 메시지를 보내기 위한 준비 사실도메인 객..

우아한테크코스 4기

우당탕탕 Repository 제작기 (feat. Reflection)

전체 코드 보러 가기 ❌ Don't try this at home 호기심에 실험적으로 도전한 내용입니다. 오직 목적한 바에만 몰입하여 구현에만 집중했습니다. 코드 품질은 무시했으니 재미로 봐주시면 감사하겠습니다. ✍️ 제작 동기 레벨2 지하철 노선도 미션에서 Line, Station, Section 이라는 세 도메인을 만났습니다. 각 도메인 별 Dao가 만들어지고 유사한 CRUD로직이 나타나고 있었습니다. 이들을 하나의 CRUD로 추상화해서 중복을 제거해보고 싶었습니다. JPA를 아주 살짝 사용해본 경험과, 미션의 예시 코드에서 ReflectionUtils를 사용한 내용이 힌트가 되었습니다. Jackson 라이브러리가 JSON 객체를 직렬화, 역직렬화 하는 과정에서 기본 생성자로 인스턴스를 생성한 뒤, ..

우아한테크코스 4기

@Component 🆚 @Service 🆚 @ Repository

Component, Repository, Service 애너테이션 중 무엇을 사용하더라도 Spring Bean에 등록되는 건 동일합니다. 그럼 어떤 차이가 있고, 둘을 구분해서 사용하는 기준은 무엇일까요? 1. 🔎 Component Scan 스프링은 설정된 범위를 탐지해 Spring Bean으로 생성해 Application Context에 보관합니다. 모든 클래스를 Spring Bean으로 생성해두는 것은 아니고, 그러하도록 선언된 클래스들을 생성합니다. Spring Bean으로 생성하도록 선언하는 방법은 크게 세 가지가 있습니다. XML 선언 방법은 이젠 잘 사용되지 않는 방법입니다. @Configuration 클래스 내부에 @Bean 메서드로 선언하는 방법도 있습니다. 마지막으로 가장 많이 사용되는 ..

리차드
'우아한테크코스 4기' 카테고리의 글 목록 (4 Page)