분류 전체보기
[MySQL] Explain 사용법 및 분석
[MySQL] Explain 사용법 및 분석
2023.06.16들어가기 전해당 포스팅에서는 Explain이 무엇이며 사용하는 방법, 사용했을 때 나오는 결과를 분석하여 설명드리겠습니다.필자는 MySQL 버전 8.0 기준으로 설명하겠습니다. Explain이란?DB 서버가 어떠한 쿼리를 실행할 것인지 실행계획을 알고 싶을 때 사용하는 명령어입니다.Explain을 사용하면 실행시킬 쿼리의 실행계획을 알 수 있어 성능 분석을 하여 쿼리 튜닝을 할 수 있습니다. 사용방법EXPLAIN [ANALYZE] SELECT (컬럼..) FROM 테이블실행계획을 세울 쿼리 앞에 EXPLAIN 키워드를 사용합니다.ANALYZE 옵션은 쿼리 처리에 사용되는 각 반복자에 대해 TREE 형식의 SELECT 문 실행에 대한 확장 정보를 제공하고 예상 비용을 쿼리의 실제 비용과 비교 가능합니다.●..
[JPA] JdbcTemplate과 JPA 데이터 Insert 속도 비교
[JPA] JdbcTemplate과 JPA 데이터 Insert 속도 비교
2023.06.09들어가기 전 업무를 보다가 대용량 데이터를 저장해야 되는 상황에 맞닥뜨렸습니다. 그래서 평소처럼 JPA를 이용하여 데이터를 넣으려고 했는데 저장속도가 너무 느려 JdbcTemplate을 이용하여 bulkInsert를 하였습니다. 해당 포스팅에서는 JdbcTemplate과 JPA를 이용하여 예시로 50만 건의 데이터가 저장되는 속도를 비교하고 JdbcTemplate보다 Jpa가 데이터 저장속도가 느린 이유에 대해 알아보겠습니다. JPA를 이용하여 데이터 저장 JPA에서는 save, saveAll을 이용하여 데이터를 저장할 수 있습니다. 그래서 save와 saveAll 저장속도를 먼저 비교해 보겠습니다. 1. Save 1) 코드 @SpringBootTest public class BlogContents { ..
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
2023.05.04들어가기 전 Kotlin에서 지원하는 문자열 대체 메서드에 대해 알아보겠습니다. 자바는 replace, replaceAll 등을 지원하는데 Kotlin 같은 경우에는 removePrefix, removeSuffix, removeRange, removeSurrounding을 지원합니다. removePrefix removePrefix의 내부는 아래사진과 같이 되어있습니다. 매개변수로 들어온 prefix값을 해당문자열의 시작단어인지를 비교하고 매개변수의 값이 시작단어일 경우 prefix의 크기만큼 문자열을 잘라 return을 해줍니다. 테스트 코드 class StringRemoveMethodTest : FreeSpec({ "removePrefix" - { "조건이 일치하면 kotlin^^을 반환한다." - {..
[Kotlin] 기본 문법 (2)
[Kotlin] 기본 문법 (2)
2023.04.20들어가기 전 코틀린 변수 선언방법과 형변환 하는 방법에 대해 잘 모르시는 분들은 아래 링크 글을 먼저 보고 이 글을 보는 것을 추천드립니다. https://hoestory.tistory.com/49 [Kotlin] 기본 문법 (1) 들어가기 전 코틀린 기본 문법을 설명하면서 이해를 쉽게 할 수 있도록 자바 문법과 비교해 가면서 설명할 것입니다. var, val 이란? 코틀린에서는 변수나 상수를 선언을 할 때 var와 val을 사용하여 hoestory.tistory.com 제어문 자바에서는 제어문이 if문과 switch case문이 있습니다. 그런데 코틀린에서 if문과 when문이 있습니다. 공통점은 if문이 있고 차이점은 코틀린은 when문이 있습니다. fun main() { val result = ev..
[JPA] Cascade 옵션 종류 및 예제
[JPA] Cascade 옵션 종류 및 예제
2023.04.12Cascade란? Cascde는 영속성 전이라고 합니다. Cascade 옵션을 정의한 엔티티가 영속화되면 연관된 엔티티도 영속화되고 삭제되면 삭제되는 것 속성입니다. @ManyToOne, @OneToMany 등 연관관계를 설정하는 부분에 옵션으로 정의되어 있습니다. 주의 : 엔티티를 영속화할 때 연관된 엔티티도 같이 영속화한다는 편리함만 제공할 뿐 연관관계를 설정하는 어노테이션과는 관련이 없습니다. Cascade 종류 ALL PERSIST REMOVE MERGE REFRESH DETACH Cascade옵션 중 ALL, PERSIST, REMOVE, MERGE, DETACH에 대해서만 예제를 다루고 REFRESH에 대해서는 개념만 알아보겠습니다. 예제 공통 코드 // Image 엔티티 @Entity cla..
[Spring] WebClient를 이용한 Naver Papago 번역 연동
[Spring] WebClient를 이용한 Naver Papago 번역 연동
2023.03.07들어가기 전 먼저 Papago를 쓰기 위해 준비해야 되는 단계가 있어 그거에 대해 먼저 알아보고 WebClient를 이용하여 Papago를 연동하는 방법에 대해 Java코드로 알아보겠습니다. Papago 1. 네이버 개발 문서를 들어가서 애플리케이션 등록을 클릭합니다. 2. 프로젝트에 사용할 Papago 애플리케이션 이름을 지정하고 사용 API는 Papago번역을 클릭합니다. 그리고 프로젝트 환경에 맞게 서비스 환경을 선택해 줍니다. 3. 서비스 환경을 클릭하면 서비스할 URL을 작성을 하면 됩니다. 서비스할 URL은 프로젝트에서 사용할 URL을 사용하면 됩니다. 그 후 등록하기 버튼을 클릭합니다. 4. Client ID와 Client Secret가 발급이 됩니다. 그럼 이제 Papago 번역을 이용할 ..
[JPA] Kotlin을 이용하여 Soft Delete 구현
[JPA] Kotlin을 이용하여 Soft Delete 구현
2023.03.04들어가기 전 Soft Delete와 Hard Delete에 대해 설명하고 Kotlin을 이용하여 JPA에서 지원해 주는 Auditing과 JpaRepository를 이용하여 Soft Delete를 구현하는 예제에 대해 알아보겠습니다. Hard Delete란? DB에 저장되어 있는 데이터를 물리적으로 삭제하는 것을 의미합니다. JPA에서 제공하는 메서드 deleteById, delete, deleteAll 등을 이용하거나 DML 중 하나인 delete 쿼리를 이용해서 물리적으로 데이터를 삭제할 수 있습니다. Soft Delete란? Hard Delete와 달리 DB에 저장되어 있는 데이터를 물리적이 아닌 논리적으로 삭제하는 것을 의미합니다. 논리적으로 삭제한다는 것은 테이블 컬럼 중 하나를 해당 데이터가 ..
[Kotlin] data class VS class
[Kotlin] data class VS class
2023.02.24들어가기 전 코틀린에서는 class와 data class가 존재합니다. data class에 대해 설명을 하면서 일반적인 class와의 차이점을 다뤄보겠습니다. data class data class는 데이터 보관 목적인 클래스입니다. data class의 형식은 아래와 같습니다. data class DataClassExample(val name: String, val age: Int) data class는 보일러 플레이트 코드를 줄여줍니다. 보일러 플레이트 코드가 무엇인지 궁금한 분은 아래 블로그를 들어가시면 내용이 있으니 보고 이어서 내용을 보시면 좋을 거 같습니다. 보일러 플레이트란? 보일러 플레이트 들어가기 전 보일러 플레이트의 정의만 보고 "오? 보일러 플레이트코드 좋은 거 같은데 왜 보일러 플..
[Kotlin] 기본 문법 (1)
[Kotlin] 기본 문법 (1)
2023.02.19들어가기 전 코틀린 기본 문법을 설명하면서 이해를 쉽게 할 수 있도록 자바 문법과 비교해 가면서 설명할 것입니다. var, val 이란? 코틀린에서는 변수나 상수를 선언을 할 때 var와 val을 사용하여 선언을 합니다. var : 가변의 속성을 가진 것에 선언을 합니다. val : 불변의 속성을 가진 것에 선언을 합니다. var num1 = 1 // 가변의 속성을 가졌을 경우 val num2 = 1 // 불변의 속성을 가졌을 경우 그럼 자바에서는 어떻게 변수와 상수를 나타내는지에 대해 알아보겠습니다. int num1 = 1 // 가변의 속성을 가졌을 경우 final int num2 = 2 // 불변의 속성을 가졌을 경우 속성 Java Kotlin 가변 속성 int num1 = 1 var num1 = 1..
[Spring] RestControllerAdvice를 이용한 Validation처리
[Spring] RestControllerAdvice를 이용한 Validation처리
2023.02.11들어가기 전 RestControllerAdvice가 무엇인지에 대해 먼저 알아보고 RestControllerAdvice을 활용한 Validation처리 방법에 대해 알아보겠습니다. validation을 하기 위한 설정 build.gradle implementation 'org.springframework.boot:spring-boot-starter-validation' 의존성을 추가하면 @Valid를 이용하여 Validation처리를 할 수 있습니다. @RestControllerAdvice이란? @ExceptionHandler, @ModelAttribute, @InitBinder가 적용된 메서드들에 AOP를 적용해 Controller단에 적용하기 위하 고안된 어노테이션입니다. 클래스에 선언하면 되고 @R..
[Redis] Spring Boot + Docker-Compose + Redis + Session을 이용한 로그인
[Redis] Spring Boot + Docker-Compose + Redis + Session을 이용한 로그인
2023.02.01들어가기 전 글의 순서는 Docker-Compose로 Redis 세팅하고 Spring에서 세팅된 Redis에 대한 설정을 한 뒤 Session을 이용해서 로그인하는 순서대로 설명하겠습니다. Docker-Compose로 Redis 세팅 docker-compse.yml 파일을 만들어서 아래와 같이 설정을 해줍니다. version : "3" services : redis: image: redis:latest container_name: redis hostname: test ports: - "6379:6379" image : redis 이미지를 내려받습니다. 여기서 latest는 최신버전을 뜻합니다. 즉 최신버전 redis를 이미지로 내려받습니다. container_name : 다운받은 redis image를 ..
[Redis] Redis 개념 및 특징
[Redis] Redis 개념 및 특징
2023.01.27들어가기 전 Redis는 Cache와 연관이 되어 있어 Cache에 대해 먼저 알아보고 Redis의 개념과 특징에 대해 알아보겠습니다. Cache란? 자주 사용하는 데이터를 메모리에 미리 복사해 놓는 임시 장소입니다. 캐시는 저장공간이 작고 비용이 비쌉니다. 하지만 사용하는 이유는 빠른 성능을 제공하기 때문입니다. 보통 데이터를 사용할 때 디스크에 접근을 해서 저장된 데이터를 사용을 합니다. 지속적으로 데이터를 요청을 하면 DBMS의 부하가 늘어나고 시간도 오래 걸립니다. DBMS의 부하를 줄이고 시간을 줄이기 위해 캐시를 사용합니다. 캐시는 메모리에 데이터를 저장하고 관리하기 때문에 DBMS에 접근하는 거에 비해 성능이 뛰어납니다. 클라이언트가 원하는 데이터를 요청을 했을대 캐시에 원하는 값이 있으면 ..