일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리챌린지
- mysql 튜닝
- Spring
- kotlin
- IntelliJ
- Elasticsearch
- kotlin coroutine
- AWS EKS
- CloudWatch
- aws
- Kubernetes
- CKA 기출문제
- 공부
- 정보처리기사실기 기출문제
- APM
- kotlin spring
- 정보처리기사 실기
- PETERICA
- kotlin querydsl
- 코틀린 코루틴의 정석
- MySQL
- 정보처리기사 실기 기출문제
- 오블완
- 기록으로 실력을 쌓자
- CKA
- AI
- Pinpoint
- Linux
- minikube
- Java
- Today
- Total
목록전체 글 (777)
피터의 개발이야기
ㅁ 들어가며ㅇ [Elasticsearch] Docker로 Elasticsearch 설치 및 테스트하기을 하면서 발생한 https 에러를 해결하는 과정을 정리하였다.ㅇ 이 해결방법은 로컬 개발환경에서 테스트를 위한 해결방법이다. 그래서 운영환경에서는 인증서 설치 과정을 수행해야 한다. ㅁ 에러 상황# 통신 수행$ curl -X GET "localhost:9200/?pretty"# 에러 내용received plaintext http traffic on an https channel, closing connection Netty4HttpChannel# row logs{"@timestamp":"2024-07-28T21:48:38.081Z", "log.level": "WARN", "message":"receiv..
ㅁ 들어가며ㅇ 프로젝트 진행 중에 Elasticsearch에 비정규화 테이터를 저장하는 요건이 발생하여 개인적으로 Elasticsearch를 집에 설치해 보았다.ㅇ 이 글은 Docker로 Elasticsearch 설치 및 테스트하는 과정을 정리하였다.ㅇ 기본적으로 도커는 설치 되어 있어야 한다. ㅁ 관련 글ㅇ [kotlin] Spring Data Elasticsearch 샘플코드ㅇ [Elasticsearch] Elasticsearch + Kibana 설치하기 with Dockerㅇ [Elasticsearch] Docker로 Elasticsearch 설치 및 테스트하기ㅇ [Elasticsearch] Kibana Query Language 사용법 정리 ㅁ Elasticsearch 이미지 다운로드docker ..
ㅁ 들어가며ㅇ JPA를 사용하면서 CascadeType.REMOVE와 orphanRemoval=true 옵션의 차이를 제대로 이해하지 못하였다.ㅇ 두 옵션 모두 엔티티 간의 관계를 관리하는 데 사용되지만, 그 목적과 동작 방식에는 차이가 있다.ㅇ 이 글에서는 두 옵션의 차이를 설명하고, 언제 어떤 옵션을 사용해야 하는지 알아보았다.ㅇ [JPA] CascadeType.REMOVE vs orphanRemoval=true 차이점 알아보기을 참조하여 작성하였다. ㅁ CascadeType.REMOVEㅇ 부모 엔티티가 삭제될 때, 연관된 자식 엔티티도 함께 삭제되도록 설정하는 옵션이다.@Entityclass Parent( @Id @GeneratedValue(strategy = GenerationType.IDE..
ㅁ 들어가며 MacBook M3에서 로컬에서 빌드한 Docker 이미지가 개발 환경에서 문제가 발생하는 경우가 있다. 그 이유는 주로 아키텍처 호환성 문제 때문일 수 있다. MacBook M3는 ARM 아키텍처를 사용하지만, 많은 서버 환경은 여전히 x86 아키텍처를 사용한다. 이로 인해, ARM에서 빌드한 이미지를 x86 환경에서 실행하려고 하면 문제가 발생할 수 있다. ㅁ 해결방법ㅇ 이 문제를 해결하기 위해 Colima를 사용하여 Docker 이미지를 빌드하는 것이 도움이 될 수 있다.ㅇ Colima는 MacOS에서 Docker를 실행하기 위한 경량의 대안으로, 기본적으로 QEMU를 사용하여 다양한 아키텍처를 지원한다.ㅇ 다음은 Colima를 사용하여 멀티 아키텍처 Docker 이미지를 빌드하는 방법..
ㅁ 들어가며ㅇ 개발서버 접속하기 위해 SSH 키를 생성하고 등록하는 과정을 수행하게 되었다.ㅇ 이 글에서는 ssh-keygen 명령어를 사용하여 SSH 키를 생성하고 사용하는 방법을 정리하였다. ㅁ SSH 키란?ㅇ SSH 키는 원격 서버와 안전하게 통신하기 위해 사용되는 암호화 키이다.ㅇ SSH 키를 사용하면 비밀번호 대신 공개 키와 개인 키 쌍을 이용하여 인증할 수 있다. ㅁ SSH 키 생성ssh-keygen 명령어 실행# ssh-keygen 명령어 실행$ ssh-keygen -t rsa -b 4096 -C "your_email@gmail.com"Generating public/private rsa key pair.ㅇ 터미널을 열고 위와 같이 ssh-keygen 명령어를 실행하여 SSH키를 생성한다...
ㅁ 들어가며ㅇ 입력값에 대한 유효성 검증을 코드상에서 하나하나 처리하는 것은 번거롭다. ㅇ 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ㅇ 여러 인자를 받는 함수에 배열이나 컬렉션의 요소를 개별 인자로 전달할..
ㅁ 들어가며ㅇ [Git] 깃허브(Github) 프로필 README 추가방법하는 방법을 정리하였다. ㅇ 최근 GitHub Actions에서 Node.js 버전과 관련된 에러가 발생하고 있다.ㅇ 이 문제는 GitHub가 기본 Node.js 버전을 16에서 20으로 업그레이드하면서 발생한 것이다.ㅇ 에러 메시지를 보면 다음과 같다 ㅁ 빌드 실패The following actions uses Node.js version which is deprecated and will be forced to run on node20: actions/checkout@v3, actions/setup-python@v3. For more info: https://github.blog/changelog/2024-03-07-github..
ㅁ 들어가며 Resilience4j는 마이크로서비스 아키텍처에서 내결함성을 제공하는 라이브러리로, 서킷브레이커 패턴을 쉽게 구현할 수 있게 도와준다. 여기서는 Resilience4j를 사용하여 서킷브레이커 패턴을 구현하는 방법을 예제 코드와 함께 설명한다. ㅁ 서킷브레이커 패턴이란?ㅇ 서킷브레이커 패턴은 시스템의 일부에서 장애가 발생했을 때, 그 장애가 전체 시스템으로 확산되는 것을 방지하기 위한 패턴이다. ㅁ 서킷브레이커의 세 가지 상태ㅇ 닫힘(CLOSED): 정상 상태로, 모든 요청이 통과한다.ㅇ 열림(OPEN): 장애 상태로, 모든 요청이 즉시 실패한다.ㅇ 반개방(HALF-OPEN): 테스트 상태로, 일부 요청만 통과하여 성공 여부를 확인한다. ㅁ Resilience4j 설정dependencies ..
ㅁ 들어가며ㅇ Kotlin Spring에서 API 요청에 대해 즉시 성공 응답을 반환하고, 비동기로 특정 작업을 실행하는 코드를 작성해았다.ㅇ @Async 대신 Kotlin의 코루틴을 사용하여 비동기 처리를 구현하였다. import kotlinx.coroutines.CoroutineScopeimport kotlinx.coroutines.Dispatchersimport kotlinx.coroutines.launchimport org.springframework.http.ResponseEntityimport org.springframework.web.bind.annotation.PostMappingimport org.springframework.web.bind.annotation.RequestBodyimpo..
ㅁ 들어가며ㅇ Kotlin에서 엔티티 리스트에서 ID만 추출하여 새로운 리스트를 만드는 방법을 정리하였다. ㅁ 엔티티 예제 코드// 엔티티 클래스가 다음과 같다고 가정data class Entity(val id: Long, val name: String)// 엔티티 리스트가 있다고 가정val entityList: List = listOf( Entity(1, "First"), Entity(2, "Second"), Entity(3, "Third"))// ID만 추출하여 새로운 리스트 만들기val idList: List = entityList.map { it.id }// 또는 더 명시적으로 entity 주입받기val idList: List = entityList.map { entity -> e..
ㅁ 들어가며ㅇ QueryDSL 환경구성을 하면서 발생한 에러에 대해 트러블 슈팅과정을 정리하였다. ㅁ 에러java.lang.NoSuchFieldError: TREATED_PATH at com.querydsl.jpa.JPQLTemplates.(JPQLTemplates.java:147) at com.querydsl.jpa.JPQLTemplates.(JPQLTemplates.java:51) at com.querydsl.jpa.JPQLTemplates.(JPQLTemplates.java:46) at com.querydsl.jpa.impl.JPAProvider.(JPAProvider.java:59) at com.querydsl.jpa.impl.JPAQuery.(JPAQuery.java:48) at com.quer..