분류 전체보기 163

[Spring] 스프링 컨테이너 (Spring Container)

스프링 컨테이너 (Spring Container) 스프링 컨테이너는 스프링 빈들을 생성 및 관리하며, 스프링 빈 간의 의존관계 주입을 대신 해 준다. 스프링 컨테이너는 스프링 코드 내에서 ApplicationContext 인터페이스의 구현체로 표현된다. //Configuration 클래스로 스프링 컨테이너 생성 ApplicationContext acConfig = new AnnotationConfigApplicationContext(AppConfig.class); //XML 파일로 스프링 컨테이너 생성 ApplicationContext acXml = new GenericXmlApplicationContext("appconfig.xml"); 다음 예시 코드를 통해 스프링 컨테이너에서 빈이 등록되고 의존관계..

JAVA/Spring 2021.04.01

[Spring] 스프링 빈 (Spring Bean)

스프링 빈 (Spring Bean) 스프링 컨테이너가 관리하는 자바 객체를 우리는 빈(Bean)이라 한다. 빈은 Spring IOC 컨테이너에 의해 인스턴스화, 관리 및 생성되며, 애플리케이션의 핵심을 이루는 객체이다. ※ IOC : 제어의 역전 (Inversion of Control) 빈의 등록 우리는 두 가지 방법으로 빈을 스프링 컨테이너에 등록할 수 있다. 설정 메타 데이터(XML) 사용한 등록 XML을 이용한 방법은 컴파일 없이 빈 설정 정보를 변경할 수 있다는 장점이 있다. XML 설정 파일을 넘기는 데 GenericXmlApplicationContext 를 사용한다. //appConfig.xml 파일을 통해 스프링 컨테이너에 빈 설정 정보 전달 ApplicationContext ac = new..

JAVA/Spring 2021.04.01

[JPA] 영속성 컨텍스트 (Persistence Context) - (3)

플러시 (Flush) 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 기능을 한다. 트랜잭션이 커밋될 때, 플러시가 동작해 쓰기 지연 SQL 저장소에 쌓아뒀던 쿼리들을 데이터베이스에 전송한다. 즉, 영속성 컨텍스트와 데이터베이스를 동기화하는 작업이다. ※ 플러시가 발생해도 1차 캐시 안의 내용은 삭제되지 않는다. 직접 호출 (em.flush()) //영속 상태인 member 엔티티 Member member = new Member(200L, "A"); em.persist(member); //플러시를 직접 호출하면 쿼리가 플러시 호출 시점에 전송됨 em.flush(); transaction.commit(); JPQL 쿼리 실행 시 호출 JPQL 쿼리를 실행하는 다음 코드를 보자. em.pers..

JAVA/JPA 2021.03.31

[JPA] 영속성 컨텍스트 (Persistence Context) - (2)

1차 캐시 (First Level Cache) 1차 캐시는 영속성 컨텍스트 내에 존재하는 캐시이다. 영속성 컨텍스트에 엔티티가 저장되는 순간, 1차 캐시에 다음과 같은 형태로 저장된다. { key : @Id로 선언한 필드 값, value : 해당 엔티티 } find()가 호출되는 순간, EntityManager 내부의 이 1차 캐시를 먼저 탐색하게 된다. 이 때, 찾는 엔티티를 발견했다면 즉시 반환한다. 만약 1차 캐시에 해당 엔티티가 존재하지 않는다면, 데이터베이스에서 조회한다. ※ 1차 캐시는 Global하지 않다. 즉, 영속성 컨텍스트끼리 이 1차 캐시를 공유하지 않는다. 객체의 동일성 보장 영속성 컨텍스트는 영속 상태의 엔티티들에 대한 동일성(Identity)을 보장한다. 1차 캐시에 의해, me..

JAVA/JPA 2021.03.30

[JPA] 영속성 컨텍스트 (Persistence Context) - (1)

