728x90
반응형

Dev/Spring 13

연관관계 매핑(양방향)

✅ 양방향 매핑이란? 객체의 연관관계 중 하나인 양방향 매핑은, 사실상 단방향 매핑이 두번 이루어진 것이다. 즉, 개념적으로 두 개의 단방향 매핑을 추상적으로 양방향 매핑이라 칭하는 것이다. ✅ 양방향 연관관계 매핑의 필요성 테이블과 객체를 비교해보자. 테이블에서는 외래 키 하나로 두 테이블의 연관관계를 확인할 수 있다. 외래 키를 가지고 조인하면 두 테이블간 데이터의 결합과 접근성이 자유롭다. 즉, 외래 키 하나만으로 한 컬럼의 연관된 데이터를 획득할 수 있다. 하지만 객체에서는? 객체를 탐방하려면 참조가 쌍방으로 존재해야 한다. 참조가 양방향으로 존재해야 참조와 역참조가 가능한 구조라는 것이다. 이런 패러다임의 차이를 극복하기 위해 양방향 매핑을 한다. 하지만, 엔티티 연관관계를 설정할 때 우선 단방..

Dev/Spring 2023.11.21

연관관계 매핑(단방향)

✅ 연관관계 매핑의 필요성 모델링의 두 방식의 차이점을 비교하며 연관관계의 필요성을 알아보자. ✅ 테이블 중심 모델링 ![Untitled] 테이블 연관관계에 맞추어 객체를 모델링 해보자 🌱 엔티티 매핑 참조 대신에 외래키를 그대로 사용하여 다음과 같이 Member 와 Team 을 작성할 수 있다. @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private Long teamId; ... } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; ... } 🌱 엔티티 다루기 위와 같이 작성..

Dev/Spring 2023.11.21

변경 감지(Dirty Checking)

✅ 영속성 컨텍스트란 ‘엔티티를 영구히 저장하는 환경’이라는 뜻 EntityManager.persist(entity); 하지만 이는 논리적인 개념이다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있다. 아래의 예를 통해 영속성 컨텍스트 내에서 변경 감지(Dirty Checking)를 하는 법을 알아보자. ✅ 엔티티 수정 EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 단일 EntityManger를 생성한다. EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); // 트랜잭션 시작한다. (영속성 컨텍..

Dev/Spring 2023.11.20

JPA를 왜 쓸까?

✅ JPA? Java Persistence API 자바 진영의 ORM 기술의 표준 ORM이란?즉, 객체 관계 매핑이다.ORM이라는 프레임워크가 중간에서 매핑하는 것 대중적인 언어에서는 대부분 ORM기술이 존재하여, 데이터베이스와 어플리케이션 간의 인터페이스를 보장한다. (ex. python sqlalchemy) 객체는 객체대로 설계 / 관계형 데이터베이스는 관계형 데이터베이스대로 설계 Object-Relational Mapping ✅ JPA의 동작 어플리케이션과 JDBC 사이에서 동작한다. ✅ 표준 명세 JPA는 기본적으로 인터페이스의 모음이다. 이 JPA 표준 명세를 구현한 3가지 구현체가 존재한다. Hibernate EclipseLink DataNucleus ✅ JPA 사용 이유? SQL 중심적인 개..

Dev/Spring 2023.11.20

영속성 컨텍스트란

Overview JPA의 '영속성 컨텍스트'라는 논리적인 개념에 대해 다룬다. JPA의 2요소 JPA에서 가장 중요한 2가지라 하면, 객체와 RDBMS를 매핑하는 연관관계 영속성 컨텍스트 이 두가지가 있다. 웹 어플리케이션에서 사용자는 EntityManager를 할당받고, Database에 접근하기 위해 EntityManager로 엔티티를 영속성 컨텍스트에 집어 넣는다. 즉, 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다. 일반적으로 EntityManager.persist(entity);구문을 통해 엔티티는 영속성 컨텍스트에 들어간다. 엔티티의 생명주기 비영속 영속성 컨텍스트와 연관이 없는 상태. 그저 생성만 된 객체를 의미한다. 영속 영속성 컨텍스트가 관리하는 객체 준영속 영..

Dev/Spring 2023.11.20

준영속과 변경감지

