일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- AWS EKS
- Linux
- 정보처리기사 실기 기출문제
- CKA
- Kubernetes
- MySQL
- 공부
- 정보처리기사실기 기출문제
- Spring
- CKA 기출문제
- CloudWatch
- 정보처리기사 실기
- IntelliJ
- Java
- 오블완
- Pinpoint
- minikube
- AI
- kotlin
- mysql 튜닝
- APM
- 코틀린 코루틴의 정석
- aws
- 기록으로 실력을 쌓자
- kotlin coroutine
- kotlin spring
- PETERICA
- Elasticsearch
- kotlin querydsl
- 티스토리챌린지
- Today
- Total
목록Programming/Kotlin (69)
피터의 개발이야기
ㅁ 들어가며ㅇ Kotlin으로 Spring 프로젝트를 개발할 때, all-open과 no-arg 플러그인은 매우 유용하다. ㅇ 이 두 플러그인의 필요성과 역할을 잘 정리한 Kotlin으로 Spring 개발할 때을 보고 정리하였다. ㅁ all-open 플러그인의 필요성ㅇ Kotlin은 기본적으로 클래스와 메서드가 final로 선언된다. ㅇ 이는 상속을 막기 때문에 Spring의 CGLIB Proxy와 같은 기능을 사용할 때 문제가 발생한다. ㅇ CGLIB Proxy는 대상 클래스를 상속하여 프록시 객체를 생성하기 때문에, 대상 클래스가 open 상태여야 한다.ㅇ all-open 플러그인은 특정 어노테이션이 붙은 클래스에 대해 자동으로 open 키워드를 추가해준다. allOpen { annotatio..
ㅁ 들어가며ㅇ Spring Data Elasticsearch를 Kotlin으로 예제 코드를 작성해보겠다. ㅇ 이 글은 Kotlin과 Spring Boot를 사용하여 Elasticsearch에 데이터를 저장하고, JPA로 등록 조회 방법을 정리하였다. ㅁ 관련 글ㅇ [kotlin] Spring Data Elasticsearch 샘플코드ㅇ [Elasticsearch] Elasticsearch + Kibana 설치하기 with Dockerㅇ [Elasticsearch] Docker로 Elasticsearch 설치 및 테스트하기ㅇ [Elasticsearch] Kibana Query Language 사용법 정리 ㅁ Elasticsearch API-KEY 생성ㅇ Elasticsearch와 통신하기 위해서 api-k..
ㅁ 들어가며ㅇ ktlint는 Kotlin 코드의 스타일을 체크하고 포맷팅하는 도구다.ㅇ 이 글에서는 Spring Boot와 Kotlin을 사용하는 프로젝트에 ktlint를 설정하는 방법을 설명한다. ㅁ build.gradle.kts 파일 수정plugins { id("org.jlleitschuh.gradle.ktlint") version "12.1.0"}ktlint { verbose.set(true) outputToConsole.set(true) coloredOutput.set(true) reporters { reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.CHECKSTYLE) reporter(..
ㅁ 들어가며ㅇ [Kotlin] Spring Boot와 Kotlin으로 QueryDSL 페이징 처리하기을 작성하면서 Circular view path 에러가 발생하여 해결방법을 정리하였다. ㅁ 에러 내용jakarta.servlet.ServletException: Circular view path [products]: would dispatch back to the current handler URL [/products] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)ㅇ REST API 컨트롤러에서 뷰 리졸버(View Reso..
ㅁ 들어가며 지난 글, [Spring] Kotlin으로 JPA Querydsl 세팅에서 Spring Boot와 Kotlin을 사용하여 QueryDSL을 적용한 프로젝트를 구성하였다. QueryDSL을 사용하면 동적 쿼리를 쉽게 작성할 수 있으며, Spring Data의 페이징 기능을 활용하면 대량의 데이터를 효율적으로 처리할 수 있다. 이번 글에서는 Spring Boot와 Kotlin을 사용하여 QueryDSL을 적용한 프로젝트에서 페이징 처리를 구현하는 방법을 정리하였다. ㅁ Repository 인터페이스 생성import org.springframework.data.domain.*import org.springframework.data.jpa.repository.JpaRepositoryinterfac..
ㅁ 들어가며ㅇ 입력값에 대한 유효성 검증을 코드상에서 하나하나 처리하는 것은 번거롭다. ㅇ Spring에서 제공하는 Validation 기능을 사용하면 Controller 단과 별개로 입력값을 간편하게 검증할 수 있다. ㅇ 이 글에서는 Spring Validation을 Kotlin에서 사용하는 방법을 정리한다.ㅇ Kotlin, Spring Validation 이용한 입력 데이터 유효성 검증의 글을 보고 실습을 수행하였다. ㅁ Gradle 설정implementation("org.springframework.boot:spring-boot-starter-validation")ㅇ Spring Boot 2.3 버전부터 spring-boot-starter-validation 의존성을 명시해야 @Valid를 사용할 ..
ㅁ 들어가며ㅇ [Kotlin] 널 안정성, Null safety에서 Kotlin의 타입 시스템은 null 참조로 인한 위험을 제거하기 위해 설계되었다고 설명하였다.ㅇ 하지만 작업 중 NullPointerException이 발생하여 이를 해결하는 과정을 정리하였다.ㅇ 정리하면서 [Kotlin] 널 안정성, Null safety에 더하여 NullPointerException 주의 해야할 목록을 정리해 보았다. ㅁ NullPointerException 메시지Constructor threw exception; nested exception is java.lang.NullPointerException; Parameter specified as non-null is nullㅇ 이 에러는 Kotlin에서 null이 ..
ㅁ 들어가며 JPA의 더티 체킹(Dirty Checking)은 엔티티의 상태 변화를 자동으로 감지하여 데이터베이스에 반영하는 기능이다. 이는 엔티티 매니저가 관리하는 엔티티 객체의 상태를 지속적으로 모니터링하고, 트랜잭션이 끝날 때 변경된 부분만 업데이트 쿼리로 반영하는 방식으로 동작한다. ㅁ 동작원리ㅇ 엔티티 상태 관리 - 엔티티 매니저는 영속성 컨텍스트(Persistence Context) 내의 엔티티 객체를 관리한다. - 엔티티가 영속성 컨텍스트에 들어오면, JPA는 해당 엔티티의 스냅샷을 저장한다 ㅇ 변경 감지 - 트랜잭션이 진행되는 동안, 애플리케이션 코드에서 엔티티의 속성을 변경하면 JPA는 엔티티의 현재 상태와 스냅샷을 비교한다. - 변경된 부분이 있으면 이를 감지하여 더티 상태로 표시한다..
ㅁ 들어가며ㅇ Kotlin에서 QueryDSL과 MapStruct를 사용하여 DTO에서 Entity로 필요한 부분만 업데이트하는 방법을 정리하였다. ㅁ 문제 상황Kotlin Spring 프로젝트에서 QueryDSL 5.0을 사용하고 있다. 클라이언트로부터 수정 요청을 받아 DTO를 통해 Entity를 업데이트해야 하는데, MapStruct를 사용하여 필요한 부분만 적용하는 방법을 찾고 있다. ㅁ 엔티티 정의@Entity(name = "products")data class Product( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null, @Column(name = "name") var..
ㅁ 들어가며 Kotlin의 스프레드 연산자(*)는 배열이나 컬렉션의 요소를 개별 인자로 전달할 때 유용하게 사용되는 기능이다. 이 연산자를 통해 코드를 더 간결하고 읽기 쉽게 만들 수 있다. ㅁ 기본 사용법val numbers = arrayOf(1, 2, 3, 4, 5)println(*numbers) // 출력: 1 2 3 4 5ㅇ 스프레드 연산자는 배열이나 컬렉션 앞에 별표(*)를 붙여 사용한다. ㅁ 함수 호출에서의 사용fun sum(vararg numbers: Int): Int = numbers.sum()val numbers = intArrayOf(1, 2, 3, 4, 5)println(sum(*numbers)) // 출력: 15ㅇ 여러 인자를 받는 함수에 배열이나 컬렉션의 요소를 개별 인자로 전달할..