스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초

스프링 부트 핵심 가이드(장정우 지음) - 데이터베이스 연동 1: ORM(Object Relational Mapping) 특징, JPA(Java Persistence API)

개발학생 2025. 7. 18. 16:54
반응형

*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성  

 

[Java] 차근차근 Java 설치하기 (JDK17, Window 11)

자바 개발 도구 설치 방법에 대해서 알아보겠습니다. Java17은 LTS(Long Term Support : 장기 지원) 릴리즈로 1년 후까지 기술 지원 및 버그를 개선한 서비스를 제공받을 수 있습니다. 업데이트 버전을 꾸

yungenie.tistory.com

 

[Windows] Spring Tool Suite 4(STS 4) 다운로드 및 설치

STS란?Spring Tool Suite(STS)는 스프링 프로젝트를 생성하고, 개발할 수 있게 해주는 도구입니다. STS 설치 과정에 대해 설명드리겠습니다. 설치 파일 다운로드STS 공식 사이트에서 설치 파일을 다운로

priming.tistory.com

 

MySQL :: Download MySQL Community Server

Select Version: 9.3.0 Innovation 8.4.5 LTS 8.0.42 Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris mac

dev.mysql.com

  • Gradle

**STS에서 Gradle 프로젝트 생성한 과정 

*** 함께 보면 좋은 글

2025.07.10 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

 

스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

1. 스프링 프레임워크자바(Java) 기반 애플리케이션 프레임워크로, 엔터프라이즈급(기업 환경 대상 개발) 애플리케이션을 위한 다양한 기능 제공-> 오픈소스 경량급 애플리케이션 프레임워크로

keep-programming-study.tistory.com

2025.07.11 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

 

스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

1. 서버 간 통신마이크로서비스 아키텍처에서 한 서버가 다른 서버에 통신을 요청하는 것을 의미-> 한 대는 서버/다른 한 대는 클라이언트가 됨 가장 많이 사용되는 방식은 HTTP/HTTPS 방식(TCP/IP, SOA

keep-programming-study.tistory.com

2024.03.26 - [컴퓨터공학 공부/SQLD (SQL 전문가 가이드)] - SQLD 자격증 공부 데이터 모델링의 이해-엔터티, 속성(SQL 전문가가이드)

 

SQLD 자격증 공부 데이터 모델링의 이해-엔터티, 속성(SQL 전문가가이드)

*본 게시물은 2013년도 SQL 전문가 가이드 교재(일명 '노랭이')를 참고하여 공부하고 정리한 게시물입니다 1과목 데이터 모델링의 이해: 제1장 데이터 모델링의 이해 1. 엔터티 1) 정의 업무에서 관

keep-programming-study.tistory.com

2023.06.27 - [자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)] - JAVA/JSP 14. 데이터베이스 - 특징, 오라클 설치(Oracle Database 11gR2 Express Edition), 사용자 계정 생성 및 권한 설정

 

JAVA/JSP 14. 데이터베이스 - 특징, 오라클 설치(Oracle Database 11gR2 Express Edition), 사용자 계정 생성 및

1. 데이터베이스의 특징우리가 매일 PC나 스마트폰을 통해 접하는 거의 모든 웹 애플리케이션에서 사용함매일 업데이트되는 뉴스나 날씨 등의 정보는 데이터베이스가 없다면 클라이언트에 전달

keep-programming-study.tistory.com

 

 

1. ORM(Object Relational Mapping) 특징

  • 객체 관계 매핑을 의미
    -> 클래스의 속성과 DB 테이블의 컬럼을 서로 연결해서 데이터를 주고받을 수 있게 해주는 작업
  • 객체지향 언어(Java 등)에서 의미하는 객체(클래스)와 RDB(Relational Database)의 테이블을 자동으로 매핑(Mapping)
    -> 객체는 DB의 테이블과 매핑하기 위해 만들어진 것이 아니므로, RDB 테이블의 불일치와 제약사항을 해결해야 함
  • 쿼리문 작성이 아닌, 코드(메서드)로 데이터 조작  

ORM 도식화 - 애플리케이션의 클래스와 데이터베이스의 테이블을 매핑

1) 장점

(1) 데이터베이스 쿼리를 객체지향적으로 조작 가능 

  • 쿼리문을 작성하는 양이 현저히 줄어 개발 비용 감소
  • 객체지향적으로 데이터베이스에 접근하여, 코드 가독성 높임

(2) 재사용 및 유지보수의 편리성

  • ORM을 통해 매핑된 객체는 모두 독립적으로 작성되어 있어 재사용 용이
  • 객체들은 각 클래스로 나뉘어 있어 유지보수가 수월함

