| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 그리디알고리즘
- 그리디
- API
- 데이터베이스
- 코드
- 코딩
- 애자일기법
- kotlin
- 개발
- database
- 알고리즘
- 읽기쉬운코드
- Java
- Baekjoon
- 개발자
- 스프링
- spring boot
- cleancode
- 백준
- 코딩테스트
- JPA
- framework
- 자바
- 애자일프로그래밍
- Spring
- 엘라스틱서치
- Elasticsearch
- 클린코드
- 프레임워크
- ES
- Today
- Total
목록전체 글 (192)
튼튼발자 개발 성장기🏋️
코틀린(Kotlin)은 함수형 프로그래밍(FP)을 지원한다. 코틀린에서는 함수가 중요한 구성 요소로, 이를 통해 간결하고 표현력 있는 코드를 작성할 수 있다. 일단 함수형 프로그래밍의 기본 개념인 부분 함수(partial function), 전 함수(pre-function), 커리한 함수(currying) 에 대해 설명하고, 이를 어떻게 활용할 수 있는지 알아보자. 1. 부분 함수(Partial Function)부분 함수는 입력값에 대해 정의된 범위 내에서만 동작하는 함수다. 즉, 어떤 함수가 모든 가능한 입력에 대해 정의된 것이 아니라, 일부 입력에 대해서만 유효한 함수일 때 사용된다. 이 개념은 주로 예외 처리나 특정 조건에 맞는 함수를 정의할 때 유용하다.예를 들어, 코틀린에서 map 함수는 nul..
1. 자원 관리Java에서 자원 관리에는 Java 7부터 도입된 기능으로 try-with-resources 문을 사용한다. AutoCloseable 또는 Closeable 인터페이스를 구현한 객체에 대해 자원 해제를 자동으로 처리할 수 있도록 한다.Kotlin에서는 use 확장 함수를 제공하여 자원을 자동으로 닫는 기능을 간결하게 구현할 수 있다. 이 방식은 Java의 try-with-resources 구문과 유사하지만, Kotlin의 확장 함수를 활용해 더 간결하고 직관적으로 작성할 수 있다.간결성: Kotlin의 use 함수는 확장 함수로 제공되어, 자원을 자동으로 닫는 코드가 매우 간결하고 직관적이다. 자원 해제 처리를 명시적으로 작성할 필요 없이 use 블록 안에서만 자원을 사용할 수 있다.안전성..
1. 패키지패키지는 여러 클래스를 묶어서 네임스페이스를 제공하는 개념이다. 패키지를 사용하면 이름 충돌을 방지하고, 코드의 구조를 명확히 하며, 다른 프로그램에서 클래스들을 쉽게 가져다 쓸 수 있게된다.네임스페이스 관리: 같은 이름을 가진 클래스를 여러 개 정의할 수 있게 해준다. 예를 들어, com.example.utils와 com.example.models 같은 서로 다른 패키지에 같은 이름을 가진 클래스가 있을 수 있다.코드 관리: 프로젝트를 더 나은 구조로 나누어 관리할 수 있게 해준다.접근 제어: 패키지 내에서 클래스를 어떻게 접근할 수 있는지 제어할 수 있다.Kotlin에서의 패키지 사용법Kotlin에서는 package 키워드를 사용하여 클래스를 패키지에 포함시킨다. 패키지는 코드 파일의 첫 ..
1. 필드와 변수Java에서 클래스의 필드는 반드시 명시적으로 선언된 타입과 함께 접근 제어자가 필요하다. 반면, Kotlin에서는 필드 선언이 더 간결하고 유연하다. Kotlin은 기본적으로 val(불변 변수)과 var(가변 변수)로 구분하며, var는 Java의 mutable 변수와 비슷하고, val은 Java의 final 변수와 유사하다.Java code와 Kotlin code를 비교해보자.val은 name처럼 불변(읽기 전용) 필드를 정의하며, var는 age처럼 가변 필드를 정의한다.Kotlin에서는 getter와 setter를 자동으로 생성해준다. name은 val이기 때문에 setter가 없고, age는 var이므로 setter가 자동으로 생성된다. public class Person { ..
1차 캐시 vs 2차 캐시1차 캐시JPA의 EntityManager에 의해 관리되는 캐시다.트랜잭션 범위 내에서만 유효하며, 동일한 Entity를 요청하면 데이터베이스에 접근하지 않고 캐시된 데이터를 반환한다.2차 캐시EntityManager에 의해 관리되지 않는 전역 캐시로, 애플리케이션의 여러 세션에서 공유된다.여러 트랜잭션과 여러 클라이언트에서 동일한 데이터를 요청할 때 유용하다.캐시된 데이터는 설정된 TTL(Time To Live) 또는 만료 정책에 따라 만료될 수 있다.JPA 2차 캐시 기능 JPA 2차 캐시는 성능을 높이고 데이터베이스 부하를 줄이기 위해 사용된다. JPA에서는 기본적으로 2차 캐시를 제공하지 않지만, Hibernate와 같은 JPA 구현체를 통해 2차 캐시 기능을 사용할 수 ..
JPA에서의 N+1 문제는 주로 연관된 엔티티를 조회할 때 발생하는 성능 문제로, 데이터베이스 쿼리가 예상보다 많이 발생하여 성능이 저하될 수 있다. 이 문제는 즉시 로딩(Eager Loading)이나 지연 로딩(Lazy Loading) 설정에 따라 다르게 나타날 수 있다. N+1 문제를 해결하기 위해서는 페치 조인(Fetch Join), @BatchSize, @Fetch(FetchMode.SUBSELECT)와 같은 전략을 사용할 수 있다.1. N+1 문제와 즉시 로딩즉시 로딩은 연관된 엔티티를 조회할 때 기본적으로 즉시 데이터베이스에서 로드한다. 하지만 잘못된 설정이나 비효율적인 쿼리로 인해 N+1 문제가 발생할 수 있다. 엔티티가 아래와 같을 때, 특정 author를 조회한다고 가정해볼 때 books..
JPA에서는 예외가 발생했을 때 표준 예외를 던지며, JPA 예외는 런타임 예외인 PersistenceException을 상속받는다. JPA 예외는 크게 두 가지 범주로 나눌 수 있다.트랜잭션 롤백을 표시하는 예외: 트랜잭션 롤백이 필요함을 나타내는 예외다. 이 예외가 발생하면 트랜잭션이 강제로 롤백된다.트랜잭션 롤백을 표시하지 않는 예외: 트랜잭션 롤백을 강제하지 않으며, 트랜잭션을 계속 유지할 수 있는 예외다.트랜잭션 롤백을 표시하는 예외이 범주에 속하는 예외는 비정상적인 데이터 액세스나 영속성 컨텍스트의 무결성 문제를 발생시킬 때 던진다. 트랜잭션을 즉시 롤백해야 함을 나타내며, 이를 복구하려고 시도할 수 없다.EntityExistsException: 이미 존재하는 엔티티를 병합하거나 영속하려고 할..
컬렉션자바는 기본으로 Collection, List, Set, Map 컬렉션을 지원한다. 이 컬렉션은 JPA에서 아래와 같이 활용할 수 있다.@OneToMany, @ManyToMany를 사용하여 일대다, 다대다 관계를 매핑할 때@ElementCollection을 사용하여 값 타입을 하나 이상 보관할 때(각 자바의 컬렉션의 특징은 자바의 기본적인 사항이므로 넘어간다.)JPA와 컬렉션하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 "내장 컬렉션"으로 감싸서 사용한다. "래퍼 컬렉션"이라고도 부른다.@Entitypublic class Member { @Id @GeneratedValue private Long id; @OneToMany @JoinCo..