일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- PETERICA
- 정보처리기사 실기 기출문제
- tampermonkey
- Linux
- 정보처리기사 실기
- Pinpoint
- kotlin
- MySQL
- IntelliJ
- AI
- Kubernetes
- kotlin coroutine
- Elasticsearch
- kotlin querydsl
- kotlin spring
- 기록으로 실력을 쌓자
- Spring
- APM
- 정보처리기사실기 기출문제
- 공부
- CloudWatch
- 코틀린 코루틴의 정석
- Kubernetes 자격증
- mysql 튜닝
- AWS EKS
- minikube
- Java
- CKA 기출문제
- aws
- CKA
- Today
- Total
목록전체 글 (741)
피터의 개발이야기
ㅁ 들어가며ㅇ 폴더를 삭제하는 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..
ㅁ 들어가며ㅇ 지난 글, Ktor란?을 정리하였는데, 요약하면 다음과 같다.- Ktor는 JetBrains에서 개발한 Kotlin 전용 웹 개발 프레임워크로, 서버와 클라이언트 앱 개발을 모두 지원하며 코루틴 기반의 비동기 처리를 제공한다.- Ktor의 주요 특징으로는 경량성, 코루틴 지원, 모듈형 아키텍처, 다양한 플랫폼 지원, 사용 편의성이 있다.- Spring과 비교했을 때 Ktor는 부팅 속도가 빠르고 리소스 사용량이 적어, 마이크로서비스 아키텍처와 빠른 개발 및 배포가 필요한 상황에 적합하다.ㅇ 이번 글에서는 경량화된 Ktor 애플리케이션에 SQL 데이터베이스를 통합하여 데이터를 저장하는 방법을 정리하였다.ㅇ Spring을 사용하기 어려워하는 프론트개발자에게 추천해 줄 수 있다.ㅇ Guide t..
ㅁ 들어가며ㅇ Gradle 프로젝트를 빌드할 때 테스트를 실행하지 않고 싶은 경우가 있다. ㅇ [Spring] JUnit5 조건부 테스트 실행방법에서는 OS, JAVA 버젼, Property, 환경변수에 다른 테스트 진행 방법을 알아보았다.ㅇ 이번 글에서는 빌드 시 테스트 전체를 스킵하는 방법을 정리하였다.ㅇ 이는 빌드 시간을 단축하거나 특정 상황에서 테스트를 임시로 건너뛰고 싶을 때 유용하다. ㅁ Gradle 명령어gradle build --exclude-task test// Gradle 5 이상// -x 옵션은 특정 태스크를 실행하지 않도록 gradle build -x test ㅁ build.gradle 테스트 스킵 설정// 모든 테스트 스킵test { exclude '**/*'}// 특정..
ㅁ 개요 ㅇ Elasticsearch Data 노드의 높은 메모리 사용량을 분석하고, ㅇ "해결 방법을 함께 보면 좋은 사이트"를 참조하여 Elasticsearch 클러스터의 높은 메모리 사용률 문제를 분석방법을 정리하였다. ㅁ 함께 보면 좋은 사이트ㅇ Elasticsearch 블로그 - Elasticsearch 메모리 관리 및 문제 해결ㅇ AWS DOC - Amazon OpenSearch Service 클러스터의 높은 CPU 사용률 문제를 해결하려면 어떻게 해야 합니까?ㅇ 토스 - 대규모 로그 처리도 OK! Elasticsearch 클러스터 개선기 ㅁ 와탭을 통한 지표 수집ㅇ whatap에서 수집된 컨테이너 리소스 정보이다.ㅇ Elasticsearch의 Data 노드에 할당된 메모리 10GB 중 9...
ㅁ 들어가며ㅇ JPA를 사용 중인 프로젝트에서 중복체크 기능을 구현하면서 Exists와 Count의 성능차이를 고민하였다.ㅇ [QueryDSL] fetchFirst()와 fetchOne()의 차이을 정리하면서 Count vs Limit vs Exists 성능 차이에 대해서 정리하였다.ㅇ JPA exists 쿼리 성능 개선을 보고, 이해한 부분을 정리하였다. ㅁ성능 비교ㅇ 대량의 데이터(약 5600만 건)가 있는 테이블에서 COUNT와 EXISTS의 성능을 비교해보면 2배에 가까운 성능 차이가 나타났다.ㅇ 데이터가 1억 건 이상으로 늘어나면 이 차이는 더욱 벌어질 것이다.COUNT: 9.079초EXISTS: 5.278초 ㅁ 원인분석ㅇ 이러한 성능 차이의 원인은 각 쿼리의 동작 방식에 있다- EXISTS: ..
ㅁ 들어가며ㅇ QueryDSL을 사용하다 보면 fetchFirst()와 fetchOne() 메서드를 자주 마주치게 된다. ㅇ 이 두 메서드는 비슷해 보이지만 중요한 차이점이 있다. ㅇ 오늘은 이 두 메서드의 차이점을 정리하였다. ㅁ fetchFirst()ㅇ fetchFirst() 메서드는 쿼리 결과에서 첫 번째 결과만을 반환한다.ㅇ 주요 특징 - 항상 단일 결과를 반환한다. - 결과가 없으면 null을 반환한다. - 여러 결과가 있어도 예외를 발생시키지 않고 첫 번째 결과만 반환한다. - 내부적으로 LIMIT 1을 사용하여 데이터베이스에서 하나의 결과만 가져온다. ㅁ fetchOne()ㅇ fetchOne() 메서드는 쿼리 결과가 정확히 하나일 때 사용한다. ㅇ 주요 특징 - 결과가 정확히 하나일 때만 해..
ㅁ 들어가며ㅇ 코틀린에서 `?`와 `!!`는 null 안전성을 처리하는 데 중요한 역할을 한다. ㅇ 이 두 연산자는 null 값을 다루는 방법에 차이가 있다.ㅁ 요약ㅇ `?`는 변수나 객체가 null 값을 가질 수 있음을 나타내며, null 안전성을 보장하기 위해 사용된다.ㅇ `!!`는 변수나 객체가 null이 아님을 단언하며, null일 경우 런타임에 `NullPointerException`을 발생시킨다.이 두 연산자를 적절히 사용하면 코틀린에서 null 안전성을 효과적으로 관리할 수 있다. ㅁ `?` (Nullable 타입)ㅇ `?`는 변수나 객체가 null 값을 가질 수 있음을 나타낸다. ㅇ 이를 통해 컴파일러는 해당 변수가 null일 수 있음을 인지하고, null 안전성을 보장하기 위한 추가 검사..