1. 분산추적이란?분산 추적은 마이크로서비스 아키텍처와 같은 분산 시스템에서 요청의 전체 여정을 추적하고 모니터링하는 기술이다. 이 기술은 여러 서비스와 구성 요소를 거치는 요청의 경로를 시각화하고, 각 단계에서 소요된 시간과 발생한 오류를 식별한다. 분산 추적은 고유한 트레이스 ID를 사용하여 요청을 추적하며 각 작업 단위를 'Span'으로 표현한다. 이를 통해 개발자들은 성능 병목 현상을 파악하고, 오류의 근본 원인을 신속하게 찾아내며, 전체 시스템의 성능을 최적화할 수 있다. Zipkin과 같은 도구를 사용하면 이러한 분산 추적 데이터를 수집하고 시각화하여 효과적으로 분석할 수 있다. 2. 주요 개념2 - 1. Tracetrace는 하나의 요청이 시작부터 끝까지 각 서비스를 거치는 전체 흐름을 나타..
티스토리챌린지
1. JPA의 N + 1 문제란?N + 1 문제는 연관된 엔티티를 조회할 때 발생하는 성능 이슈를 말한다. 연관 관계가 설정된 엔티티를 조회할 경우에, 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상이다. 다시 말하면, 조회시 1개의 쿼리를 생각하고 설계했으나 예상치 못한 쿼리가 N개 더 발생하는 문제이다. 2. 즉시 로딩(Eager)// User.java@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)private Set orders = emptySet();// Order.java@ManyToOne(fetch = FetchType.EAGER)private Order order; 즉시 로딩이란 연관된 엔티티를 조인해서 가져오는 것을..
1. Circuit Breaker 란?서킷 브레이커란 마이크로서비스 간에 호출 실패를 감지하고 시스템의 안정성을 관리하는 패턴을 말한다. 이 패턴은 전기 차단 회로기의 개념을 차용하여 서비스 호출 중 장애가 발생할 경우 더이상의 호출을 차단하여 시스템의 리소스를 보호하고 장애 확산을 방지한다. 외부 서비스 호출시 빠른 실패를 감지해서 장애를 격리하고, 시스템의 다른 부분에 영향이 가지 않도록 한다. 특히 Resilience4j 는 Java 애플리케이션에서 CircuitBreaker 패턴을 구현하는 경량화된 라이브러리이다.https://resilience4j.readme.io/docs/getting-started IntroductionResilience4j is a lightweight fault tole..
1. Entity ManagerEntity Manager는 JPA의 핵심 구성 요소로, 엔티티 인스턴스의 생명주기를 관리하는 API이다. Entity Manager는 데이터베이스와 Java 객체 간의 중개자 역할을 한다.JPA에서 엔티티는 Persistence Context에서 관리되어야 하는데,Persistence Context를 도와주는 것이 Entity Manager다. 1 - 1. 주요 기능1 - 1 - 1. 엔티티 생명주기 관리엔티티의 생성, 수정, 삭제 등 생명주기 전반을 관리한다.엔티티는 비영속, 영속, 준영속, 삭제 상태가 될 수 있다.persist, merge, remove, close 메서드를 이용하여 엔티티의 상태를 변경할 수 있다. 1 - 1 - 2. Persistence Conte..
1. 로드 밸런싱이란?네트워크 트래픽을 여러 서버에 고르게 분산시켜 서버의 과부하를 방지하고 서비스의 가용성을 높이는 기술을 말한다. 이를 통해 특정 서버에 트래픽이 집중되는 것을 막고, 시스템의 성능과 안정성을 유지할 수 있다. 로드밸런서는 다양한 알고리즘을 사용하여 요청을 적절한 서버로 라우팅한다. 이러한 알고리즘에는 라운드 로빈, 최소 연결, IP 해시, 가중치 기반 등이 포함된다. 2. 클라이언트 사이드 로드 밸런싱로드 밸런싱은 클라이언트 사이드와 서버 사이드로 나뉘며, 두 방식은 각각의 장단점을 가지고 있다. 클라이언트 사이드 로드 밸런싱은 주로 마이크로서비스 아키텍처에서 사용되며, Netflix Ribbon과 같은 라이브러리를 통해 구현할 수 있다. 반면, 서버 사이드 로드 밸런싱은 AWS E..
1. ddl-auto 옵션ddl-auto 옵션은 Spring Boot Application에서 Hibernate와 같은 JPA 구현체를 사용할 때 데이터베이스 스키마 관리를 제어하는 설정이다. 이 옵션은 application.properties, application.yml 같은 설정 파일에서 설정할 수 있다. ddl-auto 옵션에는 none, validate, update, create, create-drop 등이 있다. 2. 각 옵션들 정리2 - 1. none데이터베이스 스키마와 관련된 어떠한 작업도 수행하지 않는다.데이터베이스 스키마를 수동으로 관리하고 싶을 때 유용하다.프로덕션 환경에서 주로 사용된다. 2 - 2. validate애플리케이션이 시작될 때, 엔티티 매핑이 데이터베이스 스키마와 일치..
https://school.programmers.co.kr/learn/courses/30/lessons/42628 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. Heap힙은 완전 이진 트리를 기반으로 한 자료구조로, 최댓값 또는 최솟값을 빠르게 찾아내는 데 유용하다. 힙의 주요 특징완전 이진 트리부모 노드와 자식 노드 간에 특정한 순서가 있다.중복된 값을 허용한다.형제 노드 간에는 순서가 정해지지 않는다. 2. Max Heap과 Min Heap의 차이2 - 1. Max Heap(최대 힙)부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같다.루트 노드에 최댓값이 위치한다. 2 - 2. Min H..
0. JpaMetamodelEntityInformation.isNew(T entity)@Overridepublic boolean isNew(T entity) { if(versionAttribute.isEmpty()) || versionAttribute.map(Attribute::getJavaType).map(Class::isPrimitive).orElse(false)) { return super.isNew(entity); } BeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity); return versionAttribute.map(it -> wrapper.getPropertyValu..