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에 종속되지 않고, 이식성과..
IT
영속성 컨텍스트란?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 등)가 데이터베이스 방언에 따라 기본 키 생성 전략..

개요 @Schema 어노테이션은 Springdoc OpenAPI와 같은 도구에서 사용하는 어노테이션으로, Swagger UI 또는 OpenAPI 문서에서 데이터 모델(클래스, 필드 등)의 메타데이터를 설명하는 데 사용된다. 주로 애플리케이션의 API 스펙을 정의하고 문서화할 때 사용된다. 이 어노테이션은 클래스나 필드에 대한 설명, 예시 값, 기본 값 등을 지정할 수 있게 해주며, API 문서화를 더욱 명확하게 만들 수 있다는 장점을 가지고 있다. 사용 예시 :import io.swagger.v3.oas.annotations.media.Schema;@Schema(description = "사용자 정보를 담고 있는 클래스")public class User { @Schema(description ..

Lombok에서 제공하는 어노테이션 중 하나이며, 기본 생성자(매개변수가 없는 생성자)를 자동으로 생성해준다. Lombok을 사용하면 코드를 간결하게 만들 수 있기 때문에 많이 사용한다.import lombok.NoArgsConstructor;@NoArgsConstructorpublic class User { private String name; private int age;} 코드에서 @NoArgsConstructor 어노테이션을 사용하면 컴파일 시점에 다음과 같은 기본 생성자를 자동으로 생성해준다.public User(){ // 아무런 파라미터가 없는 기본 생성자) @NoArgsConstructor 에는 access라는 추가 옵션이 있는데 public, protected, priv..

리눅스 서버를 사용하다보면 할당받은 메모리가 부족한 경우가 많다. 할당된 메모리를 초과할 경우 서버가 다운 될 수 있다는 치명적인 문제를 가지고 있다. 이는 Swap Memory로 어느정도 해결할 수 있다. Swap Memory 은 시스템의 RAM이 부족할 때 하드디스크의 공간을 가상 메모리로 대체하여 사용하는 것을 말한다. 실제 메모리보다는 속도가 느리지만, 시스템이 다운되거나 장애를 유발을 방지할 수 있다는 장점이 있다. 일반적으로 기본 할당받은 메모리의 1.5 ~ 2배까지 설정 하는 것을 권장한다. Swap Memory를 사용하자 1. 서버의 기본 메모리 공간을 확인한다. $ df -h 2. free 명령어를 통해 현재 Swap Memory를 사용하고 있는지 확인한다. $ free 위 이미지 맨 아..