스프링/개념 16

JPA : 데이터 베이스와의 상호작용을 위한 특징

JPA 란 무엇인가?JPA(Java Persistence API)는 자바 애플리케이션에서 데이터베이스와 상호작용하기 위한 ORM(Object-Relational Mapping) 표준입니다.데이터베이스와의 상호작용을 위한 주요 특징 1. 쓰기 지연 (Write-Behind / Write-Delay)- 쓰기 지연은 JPA에서 성능을 최적화하기 위해 제공하는 기능입니다.- 엔터티(객체)에 대한 변경 사항이 즉시 데이터베이스에 반영되지 않고, 트랜잭션이 커밋될 때까지 변경 사항을 보류합니다.- 즉, 여러 변경 사항을 모아서 한 번에 데이터베이스에 반영하는 방식입니다. -> 데이터베이스와의 상호작용 횟수를 줄여 성능을 최적화할 수 있습니다. 2. 더티 체킹 (Dirty Checking)- 더티 체킹은 JPA가 객..

트랜잭션(Transaction)에 관하여

Transaction(트랜잭션)트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻합니다.트랜잭션의 특징원자성 (Atomicity)트랜잭션 내의 모든 명령이 모두 수행되어야 하며, 하나라도 수행 안될 경우 트랜잭션 모두 취소 => 롤백이 일어납니다.일관성 (Consistency)트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지합니다.격리성 (Isolation)둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없습니다.지속성 (Durability)트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 합니다.트랜잭션 연산 및 상태연산C..

IoC(Inversion Of Control) 컨테이너와 스프링 빈(Bean)

앞서 설명한 의존성 주입(Dependency Injection, DI)은 IoC의 한 형태입니다.  도대체 무슨 말일까요?  이를 이해하기 위해서는 IoC를 이해해야 합니다. IoCIoC란 흔히 "제어의 역전" 이라고 불립니다.객체의 생성과 소멸 등등을 책임졌던 개발자의 객체 제어권이 바뀌었다는 소리입니다. 일반적으로 개발자는 객체를 직접 생성하고, 메서드를 호출하여 코드를 작성하였습니다.하지만 IoC에서는 직접 객체를 생성하고 호출하는 것이 아니라, 외부에서 객체를 생성하거나 호출합니다. 이를 통해 개발자는 코드를 작성할 때 의존성을 최소화하고 더욱 유연하게 코드를 작성할 수 있습니다. 위의 질문을 해결하자면, Spring Framework는 IoC 컨테이너를 이용하여 의존성 관리 및 의존성 주입을 수..

의존성 주입(DI)과 주입 방식

의존성 주입의존성 주입은 흔히 DI(Dependency Injection) 라고 불립니다. 그렇다면 의존성 주입이란 도대체 뭘까요?-> 스프링 프레임워크에서, 의존성 주입은 직접 객체를 생성하거나 참조하지 않고 외부에서 주입받는 것을 의미합니다. 그렇다면 의존성 주입을 왜 사용할까요?1. 코드가 깔끔해진다.2. 의존성 주입을 통해 객체들이 효과적으로 분리된다.3. 코드의 재사용성과 유연성이 높아진다.의존성 주입 방법1. 생성자 주입 생성자를 통해 의존성을 주입하는 방법입니다. 스프링이 가장 권장하는 방법이기도 합니다.@Servicepublic class SimpleMovieLister { private final MovieFinder movieFinder; public SimpleMovieLi..

@Data 어노테이션에 관하여

기본적으로 @Data 어노테이션은 Lombok 라이브러리에서 제공하는 기능입니다.## @Data 어노테이션 특징1. Getter 메서드: 각 필드에 대해 getter 메서드를 생성합니다.2. Setter 메서드: 각 필드에 대해 setter 메서드를 생성합니다.3. toString() 메서드: 객체의 내용을 문자열로 변환하는 toString() 메서드를 생성합니다.4. equals() 메서드: 객체 간의 동등성을 비교하는 equals() 메서드를 생성합니다.5. hashCode() 메서드: 객체의 해시 코드를 반환하는 hashCode() 메서드를 생성합니다.6. RequiredArgsConstructor: final 또는 @NonNull로 선언된 필드에 대한 생성자를 자동으로 생성합니다.이렇게..

Session 과 Session Login

세션이란 무엇인가?세션은 서버에서 유지되는 사용자의 상태 정보를 의미합니다.왜 세션을 써야 하는가? - 인증의 필요성HTTP 프로토콜의 특징으로 인해 필요합니다.비연결성 : 클라이언트가 서버에 요청을 하고나서 그에 걸맞는 응답을 보낸 후 서버와 클라이언트의 연결을 끊는 방식입니다.무상태 : 커넥션이 끊는 순간 이후로 어떠한 상태정보를 유지하지않는 특성입니다.서버는 클라이언트 기억하지 못함 -> 계속 기억시켜 줌 :: 이것이 인증세션 장단점장점보안성:세션은 클라이언트 측에 민감한 데이터를 저장하지 않고, 서버에서만 데이터를 관리하므로 보안성이 높습니다. 쿠키에는 세션 ID만 저장되고, 실제 데이터는 서버에서만 접근 가능합니다..데이터 무결성:세션 ID가 서버에서 관리되기 때문에, 클라이언트가 데이터를 조작..

Cookie 와 Cookie Login

쿠키란 무엇인가?쿠키는 사용자의 웹 브라우저에 저장되는 작은 데이터 조각입니다.왜 쿠키를 써야 하는가? - 인증의 필요성HTTP 프로토콜의 특징으로 인해 필요합니다.비연결성 : 클라이언트가 서버에 요청을 하고나서 그에 걸맞는 응답을 보낸 후 서버와 클라이언트의 연결을 끊는 방식입니다.무상태 : 커넥션이 끊는 순간 이후로 어떠한 상태정보를 유지하지않는 특성입니다.서버는 클라이언트 기억하지 못함 -> 계속 기억시켜 줌 :: 이것이 인증쿠키의 장단점장점클라이언트 측에 상태 저장:클라이언트에서 상태 정보를 저장할 수 있어 서버 자원 절약이 가능합니다.자동 요청 전송:브라우저가 자동으로 쿠키를 서버에 포함시켜 전송하므로 개발자가 별도의 처리 없이 상태 유지 가능합니다.상태 유지:정보를 저장하여, 사용자가 웹사이트..

엔티티(Entity) - 왜 기본 생성자가 필요할까?

Entity - 기본 생성자 필요한 이유기본 생성자가 존재하지 않는다면 DB에서 조회해 온 값을 엔티티로 만들 때 객체 생성 자체가 실패합니다. -> 이유 : JPA가 엔티티를 인스턴스화할 때 리플렉션(Reflection)을 사용하기 때문입니다.리플랙션이란? - 자바 프로그래밍 언어에서 런타임에 클래스, 인터페이스, 메서드, 필드 등의 구조를 검사하고 조작할 수 있는 기능을 의미합니다.그래서 위와 같은 이유로 기본 생성자가 필요한데... 접근 제어자는 어떤 것을 써야 할까요?기본 생성자의 접근 제어자는 어떤 것을 써야 할까?private 사용했을 경우 : 리플랙션 사용할 때 접근 자체가 불가능합니다. -> JPA는 프록시 기술을 사용하는데 거기서 프록시 기술을 쓸 때, jpa hibernate가 객체를 ..

엔티티 매니저와 영속성 컨텍스트

엔티티 매니저란?엔티티를 저장, 수정, 조회, 삭제하는 등 엔티티와 관련된 모든 일을 처리합니다.말 그대로 엔티티를 관리하는 관리자 입니다.영속성 컨텍스트 사용(엔티티를 영구 저장하는 환경 이라는 뜻.) => 영속성 컨텍스트에 엔티티를 저장하거나 조회하고 보관합니다. 엔티티 매니저 팩토리와 엔티티 매니저데이터베이스 사용하는 애플리케이션은 일반적으로 하나의 엔티티 매니저 팩토리 생성. => 필요할 때마다 엔티티 매니저 펙토리에서 엔티티 매니저 생성중요 엔티티 매니저 팩토리는 여러 스레드가 동시에 공유해도 안전 BUT 엔티티 매니저는 여러 스레드 동시 접근 시 동시성 문제 발생엔티티의 생명주기비영속 : 영속성 컨텍스트와 관계가 없는 상태영속 : 영속성 컨텍스트에 저장된 상태 -> 엔티티가 영속성 컨텍스트에 ..

JPA 에 관하여 [자바 ORM 표준 JPA 프로그래밍]

JPA란 무엇인가?JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준입니다. 애플리케이션과 JDBC 사이에서 동작합니다.ORM이란 무엇인가?Object-Relational Mapping 이름 그대로 객체와 관계형 데이터 베이스 매핑한다는 뜻.ORM 프레임워크는 객체와 테이들블 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결합니다.ex) 개발자가 insert SQL문을 직접 작성하는 것이 아니라, 객체르 자바 컬렉션에 저장하듯 ORM 프레임워크에 저장하면 됨. -> ORM 프레임워크가 자동 매핑.자바 진영의 대표적인 ORM 프레임 워크 : HibernateJPA를 사용하는 하는 이유생산성지루하고 반복적인 CRUD용 SQL을 개발자가 직접 작성하지 않아도 됩니다.Create T..