Spring

    EntityManagerFactory와 EntityManager

    EntityManagerFactory와 EntityManager

    엔티티 매니저 팩토리(Entity Manager Factory)는 말 그대로 엔티티 매니저(Entity Manager)를 만드는 공장이다. 이 공장을 만드는 비용은 아주 많이 든다. 그래서 1개만 만들어서 애플리케이션 전체에 공유하여 쓰도록 설계되어 있다. 하지만 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다. 엔티티 매니저 팩토리는 여러 쓰레드가 동시에 접근해도 안전하여 서로 다른 스레드 간 공유해도 문제가 없다. 엔티티 매니저는 여러 쓰레드가 동시 접근하면 동시성 문제가 발생하기에 쓰레드간 공유를 하면 안된다. 위 그림은 요청이 생길 때 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하여 동작하게 된다. 엔티티 매니저는 DB 연결이 필요한 시점까지 커넥션(conn)을 얻지 않는다. 그래서 ..

    JPA 구동 방식

    JPA 구동 방식

    JPA는 자바 애플리케이션과 JDBC API 사이에서 동작된다. 동작원리를 크게보면 다음과 같다. 개발자가 JPA에게 명령한다. JPA가 JDBC API 사용해서 SQL 호출 결과를 받아서 동작 🧐 여기서 JPA가 어떻게 구동되는지 좀 더 자세히 알아보자. 1. Persistence 클래스에서 META-INF/persistence.xml에서 설정 정보를 읽는다. 2. EntityManagerFactory를 만든다. JPA를 동작시키기 위한 기반 객체이기도 하고, JPA 구현체에 따라서 DB 커넥션 풀도 생성하므로 비용이 아주 크다. 따라서 EntityManagerFactory는 애플리케이션 전체에서 1번만 생성하고 공유해서 사용해야 한다. 3. EntityManager를 필요할때마다 생성하여 JPA를 동..

    hibernate.dialect 란?

    hibernate.dialect 란?

    🧐 Dialect란? JPA의 주요 특징인 "데이터베이스에 종속적이지 않다"를 쓰기위해 hibernate.dialect 를 쓴다. hibernate의 dialect로 데이터베이스 방언(언어, 사투리)을 설정할 수 있다. 서로 다른 데이터베이스 문법, 타입 등을 알아서 처리해주므로 개발자는 데이터베이스를 바꾸더라도 코드를 크게 바꾸지 않게 된다. 가변 문자 비교 MySQL : VARCHAR Oracle : VARCHAR2 문자열 자르는 함수 SQL 표준 : SUBSTRING() Oracle : SUBSTR() 이렇게 SQL 표준과 다르거나 특정 데이터베이스만의 고유 기능을 JPA에서는 방언(Dialect)라고 한다. 개발자는 JPA가 제공하는 표준 문법에 맞춰 사용하면 되므로, 특정 DB에 의존적인 SQL..

    JPA 소개 #2

    JPA 소개 #2

    🧐 ORM(Object Relational Mapping)이란? 객체와 관계형 데이터베이스를 자동으로 매핑(연결)해주는 것 패러다임의 불일치 문제를 해결 ( JPA소개#1 ) 자바 진영에도 여러가지 ORM 프레임워크가 있는데 그 중 하이버네이트 프레임워크가 가장 많이 사용된다. 대중적인 언어에는 대부분 ORM 기술 존재 🧐 JPA(Java Persistence API)란 무엇인가? 자바 진영의 ORM 기술 표준이다. 애플리케이션과 JDBC 사이에서 동작한다. 위 그림의 동작원리는 다음과 같다. 1. 개발자가 JPA에게 명령한다. 2. JPA가 JDBC API 사용해서 SQL 호출 3. 결과를 받아서 동작 🧐 객체를 저장하는 JPA 저장 동작원리를 예시로 알아보자 Member DAO에서 member 객체를..

    JPA 소개 #1

    JPA 소개 #1

    관계형 데이터베이스 = 대중적이고 안전한 데이터 저장소 자바로 개발하는 애플리케이션 대부분 관계형 데이터베이스 사용한다. DB 관리하려면 SQL을 사용해야 한다. 그래서 다음과 같은 원리로 사용하게 된다. JDBC API를 사용해 SQL을 DB에 전달하기에 개발자는 SQL을 다뤄야 한다. 🥲 SQL을 직접 사용할 때 발생하는 문제점 1. 반복 회원 조회 기능 → SQL 작성 회원 등록 기능 → SQL 작성 회원 수정기능 → SQL 작성 회원 삭제 기능 → SQL 작성 ....... → SQL 작성 이렇게 DB에 CRUD하거나 여러 테이블을 사용하려면 반복적이고 유사한 SQL과 JDBC API를 코드로 작성해야 한다. 2. SQL에 의존적 개발 회원 객체를 관리하는 MemberDAO 완성함. 그 후 회원의..

    JPA 란?

    🧐 JPA란? JPA는 자바 진영에서 만든 ORM(Object Relational Mapping) 기술 표준이다. 스프링 진영에서도 스프링 프레임워크 또는 스프링 데이터 JPA라는 기술로 JPA를 지원하며, 또한 전자정부 표준 프레임워크의 ORM 기술도 JPA를 사용한다. 🧐 그렇다면 JPA를 왜 쓰는 것인가? 옛날엔 JDBC API를 사용했기에 비즈니스 로직보다는 SQL과 JDBC API를 작성하는데 시간이 많이 쓰였다. 그러다가 Jdbc Template 같은 SQL 매퍼를 사용하면서 JDBC API 사용 코드를 줄였지만 그래도 CRUD용 SQL은 반복해서 작성했다. 그래서 데이터 중심의 모델로 프로젝트를 작성할 수 밖에 없었기에 자바 진영에서는 객체 모델링으로 만들고 싶어했다. 그렇게 나온 것이 객체..

    스프링부트 View 환경설정

    스프링부트 View 환경설정

    start.spring.io 에서 프로젝트를 생성할 때 Dependencies를 추가하는 곳을 보면 저렇게 Template Engines을 고르는 카테고리가 있다. 이 템플릿 엔진은 MVC 구조에서 V(View)를 담당하는 라이브러리이다. 저기서 스프링부트에서 쓸 템플릿 엔진을 선택하면 된다. jsp가 성능이나 이슈 등 있고, 스프링 프레임워크에서도 권장하지 않기 때문에 저 중에서 쓰면 된다. 🤔 View Template Engine이란? Controller가 model을 통해 전달받는 데이터를 이용해 동적인 웹페이지를 생성할 수 있도록 돕는 엔진이다. 현재 프로젝트를 만들고 실행하여 localhost:8080으로 접속하면 위처럼 뜰 것이다. 그럼 스프링부트에서 제공하는 Welcome Page기능을 사용..

    스프링부트 라이브러리 살펴보기

    스프링부트 라이브러리 살펴보기

    명령 프롬프트 창으로 라이브러리 확인하기 cmd 명령 프롬프트창에서 스프링 프로젝트 파일이 있는 경로로 들어간다. 그 후 gradlew dependencies 를 입력하면 의존 관계를 출력한다. IntelliJ로 라이브러리 확인하기 External Libraries는 가지고 온 라이브러리들이다. 우리가 Dependencies에 추가한 것 말고도 많은데 이것들은 기본적으로 빌드 툴(Maven, Gradle)이 의존관계를 다 관리해주기 때문이다. 즉, 우리가 설정한 라이브러리에 필요한 라이브러리들을 자동적으로 가지고 온다. Gradle 의존관계 보기 우측에 보면 Gradle 버튼이 있는데 누르면 Gradle의 Dependencies에서 의존 관계를 볼 수 있다. 이름 옆에 (*) 이 있는 것은 다른 곳에서 ..