Intro 본 포스팅에서는 준영속 엔티티를 수정하는 두 가지 방법에 대해 다룬다. 준영속 엔티티란? 엔티티의 생명주기에 따른 속성 분류는 다음과 같다. 비영속 영속성 컨텍스트와 연관이 없는 상태. 그저 생성만 된 객체를 의미한다. 영속 영속성 컨텍스트가 관리하는 객체 준영속 영속성 컨텍스트가 관리했던 객체. 즉, Database에 한번 들어갔다 나온 객체 (식별자 존재) 삭제 Database에서 삭제된 객체 위의 설명과 같이 준영속 엔티티란 영속성 컨텍스트가 더이상 관리하지 않는 객체를 의미한다. 하지만 데이터베이스에 한번 저장되었기에 식별자가 존재한다. 식별자를 이용해 임의의 새로운 객체를 생성한 경우에도 준영속 엔티티라 칭한다. 이런 준영속 엔티티의 값을 변경하는 방법에는 변경감지/병합 두 가지 방법..

Dev/Spring 2023.10.25

[스프링 핵심 원리] Bean Scope

Intro 본 카테고리는 Inflearn 김영한 강사님의 스프링 핵심 원리 강의를 수강하며 이해하고 학습한 내용을 정리한 내용으로 구성되어 있다. 본 포스팅에서는 빈 스코프, 즉 빈이 존재할 수 있는 다양한 범위를 예제들과 함께 다룬다. Bean Scope? 스프링은 빈에 대해 다음과 같은 다양한 스코프를 지원한다. 싱글톤 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. Ref 프로토타입 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 기본 값인 싱클톤 스코프는 항상 같은 인스턴스를 반환해주는 특징을 갖고 있다. 하지만 가벼운 기능 테스트 등에 사용하기 위해서는 매번 새로운 빈을 반환해야 하는 ..

Dev/Spring 2023.09.30

[스프링 핵심 원리] @Qualifier, @Primary와 Bean 우선순위

Intro 본 카테고리는 Inflearn 김영한 강사님의 스프링 핵심 원리 강의를 수강하며 이해하고 학습한 내용을 정리한 내용으로 구성되어 있다. 본 포스팅에서는 빈 조회 시 중복된 빈들에 대해 우선순위를 적용해 보다 쉽게 빈을 찾을 수 있는 방법에 대해 다룬다. @Autowired @Autowired 어노테이션은 기본적으로 Type으로 빈을 조회하여 DI한다. 이는 ac.getBean(DiscountPolicy.class) 와 유사하게 동작하는 것으로 볼 수 있다. 즉, interface인 DiscountPolocy.class로 조회 시, 해당 interface를 구현한 FixDiscountpolicy.class와 RateDiscountPolicy 두 개가 스프링 빈으로 모두 등록되어 있으면 문제가 발..

Dev/Spring 2023.09.26

[스프링 핵심 원리] ComponentScan, 의존 관계 자동주입

이전 포스팅 : [스프링 핵심 원리] Singleton Pattern of Spring Container Intro 본 카테고리는 Inflearn 김영한 강사님의 스프링 핵심 원리 강의를 수강하며 이해하고 학습한 내용을 정리한 내용으로 구성되어 있다. 본 포스팅에서는 Spring의 @ComponentScan을 이용한 스프링 빈 등록 방법, 그리고 @Autowired를 이용한 의존 관계 자동주입에 대해 다룬다. Previous Code (AppConfig.class) @Configuration // apply spring container public class AppConfig { @Bean public MemberService memberService() { System.out.println("call..

Dev/Spring 2023.09.26

[스프링 핵심 원리] Singleton Pattern of Spring Container

Intro 본 카테고리는 Inflearn 김영한 강사님의 스프링 핵심 원리 강의를 수강하며 이해하고 학습한 내용을 정리한 내용으로 구성되어 있다. 본 포스팅에서는 Spring Container의 Singleton Pattern에 대해 다룬다. Why Signleton Pattern? 대부분의 상용 web application은, 다수의 사용자가 동시에 요청을 하게 된다. 각 사용자가 service를 요청할 때마다, 새로운 service 객체를 만들어서 반환하게 된다. Spring이 없는 순수한 DI container는 이런 방식을 사용하기에 메모리의 낭비가 심해진다. 그러므로 해당 객체는 딱 1개만 생성되고, 이를 공유하는 체제로 하면 이를 해결할 수 있다. -> 이런 소프트웨어 디자인 패턴을 싱글톤 패..

Dev/Spring 2023.09.24
728x90
반응형