(3) 데이터베이스에 대한 종속성 감소

  • ORM을 통해 자동 생성된 SQL문은 객체를 기반으로 데이터베이스 테이블 관리
  • 데이터베이스 교체가 필요할 때 비교적 리스크 부담 적음

2) 단점

(1) ORM만으로 온전한 서비스를 구현하는 것의 한계

  • 복잡한 서비스의 경우, 쿼리 구현 없이 코드 구현이 어려움
  • 복잡한 쿼리를 정확한 설계 없이 ORM만으로 구성하면, 속도 저하 등의 성능 문제 발생

(2) 애플리케이션의 객체 관점-데이터베이스의 관계 관점 불일치

  • 세분성(Granularity): ORM의 자동 설계에 따라, 데이터베이스에 있는 테이블 수와 애플리케이션 엔티티 클래스 수가 달라짐
    -> 클래스가 테이블 수보다 많아짐 
  • 상속성(Inheritance): RDBMS(관계형 데이터베이스)에는 상속 개념이 없음
  • 식별성(Identity): RDBMS는 기본키(primary key)로 동일성을 정의하는데, 자바는 두 객체 값이 같아도 다르다고 판단
  • 연관성(Associations)
    : 객체지향 언어는 객체를 참조하여 방향성 있는 연관성을 나타내지만, RDBMS에서는 외래키(Foreign key)를 삽입하여 방향성 없는(양방향의 관계이기 때문) 연관성을 표현
  • 탐색(Navigation): 자바와 RDBMS가 어떤 값(객체)에 접근하는 방식이 다른 것
    -> 자바에서는 객체 참조같은 연결 수단을 활용(객체를 연결하고 연결하여 접근하는 그래프 형태)하는 반면,
        RDBMS에서는 쿼리를 최소화하고 조인(JOIN)을 통해 여러 테이블을 로드하고 값을 추출

2. JPA(Java Persistence API)

  • 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음(ORM 역할을 함)
  • 실제로 동작하는 것이 아닌, 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세
  • 내부적으로 JDBC를 사용하여, 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑
  • JPA 기반 구현체는 하이버네이트(Hibernate)/이클립스 링크(EclipseLink)/데이터 뉴클리어스(DataNucleus)가 있음
    -> 하이버네이트(Hibernate)가 가장 많이 사용됨 

1) Spring Data JPA

  • 스프링 부트에서는 하이버네이트(Hibernate)의 기능을 더욱 편하게 사용하도록 모듈화한 Spring Data JPA를 활용
    -> 하이버네이트에서 자주 사용하는 기능을 더 쉽게 사용할 수 있게 구현한 라이브러리
  • JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나
  • CRUD 처리에 필요한 인터페이스를 제공하며, 하이버네이트의 엔티티 매니저를 직접 다루지 않고 리포지토리를 정의해 사용

Spring Data JPA 도식화

2) 영속성 컨텍스트(Persistence Context)

  • 애플리케이션과 데이터베이스 사이에서 엔티티-레코드의 괴리를 해소하며, 객체를 보관함
  • 엔티티 객체가 영속성 컨텍스트에 들어오면, JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업 수행
    -> 영속 객체(Persistence Object): 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 것
  • 세션 단위의 생명주기를 가짐
    -> DB에 접근하기 위한 세션이 생성되면 만들어지고, 세션이 종료되면 없어짐

영속성 컨텍스트 도식화

3) 엔티티 매니저(Entity Manager)

  • 엔티티를 관리하는 객체로, 데이터베이스에 접근해서 CRUD 작업 수행
  • Spring Data JPA를 사용하면 리포지토리를 사용해서 데이터베이스에 접근
  • 실제 내부 구현체 SimpleJpaRepository가 리포지토리에서 사용하는 것을 알 수 있음

*엔티티 매니저를 생성하는 엔티티 매니저 팩토리(EntityManagerFactory)

  • DB에 대응하는 객체로, 스프링 부트의 자동 설정 기능으로 application.properties에서 작성한 최소한의 설정만으로도 동작
  • 하이버네이트에서는 persistence.xml 설정 파일을 구성해야 생성/사용 가능

4) 엔티티의 생명주기(영속성 컨텍스트에서 아래와 같은 4가지 상태로 구분)

비영속(New) 영속성 컨텍스트에 추가되지 않은, 엔티티 객체의 상태
영속(Managed) 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태
준영속(Detached) 영속성 컨텍스트에 의해 관리되던 엔티티 객체가 컨텍스트와 분리된 상태
삭제(Removed) 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태
반응형