일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kotlin querydsl
- 코틀린 코루틴의 정석
- 정보처리기사 실기
- 오블완
- CloudWatch
- Spring
- APM
- minikube
- Linux
- Java
- aws
- PETERICA
- 기록으로 실력을 쌓자
- Kubernetes
- CKA
- IntelliJ
- Pinpoint
- AWS EKS
- Elasticsearch
- 정보처리기사실기 기출문제
- kotlin spring
- 티스토리챌린지
- mysql 튜닝
- 공부
- CKA 기출문제
- AI
- 정보처리기사 실기 기출문제
- kotlin
- kotlin coroutine
- MySQL
- Today
- Total
목록전체 글 (777)
피터의 개발이야기
ㅁ 들어가며ㅇ Kotlin Spring 프로젝트에서 MapStruct와 Lombok을 사용할 때 isCompleted가 null로 넘어오는 문제가 발생하였다.ㅇ 이를 해결하면서 Lombok과 MapStruct의 충돌에 대해서 알게 되어 이를 정리하였다.ㅇ 우선 나의 문제와 해결방법을 정리하고, 원인을 분석하는 과정에 다른 글에서 null일 수 있는 경우도 정리하였다.관련글: [Kotlin] 코틀린 MapStruct ㅁ 문제상황ㅇ reqDto.isComplated가 swagger에 보이지 않음.ㅇ MapStruct 구현부에서 isComplated가 entity로부터 값을 set받지 못하여 null.ㅇ resDto.isComplated이 결과 JSON에서 아예 키까지 빠져있음.// RequestDto: S..
ㅁ 들어가며ㅇ 대량의 파일을 JVM에서 처리할 경우 OOME의 위험이 있어, 커널에서 직접 처리하기로 결정되었다.ㅇ kotlin에서 커널에 명령을 줄 수 있고, 이를 Kotlin에서 간편하게 쓸 수 있는 방법을 찾고 있다.ㅇ kotlin으로 shell 명령어를 사용하여 파일을 복사하고 압축하는 util을 만들어 보았다. ㅁ ShellUtil.ktimport java.io.Fileobject ShellUtil { /** * cp 명령을 사용하여 파일을 복사한다. * 원본 파일 경로와 대상 경로를 인자로 받는다. * -r: 디렉토리 복사(없으면 생성) */ fun copyFile(source: String, destination: String): Boolean { ..
ㅁ 들어가며ㅇ 대량 압축작업 시 OOME(Out Of Memory Exception)의 발생을 방지하기 위한 방법을 찾는 중이다.ㅇ 지난 글, [Kotlin] ManagementFactory을 이용한 JVM 모니터링 방법에서는 JVM의 메모리 사용량을 검토하여 서킷브레이크 패턴을 적용하려고 검토하였다.ㅇ 하지만 JVM의 힙메모리를 넘어서는 경우 커널에서 압축을 진행하는 방법도 검토하게 되면서 Kotlin에서 shell을 실행하는 방법을 공부하였다. ㅁ shell 실행코드fun runCommand(command: String) { try { val process = Runtime.getRuntime().exec(command) // 명령어 실행 결과 읽기 val ..
ㅁ 들어가며ㅇ 대부분의 일자 데이터들은 YYYY-MM-DD, 년월일의 형태를 띄고 있지만, 오늘 개발했던 데이터는 YYYY-MM의 형태였다.ㅇ Kotlin에서 Querydsl을 사용하여 YYYY-MM 형태의 날짜를 between 조건으로 검색하자, 파싱 에러가 발생하였다. ㅁ Querydsl에서 YYYY-MM로 검색하는 방법ㅇ Kotlin에서 Querydsl을 사용하여 YYYY-MM 형태의 날짜를 between 조건으로 검색하는 방법먼저 YYYY-MM 형태의 문자열을 날짜 객체로 변환한다.해당 월의 시작일과 종료일을 계산한다.between 조건을 사용하여 쿼리를 작성한다. ㅁ YYYY-MM 검색 예시import com.querydsl.jpa.impl.JPAQueryFactoryimport java.ti..
ㅁ 들어가며ㅇ 맥미니에 문제가 발생하여 웹이 접속이 되지 않았다.ㅇ 원격터미널에서 맥미니를 재기동하고 Docker를 기동하는 과정을 정리하였다. ㅁ 원인파악// 에러 내용The application /Applications/Docker.app cannot be opened for an unexpected reason, error=Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0x60000388dce0 {Error Domain=OSLaunchdErrorDomain Code=125 "Domain does not support s..
ㅁ 들어가며ㅇ 대량 압축작업 시 OOME(Out Of Memory Exception)의 발생을 방지하기 위한 방법을 찾는 중이다.ㅇ Kotlin에서 메모리 사용량 모니터링이 가능한 ManagementFactory에 대해서 알게 되어 정리하였다. ㅁ ManagementFactory란?ㅇ Kotlin에서 ManagementFactory는 Java Management Extensions (JMX) API의 일부로, JVM의 런타임 정보를 모니터링하고 관리하는 데 사용된다.ㅇ ManagementFactory는 주로 애플리케이션의 성능 모니터링, 디버깅, 그리고 런타임 동작을 제어하는 데 유용하다. ㅇ 이 클래스는 java.lang.management 패키지에 속해 있으며, JVM의 다양한 관리 인터페이스에 접근..
ㅁ 들어가며ㅇ 폴더를 삭제하는 Kotlin 코드를 정리하였다.ㅇ file.delete() 함수는 하위에 파일이나 폴더가 존재하면 삭제가 되지 않는다.ㅇ 그래서 이 코드는 지정된 폴더와 그 하위의 폴더와 삭제를 재귀적으로 삭제한다. ㅁ 폴더 삭제 코드import java.io.Filefun main() { val folderPath = "path/to/folder" // 삭제하려는 폴더 경로 val folder = File(folderPath) if (deleteFolder(folder)) { println("폴더가 성공적으로 삭제되었습니다: $folderPath") } else { println("폴더 삭제에 실패했습니다: $folderPath") ..
ㅁ 들어가며ㅇ Kotlin에서 List는 순서가 있는 요소들의 컬렉션이다. ㅇ 이 글에서는 List의 기본적인 사용법과 함께 자주 사용되는 연산들을 살펴본다.ㅁ List 생성하기val immutableList = listOf(1, 2, 3, 4, 5)val mutableList = mutableListOf("a", "b", "c")ㅁ List 요소 접근하기val firstElement = immutableList[0]val lastElement = immutableList.last()val firstElement = immutableList[0] val lastElement = immutableList.last()ㅁ List 순회하기for (item in immutableList) { printl..
ㅁ 들어가며ㅇ 밤 12시에 퇴근을 하였고, 집에 오면서 내일 해야할 일을 머리 속으로 정리하였다.ㅇ 업무코드에 할당된 파일을 선택하면, 코드폴더별로 파일 목록을 압축해야 한다. ㅁ 소스 코드package com.peterica.demoimport java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.nio.file.Filesimport java.nio.file.Pathimport java.text.SimpleDateFormatimport java.util.*import java.util.zip.ZipEntryimport java.util.zip.ZipOutputStreamfun main() { val..
ㅁ 들어가며ㅇ MutableList는 Kotlin에서 동적으로 요소를 추가, 삭제, 수정할 수 있는 리스트 타입이다. ㅇ 읽기 전용인 List와 달리 MutableList는 변경 가능한 리스트를 다룰 때 사용된다. ㅇ 이 글에서는 MutableList의 주요 기능과 사용법을 알아본다. ㅁ MutableList 생성val list1 = mutableListOf(1, 2, 3)val list2 = mutableListOf()val list3 = MutableList(5) { it * 2 } // [0,2,4,6,8]val list4 = (1..50).toMutableList()val list5 = MutableList(5, { i -> i}) // [0,1,2,3,4]ㅇ MutableList 생성하기 위해서..
ㅁ 들어가며ㅇ Kotlin에서 Map은 키-값 쌍을 저장하는 컬렉션이다. ㅇ Map을 사용하면 데이터를 효율적으로 관리하고 검색할 수 있다. ㅇ 이 글에서는 Kotlin에서 Map을 생성하고 사용하는 다양한 방법을 알아본다.ㅇ 함께 보면 좋은 사이트를 참조하여 작성하였다. ㅁ Map 생성// 불변 Mapval immutableMap = mapOf("key1" to "value1", "key2" to "value2")// 가변 Mapval mutableMap = mutableMapOf("key1" to "value1", "key2" to "value2")// 빈 Mapval emptyMap = emptyMap() ㅁ Map 제거// 생성val map = mutableMapOf("Chocolate" to 1..
ㅁ MapStruct란?ㅇ MapStruct는 Java 객체 간 매핑을 쉽게 할 수 있게 해주는 코드 생성 라이브러리로, 객체 간의 매핑을 컴파일 시점에 자동으로 생성하여 런타임 오버헤드를 줄이고 안전한 매핑을 제공한다. ㅇ Kotlin에서도 MapStruct를 사용할 수 있지만, 몇 가지 추가 설정이 필요하다. ㅇ이 글에서는 Kotlin 프로젝트에서 MapStruct를 설정하고 사용하는 방법을 알아본다. ㅁ MapStruct를 사용하는 이유ㅇ Service에서 Dto로 많은 객체 변환하는 로직이 여러 곳에 퍼져있어서, 비지니스 로직의 간결성이 떨어진다.ㅇ 객체 변환 로직이 너무 퍼져 있어서 재사용성이 떨어진다.ㅇ 구체적으로 보면 Dto와 Entity 사이에 의존성이 크다.ㅇ MapStruct는 객체 ..
ㅁ 들어가며ㅇ 보안망에서 개발을 진행하면서 JSON을 이쁘게 만들 수 있는 플러그인을 다운받을 수 없는 상황이었다.ㅇ Intellij의 기본 정렬기능으로 JSON을 이쁘게 만드는 방법을 정리하였다. ㅁ JSON 파일 만들기ㅇ 프로젝트의 적당한 저장 위치에서 data.json 파일을 만들어 본다. ㅇ 파일 확장자가 JSON이 아닌 경우는 미세하게 칸 공간만 띄어주는 형태로 변경될 뿐 정렬 시 이쁘게 되지 않았다. ㅇ 해당 위치에 JSON을 붙여 놓는다.ㅇ Command + Option + L 을 누르면 정렬과 함께 저장이 된다. // 정렬 전{"a":"teatA","b":"teatB","c":"teatC","d":{"aa":"test","bb":"test","cc":"test"}}// 정렬 후{ "a"..
ㅁ 들어가며ㅇ JPA(Java Persistence API)에서 엔티티의 기본 키 생성 전략을 정의하는 데 사용되는 GenerationType에 대해 알아보자. ㅁ GenerationType.IDENTITY이란?ㅇ GenerationType은 JPA에서 엔티티의 기본 키 값을 자동으로 생성하는 방법을 지정할 수 있다.ㅇ @GeneratedValue 어노테이션과 함께 사용되며, 다음 다섯 가지 타입이 있다. ㅁ IDENTITY@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;ㅇ지속성 공급자가 데이터베이스 ID 열을 사용하여 엔터티에 대한 기본 키를 할당해야 함을 나타낸다.ㅇ 데이터베이스의 AUTO_INCREMENT 기능을 사용한다..
ㅁ 들어가며ㅇ [Spring] JPA Querydsl 세팅, Kotlin 작업을 하면서 알게 된 querydsl plugin에 대해 정리하였다. ㅁ Ewerk querydslㅇ com.ewerk.gradle.plugins.querydsl은 Gradle 프로젝트에서 QueryDSL을 쉽게 설정하고 사용할 수 있게 해주는 플러그인이다. 이 플러그인은 QueryDSL의 Q클래스 생성을 자동화하고, 관련 설정을 간소화해준다. ㅇ 인텔리제이의 Gradle 탭에 queryDSL 관련 메뉴가 생성된다. ㅁ 주요 기능ㅇ Q클래스 자동 생성 - JPA 엔티티를 기반으로 QueryDSL용 Q클래스를 자동으로 생성한다.ㅇ 소스 디렉토리 설정 - 생성된 Q클래스의 소스 디렉토리를 지정할 수 있다.ㅇ 의존성 관리 - Query..