연관관계의 이해
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런목표객체와 테이블의 연관관계를 이해한다.객체의 참조와 테이블의 외래키를 매핑한다.용어 이해방향 : 단방향, 양방향다중성 : 다대일(N:1) , 일대다(1:N) , 일대일(1:1), 다대다(N:M) 이해연관관계의 주인 : 객체 양방향 연관관계 관리가 필요.연관관계가 필요한 이유‘객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다’ - 조영호(객체지향의 사실과 오해)객체 하나, 테이블 하나로는 시스템을 만들 수 없다, 연관관계를 활용해야한다.단방향 연관관계객체를 테이블에 맞춘 모델링Member @Entity @Getter public class Member { @Id @GeneratedValue(stra..
엔티티 매핑
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런객체와 테이블 매핑@Entity@Entity가 붙은 클래스는 JPA가 관리, 엔티티라고 한다.JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수다.주의기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)final 클래스 , enum , interface, inner 클래스 사용이 불가능함.저장할 필드에 final 사용이 불가능함.@Table엔티티와 매핑할 테이블을 지정한다.데이터베이스 스키마 자동 생성DDL을 애플리케이션 실행 시점에서 자동 생성한다.테이블 중심 → 객체 중심데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성한다.이렇게 생성된 DDL은 개발 장비에서만 활용한다.생성된..
영속성 컨텍스트
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런영속성 컨텍스트JPA를 이해하는데 가장 중요한 용어, 논리적인 개념이다. (눈에 보이지 않는다)엔티티를 영구 저장하는 환경.EntityManager를 통해 영속성 컨텍스트에 접근한다EntityManager와 영속성 컨텍스트가 1:1 매핑을 한다.EntityManager.persist(entity)persist = 영속(지속하다)엔티티를 DB가 아니라 “영속성 컨텍스트”에 저장한다는 의미.엔티티의 생명주기비영속 (new/transient)transient - 과도 현상 : 정상 상태가 될 때까지의 사이에 생기는 현상.영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속 (managed)em.persist(member); 이때 바로 데이터 베이스..
JPA 기본
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런sql 중심 개발의 문제점.무한 반복, 지루한 코드객체의 CRUD에 대한 지속적으로 해야함java → sql , java ← sql악덕 기획자가.. 엔티티 필드를 추가, 삭제해달라고 하면 쿼리문 전체를 수정해야한다.객체와 관계형 데이터베이스의 차이개발자는 == sql mapper개발자는 데이터베이스에서 데이터를 조회 후 스프링 서버에서 객체로 바꾸고 , 클라이언트는 그 객체를 조회한다.따라서 개발자는 객체와 RDB 사이 중간에 mapper 역할을 한다 → 객체와 RDB가 어떤 차이가 있는지 알아야 둘을 연결을 하든 말든 할 것이다.차이상속연관관계데이터 타입 및 식별 방법1. 상속객체 상속 관계부모 클래스의 속성과 메서드를 자식 클래스가 이어..
빈 스코프
·
Study/Spring
강의 링크스프링 핵심 원리 - 기본편 강의 - 인프런빈 스코프Scope : 범위스프링이 지원하는 스코프싱글톤 : 기본 스코프, 스프링 컨테이너가 시작되고 종료될 때까지 유지되다 → 가장 넓은 범위의 스코프프로토타임 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여, 더는 관리하지 않음 (떤저버린다) → 매우 짧은 범위의 스코프프로토타입 스코프싱글톤 빈 요청과 비교싱글톤 빈 요청클라이언트가 싱글톤 스코프의 빈을 스프링 컨테이너에 요청한다.스프링 컨테이너는 본인이 관리하는 스프링 빈을 반환한다.이후에 같은 요청이 와도 스프링 컨테이너는 같은 객체 인스턴스의 빈을 반환한다.프로토 타입 빈요청 1프로토타입 스코프의 빈을 스프링 컨테이너에 요청한다.스프링 컨테이너는 이 시점에 프로토 타입 빈을..
빈 생명주기 콜백
·
Study/Spring
강의 링크스프링 핵심 원리 - 기본편 강의 - 인프런빈 생명주기 콜백 시작빈, 객체의 초기화 및 종료 작업을 지원 예시먼저 데이터베이스와 서버를 연결시켜 놓는 커넥션 풀을 설정하는 경우네트워크를 가지고 서버를 연결하기위해 소캣을 미리 열어놓는 것들에 경우,→ 애플리케이션 시작 시점에 작업되며 이것들을 안전하게 종료하는 것까지 스프링이 관리해준다.서버가 시작될 때 바로 외부 네트워크가 연결되고 종료될때 미리 종료되는 외부 네트워크가 있다고 가정.public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출= " + url); connect(); ..
의존관계 자동 주입
·
Study/Spring
강의 링크스프링 핵심 원리 - 기본편 강의 - 인프런다양한 의존관계 주입 방법생성자 주입수정자 주입(setter 주입)필드 주입일반 메서드 주입생성자 주입생성자 자동 생성 단축키 : Alt+Insert (Windows/Linux)생성자를 통해 의존관계를 주입받는 방법.생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.“불변, 필수” 의존관계에 사용된다. (값 세팅을 고정할 수 있음)@Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy ..
컴포넌트 스캔
·
Study/Spring
강의 링크스프링 핵심 원리 - 기본편 강의 - 인프런컴포넌트 스캔과 의존관계 자동 주입 시작하기스프링 빈을 일일이 빈에 등록하기 귀찮음.설정 정보가 커지면 누락하는 문제도 발생함.→ 따라서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 “컴포넌트 스캔”이라는 기능을 제공하고, 해당 등록된 bean을 자동으로 의존관계를 주입시키는 @Autowired라는 기능을 제공한다.@Compoent를 사용하게 되면 @Autowired를 사용하게 된다.@Componentpublic class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; @Autowired // ac.getBea..
싱글톤 컨테이너
·
Study/Spring
강의 링크스프링 핵심 원리 - 기본편 강의 - 인프런 웹 어플리케이션과 싱글톤웹 어플리케이션은 보통 여러 고객이 동시에 요청을 한다.appconfig는 고객이 요청할 때마다 new로 객체를 만들면 메모리 소모가 많아지게 된다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회 : 호출 할 때마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberSe..