Spring (22) 썸네일형 리스트형 기본키 매핑 기본 키는 DB에서 특정 레코드를 유일하게 식별하기 위해 사용됩니다. 기본 키(Primary Key)는 테이블에서 각 레코드를 식별하는 데 사용되고 테이블의 각 레코드에는 기본 키 값이 반드시 존재해야 합니다. 다시 말해 기본 키는 테이블에 존재하는 수많은 데이터들을 구별할 수 있는 유일한 기준이 되는 속성이 됩니다. 기본 키는 null이 아니고 유일해야 하며 변하지 않아야 합니다. 따라서 엔티티를 DB 테이블에 매핑할 때 엔티티 클래스에 필수적으로 기본 키 값을 설정해야 합니다. 기본 키 값을 설정하는 방법은 직접 할당과 자동 생성으로 나뉩니다. @Id 애노테이션만 사용한다면 직접 할당 방식으로 개발자가 엔티티의 기본 키 값을 직접 세팅해야 합니다. 직접 할당과 달리 자동 생성 방식은 @Id와 @Gen.. 영속성 컨텍스트 플러시 플러시는 영속성 컨텍스트의 변경 내용을 DB에 반영합니다. 보통 DB 트랜잭션이 커밋될 때 영속성 컨텍스트에서 플러시가 자동으로 일어납니다. 영속성 컨텍스트에서 플러시가 발생되면 엔티티의 변경을 감지하고 수정된 엔티티가 있다면 UPDATE SQL을 쓰기 지연 SQL 저장소에 저장합니다. 이후에 쓰기 지연 SQL 저장소에 저장된 쿼리(등록, 수정, 삭제 쿼리)를 DB에 전달합니다. 영속성 컨텍스트가 플러시 되었다고 해서 영속성 컨텍스트의 1차 캐시가 지워지지 않습니다. 플러시는 쓰기 지연 SQL 저장소에 있는 쿼리들을 DB에 반영되는 과정입니다. 아래와 같은 방법으로 영속성 컨텍스트를 플러시 할 수 있습니다.em.flush() : 플러시를 직접 호출하는 방법입니다.트랜잭션 커밋 : 플러시가 자동으로 호출.. 영속성 컨텍스트 객체와 관계형 데이터베이스를 매핑하는 것과 영속성 컨텍스트의 개념은 JPA에서 가장 중요한 두 가지입니다. 실제 JPA가 내부에서 어떻게 동작하는지 알기 위해서는 영속성 컨텍스트를 이해해야 합니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻으로 엔티티를 저장하고 관리합니다. 또한 1차 캐시, 동일성 보장, 트랜잭션을 지원하는 쓰기 지연, 변경 감지, 지연 로딩 기능을 제공합니다. 영속성 컨텍스트가 제공하는 기능을 제공하기 전에 영속성 컨텍스트에 접근하도록 도와주는 엔티티 매니저 팩토리와 엔티티 매니저에 대해 살펴봅시다. EntityManagerFactory & EntityManager 엔티티 매니저 팩토리는 DB당 하나만 생성하여 애플리케이션 전체에서 공유합니다. 위 그림처럼 엔티티 매니저 .. JPA가 등장한 배경 보통을 개발을 하면 객체를 만들고 그 객체를 관계형 DB에 보관하는 일이 많습니다. 이 과정에서 SQL 중심적인 개발이 생겨나고 개발자는 객체와 DB 테이블 사이의 SQL 매퍼와 같은 반복적인 CRUD 작업을 해야 했습니다. 심지어 객체와 관계형 DB 테이블 사이에 패러다임 불일치로 반복적인 SQL을 개발자가 직접 작성하여 그 불일치를 해소해야 했습니다. 예를 들어 Album 객체를 DB에 저장하기 위해서는 객체를 생성하고 INSERT 쿼리를 직접 작성해야 합니다. 만약 Album 객체가 Item 객체를 부모 클래스로 두고 있다면, Album 객체와 함께 Item 객체의 INSERT 쿼리도 작성해야 합니다. Album을 조회할 때는 더 복잡합니다. 물론 DB 테이블끼리 상관관계를 가지면 너무 복잡하기 때.. 싱글톤 컨테이너 싱글톤 컨테이너싱글톤 패턴은 안티 패턴이고 피해야 할 패턴이라는 이야기를 들어본 적 있을 겁니다. 하지만 스프링 컨테이너는 스프링 빈을 기본적으로 싱글톤으로 관리합니다. 스프링을 사용하는 환경은 많은 클라이언트의 요청을 받아내는 환경입니다. 이런 환경에서 클라이언트의 요청 하나하나에 새로운 객체를 생성한다면 메모리가 심각하게 낭비됩니다.따라서 스프링에서는 스프링 빈을 싱글톤으로 관리해서 수많은 클라이언트 요청에 같은 메모리 주소값을 리턴합니다. 아래 그림은 싱글톤 스프링 컨테이너의 동작 방식입니다. 스프링 컨테이너 덕분에 클라이언트 요청이 올 때마다 객체를 생성하지 않고 최초에 만들어진 스프링 빈을 공유하게 됩니다. 개발자가 직접 싱글톤 패턴을 구현하지 않아도 스프링 컨테이너가 자동으로 스프링 빈을 싱.. 스프링 빈 조회 스프링 빈 조회스프링 컨테이너에 스프링 빈을 등록했다면 조회할 수도 있습니다. 스프링 컨테이너에서 스프링 빈을 조회하는 가장 기본적인 방법은 getBean(빈이름, 타입) 또는 getBean(타입) 함수를 사용하는 것입니다. 만약 조회 대상 스프링 빈이 없다면 NoSuchBeanDefinitionException 예외를 발생합니다. 먼저 스프링 컨테이너에 등록된 모든 스프링 빈을 조회하는 코드를 살펴봅시다.AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);@Test @DisplayName("모든 빈 출력하기") void findAllBean() { // 스프링에 등록된 모든 빈.. 스프링 컨테이너와 스프링 빈 스프링 컨테이너기존에는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만, 이제부터는 스프링 컨테이너를 통해서 사용합니다. 스프링 컨테이너는 스프링에서 자바 객체인 스프링 빈을 관리하는 공간입니다. 또한 스프링 빈끼의 의존 관계도 스프링 컨테이너가 런타임 시점에 관리합니다. 다시 말해 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(생성, 관리, 제거 등)하며, 생성된 빈에게 추가 기능도 제공합니다. 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용합니다.여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록합니다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 합니다. 스프링 빈에 등록되는 빈.. 스프링 핵심 원리 이해 - 객체 지향 원리 적용 이 글은 김영한 님의 스프링 핵심 원리 - 기본 편 강의를 참고한 글입니다.https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 핵심 원리 - 기본편 강의 - 인프런www.inflearn.com 스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보www.inflearn.com 역할과 구현객체 지향 프로그램을 설계할 때 역할과 구.. 이전 1 2 3 다음