본문 바로가기
반응형

[서버]/[SpringBoot Kotlin]63

[SpringBoot Kotlin] data class는 언제 사용하는 것이 좋을까? data class는 JPA 기반 Entity = Domain 계층에서 사용하기엔 부적절하다. 쿼리적으로 순환 참조가 발생할 수 있기 때문이다. Entity는 기본 class로 정의하고, 또 통신 과정에서는 당연히 Entity로 하지 않고 Transfer의 목적인 DTO 클래스를 새로 정의해야 추가적으로 발생할 여지가 있는 참조 문제도 막을 수 있다. 그리고 이 DTO 클래스는 주로 data 클래스로 사용한다. 2023. 3. 30.
코틀린 확장함수 이용해서 JpaRepository 사용하기 코틀린으로 작성한 이러한 함수가 있다. @Transactional fun updateUserName(request: UserUpdateRequest) { val user = userRepository.findById(request.id).orElseThrow(::IllegalArgumentException) user.updateName(request.name) } 우리가 JpaRepository에서 @PrimaryKey 이외에 추가로 정의한 findByName() 같은 함수가 있다면 fun findByName(name: String): User? 이렇게 반환형으로 Null Safety를 이용해 줄 수 있지만, findById처럼 JpaRepository에서 기본제공해주는 함수는 아직 JAVA 이므로 Nu.. 2023. 3. 30.
SpringBoot의 주입 vs Android의 주입 안드로이드에서 Hilt 처럼 생성자 주입에 어노테이션을 사용하지 않아도, 생성자에 해주면 자동으로 빈이 주입된다. @Service class UserService( // 알아서 Bean이 잘 주입된다. Hilt 같은거 안써도 private val userRepository: UserRepository ) { @Transactional fun getUsers(): List { return userRepository.findAll() .map { user -> UserResponse(user) } // == .map(::UserResponse) } } 매우 간단하다고 볼 수 있다..! 추가로 getUsers() 에서 볼 수 있듯이, map 방법은 위와 같다. .map { user -> UserResponse.. 2023. 3. 29.
[SpringBoot] Java -> Kotlin 리팩토링 순서의 정석 1. 테스트 코드 작성 2. Entity(Domain) 리팩토링 3. Repository 리팩토링 4. Service 리팩토링 5. Controller, DTO 리팩토링 우선, 테스트코드를 먼저 작성해놔야 한다. 자바 코드를 코틀린 코드로 바꿨는데 잘 작동하지 않을 수 있기 때문에, 이 과정이 선행되어야 한다. 모든 모듈에 대해서 테스트코드를 작성하기엔 어려우므로, Controller, Service, Repository, Domain 중에서 고르자면 Service 모듈 하나에 대해서만 테스트 코드를 작성함으로써 전체적인 로직에 대한 검증을 진행할 수 있다. -> Controller는 테스트 방법이 조금 상이해서, 추가적인 테스트가 필요하다. (프론트 테스트 or 추가 테스트 코드 작성 or Insomn.. 2023. 3. 29.
반응형