본문 바로가기

전체 게시물

(200)
[JPA] @Modifying 벌크 연산 벌크 연산이란?벌크 연산이란 DB에서 UPDATE, DELETE 시에 대량의 데이터를 한 번에 처리하기 위한 작업이다.JPA에서 벌크 연산이란 데이터 하나하나를 변경하는 것이 아닌, 여러 데이터에 한 번에 변경 쿼리를 날리는 것이다. @Modifying 애너테이션이란?@Modfying 애너테이션은 Spring Data JPA에서 데이터 변경 쿼리(INSERT, UPDATE, DELETE)를 사용할 때 사용된다. 주로 @Query 애너테이션을 사용하여 정의한 JPQL 또는 네이티브 쿼리가 INSERT, UPDATE, DELETE를 포함하는 경우 @Modifying을 함께 사용한다. 아래 코드는 오류가 발생하는 코드이다. 위에서 말했듯이 @Query를 사용하여 데이터 변경을 시도하면 @Modifying 애너..
[Spring] 스프링 빈 생명 주기 (Spring Bean Life Cycle) 애플리케이션 실행스프링 컨테이너 생성애플리케이션이 시작되면서 스프링 컨테이너가 생성된다. 스프링 컨테이너는 스프링 빈을 생성 및 관리한다.스프링 빈 등록스프링 빈은 기본적으로 싱글톤으로 생성되어 스프링 컨테이너에 등록된다.각 Bean의 인스턴스를 하나만 생성하고, 이를 모든 요청에 대해서 공유한다.@Configuration : 설정 클래스에 @Bean으로 등록된 객체를 스프링 빈으로 등록한다.@ComponentScan : @Component를 사용한 클래스를 스프링 빈으로 등록한다.의존성 주입생성된 빈들 간에 의존성을 주입한다. 필드 주입, 수정자 주입, 생성자 주입 방식이 사용된다.초기화 콜백추가적인 초기화 작업이 수행된다.ex. DB 연결 작업, 초기 데이터 로드@PostConstruct가 붙은 메서..
[Spring] 서블릿과 스프링의 차이점과 상호작용 스프링 컨테이너와 서블릿 컨테이어는 다른 목적으로 사용된다.스프링 컨테이너 : 애플리케이션의 비즈니스 로직을 관리하고, 객체의 생명주기와 의존성 관리를 담당서블릿 컨테이너 : 웹 요청과 응답(HTTP 프로토콜)을 처리하는 데 집중스프링 컨테이너는 IoC(Inversion of Control, 제어의 역전)을 기반으로 애플리케이션의 객체를 관리한다. IoC란 프로그램을 개발자가 아닌 프레임워크에 의해 관리되는 것을 의미한다.서블릿 컨테이너는 웹 서버와 통신을 하여 HTTP 요청을 받고, 서블릿을 사용하여 요청을 처리한 응답을 클라이언트로 전송한다. 스프링 컨테이너스프링 컨테이너는 애플리케이션을 실행시키기 위해 객체(빈) 생성, 초기화, 의존성 주입 등을 담당한다. 이는 개발자가 쉽게 객체 간의 의존성을 관..
[Database] RDBMS vs NoSQL 데이터베이스 : 컴퓨터에 전자 방식으로 구조화된 정보를 저장DBMS : 사용자와 데이터베이스 사이에 사용자의 요구에 따라 정보를 생성 및 관리하는 소프트웨어SQL : 관계형 데이터베이스에서 데이터를 관리하기 위한 프로그래밍 언어 1. RDBMSR(Relational, 관계) + DBMS = RDBMSRDBMS는 SQL을 사용하여 데이터를 저장한다. 데이터는 테이블 형태로 저장되며, 다른 테이블과의 관계를 통해 데이터를 관리한다. 이를 통해 데이터 정합성을 유지할 수 있다. 서로 다른 테이블 간의 관계를 맺기 위해 외래키(foreign key)를 사용하며, 이 외래키를 통해 테이블 간 조인이 가능하다. RDBMS 특징테이블 형태로 데이터를 저장한다.SQL(Structured Query Language) 언..
[Database] Scale-Out(수평적 확장)과 Scale-Up(수직적 확장) 운영하는 서버의 사용자가 많아질수록 서버에 부하가 증가하여 많은 용량과 성능을 요구하게 된다. 이를 해결하고자 서버를 추가로 설치하는 방법과 기존의 서버의 성능을 높이는 방법이 있다. 전자의 방법을 ‘Scale-Out’이라고 하고, 후자의 방법을 ‘Scale-Up’이라고 한다. RDBMS를 사용하는 경우 수직적 확장(Scale-Up)이 필요하고, NoSQL을 사용하는 경우 수평적 확장(Scale-Out)이 유리하다. 1. Scale-Out (수평적 확장)수평적 확장이란 서버를 추가로 설치하여, 여러 대의 서버가 요청을 처리하는 방법이다. 예를 들어, 기존 1대의 서버에서 추가로 3대의 서버를 설치하면 총 4대의 서버가 사용자의 요청을 처리하게 된다.이 방식은 서버로 전달되는 부하를 여러 대의 서버로 나누..
[Database] 데이터베이스 키 종류 수퍼키 (Super Key)유일성 O, 최소성 X[학생번호] → 학생을 유일하게 결정한다. → 수퍼키 만족[이름, 나이, 성별] → 중복되는 학생이 존재할 수 있다. → 수퍼키 만족 X[학생번호, 나이, 성별] → 학생을 유일하게 결정한다. → 수퍼키 만족학생번호만으로도 학생을 유일하게 결정할 수 있기 때문에 최소성을 만족하지 않는다. 후보키 (Candidate Key)유일성 O, 최소성 O[학생번호] → 학생을 유일하게 결정하면서, 최소의 키를 갖는다. → 후보키 만족[학생번호, 나이, 성별] → 학생번호만으로도 학생을 결정할 수 있으므로 최소성을 만족하지 않는다. → 후보키 X 기본키 (Primary Key)일성 O, 최소성 O튜플을 식별할 때 기준이 되는 반드시 필요한 키이다.특징NULl을 저장할 ..
[Database] 트랜잭션이란? 트랜잭션이란?데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 의미한다. 트랜잭션은 여러 개의 작업을 하나의 단위로 묵어서 처리하여, 데이터베이스의 일관성(Consistency)을 유지한다. 일관성을 유지한다는 것은 트랜잭션이 수행된 후 데이터베이스는 일관된 상태를 유지해야함을 의미한다. 트랜잭션 전후에 유효한 상태를 유지하는 것을 의미한다. 트랜잭션의 특징 - ACID트랜잭션은 아래 4가지 상태를 만족해야 한다.원자성 (Atomicity)일관성 ( Consistency)격리성 (Isolation)지속성 (Duration) 원자성 (Atomicity)원자성이란 하나의 트랜잭션이 갖는 모든 작업을 모두 성공하거나 실패해야 한다. 하나의 작업이라도 실패하게 된다면 해당 트랜잭션은 실패한 것이기 때..
[Spring] @Autowired 과정 @Autowired 주입 과정Spring Bean 생성애플리케이션이 시작되면서 스프링 컨테이너가 빈을 생성한다. 생성된 빈은 스프링 컨테이너에 의해 관리된다. → 이를 제어의 역전(IoC)라고 한다.의존성 탐색스프링 컨테이너는 @Autowired가 붙은 필드, 세터, 생성자를 탐색한다.의존성 주입2번을 통해 의존성 주입이 필요한 객체를 찾고, 찾은 객체의 클래스와 일치하는 인스턴스를 스프링 컨테이너에서 찾아서 주입한다. 이때, 찾은 객체의 클래스와 일치하는 Bean이 여러 개가 존재한다면 별도의 처리가 필요하다. → 아래에서 확인한다.주입 완료의존성 주입이 완료되면 초기화 콜백(@PostConstruct)이 호출된다. @Autowired를 통한 3가지 주입 방식생성자 주입@Servicepublic cla..