*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성
- Windows11(윈도우 11) 환경
- 자바 JDK 17 버전 설치 https://yungenie.tistory.com/11
[Java] 차근차근 Java 설치하기 (JDK17, Window 11)
자바 개발 도구 설치 방법에 대해서 알아보겠습니다. Java17은 LTS(Long Term Support : 장기 지원) 릴리즈로 1년 후까지 기술 지원 및 버그를 개선한 서비스를 제공받을 수 있습니다. 업데이트 버전을 꾸
yungenie.tistory.com
- 스프링 부트 4.31.0 사용 - STS(Spring Tool Suite) 설치(Spring Tools for Eclipse - https://spring.io/tools)
=> https://priming.tistory.com/147 참고
[Windows] Spring Tool Suite 4(STS 4) 다운로드 및 설치
STS란?Spring Tool Suite(STS)는 스프링 프로젝트를 생성하고, 개발할 수 있게 해주는 도구입니다. STS 설치 과정에 대해 설명드리겠습니다. 설치 파일 다운로드STS 공식 사이트에서 설치 파일을 다운로
priming.tistory.com
- MySQL Community Server 8.0.42 설치 https://dev.mysql.com/downloads/mysql/
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 프로젝트 생성한 과정
*** 함께 보면 좋은 글
스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요
1. 스프링 프레임워크자바(Java) 기반 애플리케이션 프레임워크로, 엔터프라이즈급(기업 환경 대상 개발) 애플리케이션을 위한 다양한 기능 제공-> 오픈소스 경량급 애플리케이션 프레임워크로
keep-programming-study.tistory.com
스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식
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
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 테이블의 불일치와 제약사항을 해결해야 함 - 쿼리문 작성이 아닌, 코드(메서드)로 데이터 조작
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 처리에 필요한 인터페이스를 제공하며, 하이버네이트의 엔티티 매니저를 직접 다루지 않고 리포지토리를 정의해 사용
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) | 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태 |