본문 바로가기

분류 전체보기154

by lazy를 통해 지연 초기화 적용하기 개발을 하다보면 가끔 지연 초기화를 적용해야할 때가 있을 수 있다. Kotlin을 사용하면 이를 쉽게 처리를 할 수 있다. 아래 코드를 보자. object Answer { val value = 42 } // 수행이 오래 걸리는 기능 fun longJob() { println("Job just started") Thread.sleep(2_000) println("Job has done") } fun main() { longJob() println(Answer.value) } 여기서 Answer에 value 프로퍼티는 사용되기 전에도 초기화가 되어있다. 이 값을 정말 사용되는 때(위 코드에서는 14번째 라인)까지 초기화를 지연시키고 싶다고 했을 때 by lazy 를 통해 쉽게 처리할 수 있다. object .. 2021. 11. 6.
by 키워드를 사용한 Delegation 다음과 같이 Worker와 Student에 대한 interface가 있다고 할 때, interface Worker { fun work() } interface Student { fun study() } 이 두 interface를 상속받는 클래스를 구현할 때는 다음과 같이 직접 상속받아 구현하는 방식을 주로 사용할 것이다. class Developer : Worker, Student { override fun work() { println("Work hard!") } override fun study() { println("Study hard!") } } Kotlin 에서는 by 키워드를 사용하면 interface를 상속하되 직접 구현하지 않고, 클래스의 프로퍼티에 해당 interface에 대한 역할을 위.. 2021. 11. 6.
Kotlin Gradle Multi Module 적용하기 Java나 Kotlin을 사용할 때 Gradle을 사용하면 모듈형 아키텍처를 적용하는 것이 그리 어렵지 않다. (하지만 자세하게 설정하려고하면 Gradle을 잘 모르고서는 어렵다 👀 ) 이번 포스팅에서는 아래와 같이 2개의 모듈로 구성된 단순한 프로젝트를 만들며 Kotlin을 사용하면서 Gradle Multi Module을 적용하는 방법에 대해 알아보도록 하자 예제는 여기에서 확인할 수 있다. root 프로젝트 프로젝트 생성 먼저 모듈의 root가 되는 Gradle 프로젝트를 생성하자. 아래와 같이 Kotlin 설정을 한 뒤 프로젝트 GroupId, ArtifactId 등을 설정한 후 프로젝트를 생성한다. 불필요한 파일 삭제 root project에 소스코드는 필요하지 않기 때문에 없애도록 한다. 모듈 .. 2021. 11. 4.
Testcontainers MongoDB init script 실행하기 통합 테스트를 하다보면 가끔씩 인프라에 대해 init script(초기화 스크립트)를 작성하고 실행해야할 때가 있다. 이번 포스팅에서는 Spring Application에서 통합 테스트 시 테스트 인프라를 설정하기 위해 자주 사용되는 Testcontainers와 DB Module 중 하나인 MongoDB Module을 사용했을 때 초기 데이터를 위해 init script를 어떻게 실행할지에 대해 알아보도록 하겠다. (예제는 여기에서 확인할 수 있다.) 프로젝트 생성 Spring Boot 프로젝트를 아래와 같이 Spring Data MongoDB, Testcontainers 의존성을 추가하고 생성한다. 예제 도메인 클래스 추가 프로젝트 생성 후 MongoDB에 저장할 도메인 클래스를 추가하자 import .. 2021. 10. 29.
Start Spring Data MongoDB - 5. Integration Test 테스트 코드의 중요성을 알아도 외부 인프라스트럭쳐와 연동해야하는 경우 테스트 자동화를 하기가 매우 까다로워진다. 다행히 Java 진영에서는 Testcontainers를 사용하면 통합 테스트 시 외부 인프라스트럭쳐를 손쉽게 구성할 수 있을 수 있다. 이번 포스팅에서는 Testcontainers의 MongoDB Module을 사용하여 통합 테스트 환경을 구축하고 통합 테스트 코드를 작성하는 방법에 대해 알아보도록 하겠다. (관련 코드는 여기에서 확인 가능하다) Testcontainers MongoDB Module dependency 추가 Testcontainers MongoDB Module은 MongoDB Transaction 테스트를 도와주기 위한 Module이다. 이를 통해 좀 더 쉽게 MongoDB T.. 2021. 9. 4.
Start Spring Data MongoDB - 4. Application 코드 작성 개발을 위한 MongoDB 설정과 Spring Data MongoDB 설정을 마쳤으니 본격적으로 Application 코드를 작성해보도록 하겠다. (컨텐츠에 대한 데이터를 저정하는 애플리케이션을 기반으로 코드를 작성하였다.) (관련 코드는 여기에서 확인 가능하다) BaseDocumentEntity 먼저 Entity id와 생성일자, 수정일자를 갖는 BaseDocumentEntity 기반 클래스를 생성해보자. import org.springframework.data.annotation.CreatedDate import org.springframework.data.annotation.Id import org.springframework.data.annotation.LastModifiedDate import .. 2021. 9. 4.