영속성 컨텍스트 (Persistence Context) 영속성 컨텍스트는 JPA에서 매우 중요한 개념으로, 엔티티를 영구 저장하는 환경이라는 의미를 가진다. 영속성 컨텍스트는 논리적인 개념이다. 즉 실제로 존재하는 개념이 아니며, 우리는 코드 내에서 영속성 컨텍스트에 EntityManager을 통해 접근한다. JPA는 매 요청마다 EntityManagerFactory에서 EntityManager를 생성한다. 이렇게 생성된 EntityManager는 내부적으로 DB 커넥션 풀을 사용해 데이터베이스와 연동된다. 스프링에서 EntityManager를 주입받아 사용할 때, 같은 트랜잭션 범위의 EntityManager들은 동일 영속성 컨텍스트에 접근한다. 엔티티의 생명주기 (Entity Lifecycle) 비영..

JAVA/JPA 2021.03.30

[백준] 19237 어른 상어

문제 링크 : www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 문제 유형 구현, 시뮬레이션 이전 문제인 [백준] 17822 원판 돌리기 와 같이, 상어를 클래스 형태로 구현한다. 동일 칸에서는 작은 상어가 반드시 남게 되므로, 상어의 이동은 번호가 높은 순으로 진행한다. 이렇게 하면 따로 예외 처리를 하지 않고도 덮어쓰기 개념으로 겹치는 상어에 대한 처리를 할 수 있게 된다. 이 풀이에서는 상어의 냄새가 어떤 상어..

[백준] 17822 원판 돌리기

문제 링크 : www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 문제 유형 구현, 시뮬레이션 이런 시뮬레이션 형태의 구현 문제는, 어떠한 동작을 수행하는 매개체를 클래스 형태로 구현하면 비교적 깔끔하게 구현이 가능하다. 이 문제에서는 각 원판을 disk라는 클래스로 정의하고, 이 클래스 내부에 회전 및 인접 값 제거 메소드를 구현했다. 각 원판의 숫자들은 deque 형태로 저장해 회전 구현을 쉽게 할 수 있도록 했고, 인접 값 참조를 쉽게 할 ..

[JPA] 상속관계 매핑

상속관계 매핑 객체는 상속관계가 존재하지만, 관계형 데이터베이스는 대부분 상속 관계가 존재하지 않는다. 하지만 관계형 데이터베이스의 슈퍼/서브타입 모델링 기법이 객체의 상속 관계와 꽤 유사하다. 우리는 이를 이용해 객체의 상속 구조를 매핑할 수 있다. 상속 관계를 매핑하는 방법은 다음과 같다. @Entity @Inheritance(strategy = InheritanceType.XXX) // 상속전략 선택 public class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private int price; } @Entity public class Album extends..

JAVA/JPA 2021.03.30

[데이터베이스] 정규화 : 1NF, 2NF, 3NF, BCNF

데이터베이스 정규화 (Normalization) 앞선 포스팅에서 데이터베이스의 잘못된 설계로 발생하는 이상(Anomaly)과, 함수적 종속에 대해 알아보았다. [데이터베이스] 정규화 : 이상(Anomaly), 함수적 종속성 (Functional Depenency) 데이터베이스 이상 (Anomaly) 관계형 데이터베이스의 잘못된 설계에서 발생하는 데이터 중복으로 인해 발생하는 부작용을 이상(Anomaly)이라 한다. 이상 현상의 종류를 회원의 정보를 저장하는 예시 4legs-study.tistory.com 데이터 중복으로 발생하는 이상 현상을 제거하기 위해서는, 데이터베이스의 테이블을 올바르게 재구성해야 할 것이다. 이처럼 데이터베이스 설계 단계에서 중복이 최소화되도록 구조화하는 과정을 정규화(Normal..

데이터베이스 2021.03.25

[데이터베이스] 정규화 : 이상(Anomaly), 함수적 종속성 (Functional Depenency)

데이터베이스 이상 (Anomaly) 관계형 데이터베이스의 잘못된 설계에서 발생하는 데이터 중복으로 인해 발생하는 부작용을 이상(Anomaly)이라 한다. 이상 현상의 종류를 회원의 정보를 저장하는 예시 테이블을 보며 알아보자. ID NAME ORDER_ID SHIPMENT_ID MEMBERSHIP 0001 Lee 18254382 46257892 True 0002 Kim 18254383 37282462 False 0003 Park 18254384 24235423 False 0003 Park 18254385 68872151 False 0003 Park 18254386 68753212 False 0004 Choi 18254387 78951231 True 위 테이블의 기본 키는 ID + ORDER_ID 이다. ..

데이터베이스 2021.03.25