728x90
반응형

Dev 15

연관관계 매핑(양방향)

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

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

docker image push to github

Intro 생성해놓은 docker image를 github package에 push하고, 이를 공유하는 방법에 대해 다룬다. Generate Token Github Settings > Developer Settings > Personal Access Token(Classic) 여기서 새로운 토큰을 만들어준다. Generate new token 원하는 이름과, repo, packages 권한을 체크한다. 그러고 완료하면 token이 생성되는데, 복사 해준다. 한번 노출되고 다시는 노출되지 않으므로 재사용할 것이라면 어딘가에 저장해두자. Docker login 생성한 토큰을 이용하여 도커에 깃허브 아이디로 로그인할 것이다. $ docker login ghcr.io -u 깃허브아이디도커 컨테이너 레지스트리 서..

Dev/Docker 2023.10.18

fastapi 배포 w/ docker

Intro 본 포스팅에서는 fastapi로 구축한 back-end server를 docker image를 통해 배포하는 방법에 대해 다룬다. Configuration Lang : python 3.11.4 Framwork : Fastapi Dir Structure 프로젝트는 python의 내장모듈인 venv를 이용하여 구축했으며, 대략적으로 아래와 같은 디렉토리 구조를 가진다. - bin - lib - src - api - database - schema - service main.py requirements requirements.txt 파일을 루트 디렉터리 (/src)에 위치시켜, 파일 빌드 시 필요한 의존성을 추가한다. uvicorn fastapi Dockerfile Dockerfile을 통해 doc..

Dev/Docker 2023.10.18

[스프링 핵심 원리] 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
728x90
반응형