B-Tree란?B-Tree는 기존 이진 탐색 트리에서 최악의 경우 시간 복잡도가 O(N)이 되는 문제를 해결하기 위해, 노드들이 한쪽으로 치우치지 않도록 균형을 유지하도록 설계된 트리이다. 그렇다면 데이터베이스 인덱스는 왜 B-tree를 선택 했을까? 배열을 사용하지 않는 이유데이터베이스에 수십억건의 대량의 데이터가 저장될 수 있는데, 이를 배열로 관리하면 메모리에 모든 데이터를 한 번에 올려야 하므로 비효율적이다.또한 삽입, 삭제시 최악의 경우 O(N)으로 비효율적이다. 연결 리스트를 사용하지 않는 이유연결 리스트의 경우 배열의 단점인 삽입, 삭제시 시간복잡도가 O(1)로 효율적이다.하지만 연결 리스트의 경우 조회시 최악의 경우 시간 복잡도가 O(N)으로 비효율적이다. 해시 테이블을 사용하지 않는 이유..
Skip List스킵리스트는 여러 레벨의 연결 리스트를 확률적으로 구성해 평균 O(log N)에 탐색·삽입·삭제를 지원하는 자료구조 장점스킵 리스트는 다중 레벨로 구성된 연결 리스트 구조를 가지므로, 일반 연결 리스트의 탐색·삽입·삭제가 O(N)인 것에 비해 평균 O(log N)에 수행된다.범위 탐색이 효율적이다. O(log N + M)B-트리와 달리, 스킵 리스트는 별도의 리밸런싱 과정 없이 노드 간 포인터만 조작하여 삽입과 삭제가 가능하다.단점각 노드가 여러 레벨의 포인터를 갖기 때문에 연결 리스트에 비해 메모리 사용량이 많다.확률적 구조 특성상 최악의 경우에는 일반 연결 리스트와 동일한 O(N)의 시간 복잡도를 가질 수 있다. Redis Sorted Set은 왜 Skip List를 선택 했을까? a..
Attribute Converter 란?A class that implements this interface can be used to convert entity attribute state into database column representation and back again이 인터페이스를 구현하는 클래스는 엔티티 속성 상태를 데이터베이스 열 표현으로 변환하고 다시 변환하는 데 사용할 수 있습니다.즉, 엔티티에서의 Boolean 값이 데이터베이스에서는 0과 1로 이루어진 Int 값으로 표현되어야 할 경우 사용할 수 있습니다. 프로젝트에 도입한 이유현재 프로젝트에서 Music Entity에 SuperGenres 와 SubGenres 가 있습니다.@Getter@Entity@NoArgsConstructo..

현재 프로젝트는 Layered Architecture를 사용하고있고, 해당 아키텍처에 따라 패키지를 분리 했다. 패키지 구조에 대해서 크게 고민해보지 않고 관습적으로 아래와 같이 작성했다. Layered Architecture 관심사에 따라 각 계층으로 분리하며, 각 계층은 자신의 하위 계층에만 의존하도록 설계된 아키텍처 패턴입니다 │─ controller │─ service │─ dto │─ domain 사실 위와 같은 설계가 Layered Architecture를 위반하고있지는 않다. 하지만 dto는 각각에 계층별로 사용되기 때문에 프로젝트가 커지면서 패키지별로 위치를 변경 하기로 했다. request, response dto 위치에 대해서 토론을 했었는데 그 당시에는 구조에 대해서 크게 고민을 해보..

일단, Java 17 버전에서 기존 문법들이 크게 변경되지 않은 것은 사실이며, 여러 기업들이 하위 버전을 계속 사용하는 주된 이유는 기존 서비스와의 호환성 때문이라고 생각한다. 그러나, 신규 프로젝트를 진행하면서 굳이 하위 버전을 사용할 필요는 없다고 본다. 상위 버전은 단순히 새로운 기능을 추가한 것뿐만 아니라, 성능 향상과 다양한 개선 사항을 제공하며 꾸준히 발전해왔다. 공부하는 사람의 입장에서도, 상위 버전을 사용하면서 발생할 수 있는 문제들은 오히려 트러블슈팅의 경험으로써 값진 학습 기회가 될 수 있다고 생각한다. 그리고 현재 사용 중인 버전의 지원 종료일이 도래하여 다른 LTS 버전(JDK 21)을 찾아야 할 시점에, 8버전에서 바로 최신 버전으로 전환하는 것 보다 17버전까지의 기술 적응을 ..
- Total
- Today
- Yesterday
- BasicBinder
- feignClient
- @FormProperty
- Spring Boot 3
- 유저 스토리
- 구글 OpenID
- CreationTimestamp
- DispatcherServletInitializer
- 유저 시나리오
- CreatedDate
- ValidateException
- dto 검증
- JPA SQL Injection
- @ElementCollection
- FormProperty
- defer-datasource-initialization
- HTTPInterface
- 구글 소셜로그인
- ServletContainerInitializer
- WebFlux 의존성
- entity 검증
- HandlesTypes
- dto 위치
- User Scenario
- Attribute Converter
- @Converter
- org.springframework:spring-webflux
- setDateFormat
- 레이어드 아키텍처
- java 17
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |