일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kubernetes
- AI
- APM
- 정보처리기사 실기
- AWS EKS
- CKA 기출문제
- Pinpoint
- 기록으로 실력을 쌓자
- Spring
- mysql 튜닝
- kotlin
- 오블완
- 정보처리기사 실기 기출문제
- 정보처리기사실기 기출문제
- MySQL
- minikube
- CloudWatch
- aws
- Java
- kotlin coroutine
- kotlin querydsl
- Elasticsearch
- 티스토리챌린지
- IntelliJ
- Linux
- CKA
- 코틀린 코루틴의 정석
- 공부
- kotlin spring
- PETERICA
- Today
- Total
목록2024/06 (31)
피터의 개발이야기
ㅁ 들어가며ㅇ 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 안전성을 보장하기 위한 추가 검사..
ㅁ 개요ㅇ 테스트를 진행 시 특정 조건에 맞추어 테스트를 실행해야 할 때가 있다. ㅇ 예를 들어, 환경 변수, properties 설정 값, OS, JRE 버전 등에 따라 테스트를 실행할 필요가 있다.ㅇ JUnit5는 이러한 조건에 맞춰 테스트를 실행할 수 있는 다양한 방법을 제공한다. ㅇ 이번 글에서는 JUnit5의 조건에 따라 테스트를 실행하는 방법을 정리하였다.ㅁ EnabledOnOs // OsConditionTest @Test @EnabledOnOs(OS.WINDOWS) fun test1() { println("enabled on windows") } @Test @EnabledOnOs(OS.MAC, OS.LINUX) fun test2() { ..
ㅁ 들어가며ㅇ Spring의 테스트 시 자동으로 Rollback 되는 방법을 정리하였다. ㅁ Transactional 어노테이션ㅇ 테스트 클래스나 테스트 메서드에 @Transactional 어노테이션을 추가한다.ㅇ 이 어노테이션은 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후 자동으로 롤백을 수행한다.ㅇ 이렇게 하면 각 테스트가 독립적으로 실행되며, 이전 테스트의 데이터가 다음 테스트에 영향을 주지 않는다. ㅁ Rollback 어노테이션 사용ㅇ 기본적으로 @Transactional이 적용된 테스트는 롤백되지만, 명시적으로 @Rollback 어노테이션을 사용할 수 있다.ㅇ @Rollback(true)로 설정하면 테스트 후 롤백이 수행되고, @Rollback(false)로 설정하면 롤백이 수행되지 ..
ㅁ 들어가며ㅇ이번 글은 Kotlin의 5가지 주요 Scope Functions (let, with, run, apply, also)에 대해 정리하였다.ㅇ kotlin doc - scope function의 내용을 보고 정리하였다. ㅁ Scope Functions (let, with, run, apply, also) 요약ㅇ let: 객체를 인자로 받아 처리하며, 결과를 반환합니다. Null 체크에 유용하다.ㅇ with: 객체를 직접 입력받아 속성을 변경할 수 있으며, 여러 함수를 그룹화하는 데 사용된다.ㅇ run: 객체의 확장 함수로, 계산이 필요하거나 지역 변수 범위를 제한할 때 사용한다.ㅇ apply: 객체를 초기화하거나 변경할 때 주로 사용되며, 자기 자신을 반환한다.ㅇ also: 객체의 속성을 변..
ㅁ 들어가며ㅇ 지난 글, Ktor란?을 정리하였다.# 요약- Ktor는 JetBrains에서 개발한 Kotlin 전용 웹 개발 프레임워크로, 서버와 클라이언트 앱 개발을 모두 지원하며 코루틴 기반의 비동기 처리를 제공한다.- Ktor의 주요 특징으로는 경량성, 코루틴 지원, 모듈형 아키텍처, 다양한 플랫폼 지원, 사용 편의성이 있다.- Spring과 비교했을 때 Ktor는 부팅 속도가 빠르고 리소스 사용량이 적어, 마이크로서비스 아키텍처와 빠른 개발 및 배포가 필요한 상황에 적합하다. ㅁ 프로젝트 생성ㅇ ktor로 이동하고 Start를 클릭 ㅇ ktor-peterica로 프로젝트 이름 입력 ㅇ add plugin: Ktor Swagger-UI을 선택하니 의존성이 있는 Routing과 Webjars가 ..
ㅁ 들어가며ㅇ [Spring] JDBC와 MyBatis와 JPA 비교, 시대적 흐름에서 장단점 분석에서 JDBC, MyBatis, JPA의 시대적 흐름에 따른 장단점을 정리하였다.ㅇ JPA의 장단점을 요약적으로 정리하고 fetch Join이 왜 필요한지 정리해 보았다.ㅇ 우선 JPA의 장점을 정리하였다. ㅁ JPA (Java Persistence API) 의 장점ㅇ 객체와 데이터베이스 테이블을 자동으로 매핑ㅇ 객체 지향적인 방식으로 데이터 관리 가능ㅇ 코드 작성량이 적고 유지보수가 용이함 ㅁ JPA의 단점ㅇ 성능이슈: JDBC가 JPA보다 약 2배 정도 빠름ㅇ 학습 난이도: JPA와 ORM를 잘 다루기 위해서는 초반 학습이 필요함ㅇ 특정 데이터베이스의 기능 활용 제한 ㄴ 프로시저, 특정 쿼리 힌트나 최..
ㅁ 들어가며ㅇ 코틀린 프로젝트에서 개발 중에 KtLint를 알게 되었다.ㅇ 에전에 React 개발 시 빌드할 때에 eslint를 사용한 적이 있다.ㅇ 이와 비슷하게 백엔드에도 코드의 스타일 문제를 검사하는 정적 분석 도구인 KtLint이다.ㅇ 깔끔한 포맷팅을 위한 ktlint 적용하기 (feat. kotlin)을 인용하여 공부한 내용을 정리하였다. ㅁ Ktlint란?ㅇ KtLint는 Kotlin 언어의 공식 코드 컨벤션을 준수하도록 코드 스타일을 검사하고 문제점을 맞춰주는 정적 분석 도구이다. ㅁ 주요 기능ㅇ Kotlin 공식 Code Convention을 기반으로 코드 스타일을 검사한다.ㅇ 대표적 사용방법 ㄴ brew로 설치하여 CLI에서 스타일 검사 ㄴ Gradle을 통해 빌드 과정에서 검사 ㄴ Gi..
ㅁ 네트워크 레이아웃에서 SSL이란? SSL(Secure Sockets Layer)은 클라이언트와 서버 간의 통신을 보호하는 표준적인 보안 프로토콜이다.ㅁ 네트워크 레이아웃에서 SSL의 역할1. 데이터 암호화- SSL은 TLS(Transport Layer Security)라는 최신 프로토콜을 사용하여 데이터를 암호화한다.- 이를 통해 악의적인 사용자가 데이터를 도청하거나 내용을 변경하는 것을 방지할 수 있다.- SSL 암호화는 대칭 및 비대칭 암호화를 결합하여 강력한 보안을 제공한다. 2. 신원 인증- SSL은 서버 인증 및 클라이언트 인증을 제공하여 허위 사이트 또는 허위 사용자로부터 보호다.- 서버 인증 ㄴ 서버는 SSL 인증서를 사용하여 신원을 증명한다. ㄴ 이 인증서는 신뢰할 수 있는 인증 기..