무중단 배포란? 무중단 배포(Zero Downtime Deployment)는 애플리케이션을 배포하는 동안 서비스의 가용성을 유지하면서 사용자 경험에 영향을 주지 않는 배포 방식이다. 일반적으로 서비스 중단 없이 새로운 애플리케이션 버전을 릴리스하기 위해 여러 배포 전략이 사용됩니다. 그중 블루그린 배포는 간단하면서도 효과적인 방식으로 널리 사용된다. 블루그린 배포 방식 이외에도 여러가지 방식이 있는데, 이 게시글에 자세하게 나와있으니 참고하면 좋을 것 같다. 블루/그린 배포 방식을 선택한 이유대중적인 배포 방식 세가지를 비교해 보자 배포 전략특징롤링 배포기존 환경에서 하나씩 새로운 버전으로 업데이트. 일부 인스턴스는 기존 버전, 일부는 새 버전을 동시에 실행.- 점진적 배포로 리소스 사용 효율적- 대..
IT
이전 게시글 [.NET] - 서버 모니터링 및 데이터 시각화(Prometheus, Jaeger, Grafana) 구현 - 1개요 이 글에서는 OpenTelemetry를 통해 시스템에서 발생하는 트레이스와 메트릭 데이터를 수집하고, 이 를 Prometheus와 Jaeger로 각각 관리한 후, Grafana를 활용해 데이터를 시각화하는 과정을 설명하codingdoit.tistory.com 4. Jaeger 체크 Jaeger가 열려있는 포트를 타고 들어가서 확인을 하면, 위와 같이 데이터를 확인할 수 있다. 이제 Grafana의 설정만 진행하면 된다. 5. Grafana 설정5-1. Prometheus Connection수집된 데이터를 기반으로 Grafana를 통해 두 개의 데이터를 종합한 대시보..
개요 이 글에서는 OpenTelemetry를 통해 시스템에서 발생하는 트레이스와 메트릭 데이터를 수집하고, 이 를 Prometheus와 Jaeger로 각각 관리한 후, Grafana를 활용해 데이터를 시각화하는 과정을 설명하려고 한다.이 과정은 시스템 성능의 전반적인 모니터링과 더불어 API 요청의 병목 현상을 효과적으로 분석하는 데 필수적인 역할을 한다.OpenTelemetry를 통해 .NET Core 앱에서 발생하는 Metric 및 Trace를 수집 및 변환하여 Prometheus 및 Jaeger에 exporting 한다.이후 exporting된 데이터들을 Grafana를 통해 시각화하여 직관적으로 추적 가능하게 한다. 전체적인 흐름은 아래와 같다. 1. NET CORE App 구성1-1. N..
ANSI SQL이란?? ANSI SQL은 American National Standards Institute (ANSI)에서 제정한 SQL(Structured Query Language) 표준을 의미한다. ANSI는 다양한 DBMS(Database Management System)가 서로 다른 구현을 가지고 있더라도 공통적인 질의 언어(SQL)를 사용하여 데이터베이스와 상호작용할 수 있도록 표준을 개발했다. ANSI SQL은 이러한 표준화된 SQL로, ANSI/ISO SQL이라고도 한다. 표준 ANSI SQL은 Oracle, MySQL, PostgreSQL, SQL Server 등 각기 다른 DBMS 간 호환성을 유지하기 위해 설계되었다. 이를 통해 개발자는 특정 DBMS에 종속되지 않고, 이식성과..
영속성 컨텍스트란?JPA에서 영속성 컨텍스트는 엔티티 객체를 영속 상태(Persistent State)로 유지하고, 데이터베이스와 동기화를 담당한다. 이를 통해 데이터베이스 작업을 효율적으로 처리하고, 개발자가 직접 SQL을 작성하지 않아도 된다. 영속성 컨텍스트의 주요 역할엔티티 관리: 엔티티의 생명주기를 관리한다. (비영속, 영속, 준영속, 삭제)변경 감지: 엔티티 객체의 상태 변경을 감지하고, 필요한 경우 데이터베이스에 자동으로 반영한다.캐싱: 동일한 엔티티를 여러 번 조회해도 동일한 인스턴스를 반환하여, 성능을 최적화한다.트랜잭션과의 연계: 트랜잭션 범위 내에서만 유효하며, 트랜잭션 종료 시 데이터를 플러시(Flush)하여 데이터베이스와 동기화한다. 영속성 컨텍스트의 동작 원리 JPA는 Enti..
Spring JPA에서 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)란? Spring JPA에서 데이터베이스를 조회할 때, 연관된 엔티티를 가져오는 방식에는 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)이라는 두 가지 전략이 있다. 이러한 로딩 전략은 데이터베이스 쿼리 효율성과 애플리케이션 성능에 큰 영향을 미치기 때문에 매우 중요하다. 1. 즉시 로딩 (Eager Loading) 즉시 로딩은 연관된 모든 엔티티를 한 번에 조회하는 방식이다. 부모 엔티티를 조회할 때, 연관된 자식 엔티티도 함께 로드되어 메모리에 적재된다.예를 들어, A 엔티티가 B 엔티티와 연관되어 있다면, A를 조회할 때 B 엔티티도 즉시 로드된다. 이렇게 하면 데이터베이스..
JPA에서 더티 체킹(Dirty Checking)이란? JPA의 더티 체킹(Dirty Checking)은 영속성 컨텍스트가 관리하는 엔티티의 상태를 자동으로 감지하고, 변경된 부분이 있다면 트랜잭션 커밋 시점에 데이터베이스에 반영하는 기능입니다. 이는 개발자가 직접 SQL을 작성하지 않아도 JPA가 엔티티의 변경을 감지하고 처리할 수 있도록 돕는다. 영속성 컨텍스트와 더티 체킹 JPA에서 엔티티는 영속성 컨텍스트에 의해 관리된다. 영속성 컨텍스트는 데이터베이스와 관련된 엔티티 객체의 상태를 관리하는 일종의 캐시(1차 캐시)라고 할 수 있다. 엔티티가 영속성 컨텍스트에 등록되면 영속 상태가 되고, 이때 영속 상태의 엔티티는 데이터베이스에 저장된 값과 연결되며, JPA가 그 상태를 추적한다. 더티 체킹의..
@GeneratedValue란? @GeneratedValue 어노테이션은 JPA(Java Persistence API)에서 엔티티의 기본 키를 자동으로 생성하는 전략을 지정할 때 사용된다. 이를 통해 개발자는 데이터베이스의 키 생성 방식을 간편하게 제어할 수 있다. 디폴트 전략은 GenerationType.AUTO이며, 이는 JPA 구현체가 적절한 생성 전략을 선택하도록 위임한다. Generation Type 옵션 @GeneratedValue는 아래 네 가지 GenerationType 옵션을 제공한다. 각각 데이터베이스의 특성과 요구사항에 따라 적합한 전략을 선택할 수 있다. 옵션특징GenerationType.AUTO- JPA 구현체(Hibernate 등)가 데이터베이스 방언에 따라 기본 키 생성 전략..