nyximos.log

Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 00 - 개발 환경 구성, 서버 개발 과정 본문

Programming/Spring Boot

Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 00 - 개발 환경 구성, 서버 개발 과정

nyximos 2022. 7. 14. 10:40

Spring Boot + Gradle + MySQL + JPA + Thymeleaf  환경에서 간단한 CRUD 예제를 만들어보자

백엔드 로직을 쉽게 이해하고자 디자인은 최소한으로 하여 작업할 예정이다.

 

프로젝트 생성에 앞서 프로젝트 개발환경 소개

IntelliJ IDEA

Java 11 (Java 8)

Spring Boot

Gradle

JPA

Thymeleaf

Postman

 

 

Spring Boot

  • Spring 프레임워크의 서브 프로젝트
  • 스프링 프레임워크를 쉽게 사용할 수 있도록 도와주는 도구
  • Spring 처럼 많은 설정이 필요하지 않다. Spring boot 가 알아서 해준다.

장점

  • 라이브러리 의존성 간단히 관리 (Maven, Gradle)
  • Spring Boot가 라이브러리 인지해서 실행에 필요한 환경을 자동으로 설정
  • 라이브러리 버전 자동 관리
  • 테스트 환경
  • Tomcat 서버 내장 → main() 메소드 실행시 서버 구동
  • 운영 서버 배포시 프로젝트가 없어도 독립적으로 실행 가능한 JAR 파일로 패키징 가능

 

Gradle

  • Groovy 기반의 빌드 도구
  • Ant와 Maven의 단점을 보완
  • Java 문법과 유사하다.
  • Gradle 설치 없이도 Gradle Wrapper를 이용하여 빌드를 지원한다.
  • build.gradle : 빌드 구성 스크립트 → 의존성, 플러그인 설정 등 빌드에 대한 모든 기능을 정의한다.
  • task : 작업의 최소 단위
더보기
  • compile : 프로젝트 컴파일 과정에서 필요한 라이브러리
  • runtime : 프로젝트 실행 과정에서 필요한 라이브러리. ( compile 구성의 라이브러리 포함)
  • testCompile : 프로젝트의 테스트 컴파일 과정에서 필요한 라이브러리. (컴파일된 클래스들과 compile 구성의 라이브러리 포함)
  • testRuntime : 프로젝트의 테스트 실행 과정에서 필요한 라이브러리. (compile, runtime, testCompile 구성의 라이브러리 포함)

 

JPA

  • Java Persistent API
  • Hibernate를 비롯한 모든 ORM 프레임워크의 표준
  • Java 언어를 통해 데이터베이서와 같은 영속 계층을 처리하고자 하는 스펙

ORM

  • Object Relational Mapping
  • 객체지향 패러다임을 관계형 패러다임으로 매핑해주는 개념 (클래스를 테이블로)

JPA에 대해 더 알고싶다면 아래 링크로 🛸

https://nyximos.tistory.com/68 

 

[JPA] JPA 소개

자바 ORM 표준 JPA 프로그래밍 김영한 😵 SQL을 직접 다룰 때 발생하는 문제점 관계형 데이터베이스 = 데이터 저장소 자바로 개발하는 애플리케이션 = 대부분 관계형 데이터베이스 사용 SQL Structured

nyximos.tistory.com

 

Thymeleaf

  • View Template Engine
  • JSP처럼 서버에서 결과를 만들어서 브라우저로 전송한다.
  • JSP와 유사하게 ${ }을 별도의 처리 없이 이용할 수 있다.
  • Model에 담긴 객체를 화면에서 JS로 처리하기 편리하다.
  • 연산이나 포맷과 간련된 기능을 추가적인 개발 없이 지원한다.
  • 개발 도구를 이용할 때 .html 파일로 생성하는데 문제가 없고 별도의 확장자를 이용하지 않는다. 

 

IntelliJ IDEA 설치

해당 프로젝트에서는 IntelliJ IDEA를 사용하지만 이클립스와 STS 설치, 환경설정 후 진행해도 무관하다.

학생인 경우 졸업 전까지 유료인 Ultimate 버전을 무료로 사용 가능하니 구글에 인텔리제이 학생 인증이라고 검색해서 라이센스 발급 후 사용하세용

 

Java 11 설치

 

MySQL 설치

설치 시 비밀번호를 잘 기억하도록 하자.

https://www.mysql.com/downloads/

 

 

MariaDB를 설치해도 무관하다.

https://mariadb.org/download/?t=mariadb&p=mariadb&r=10.10.0 

 

Download MariaDB Server - MariaDB.org

REST API Release Schedule Reporting Bugs … Continue reading "Download MariaDB Server"

mariadb.org

 

Postman 설치

postman은 API 개발을 쉽게 도와주는 테스트 도구이다.

요청을 날리면 응답을 보여준다.

설치후 로그인 해놓자.

https://www.postman.com/downloads/

 

Download Postman | Get Started for Free

Try Postman for free! Join 20 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

 

 

 

 

 

서버 개발 과정

환경 구성을 했으니 이제 개발 과정을 알아보자.

서버 개발 과정은 DTO/VO, Controller, Service, DAO, SQL 를 각각 구현하는 과정이다.

구현 순서는 개발자가 임의로 변경할 수 있으며

개발하려는 서버 프로그램의 목적, 개발 언어, 규모 등의 이유로 통합하거나 세분화 할 수 있다.

 

DTO/VO 구현

데이터 교환을 위해 사용할 객체를 만드는 과정

 

Controller 구현

사용자의 요청에 적절한 서비스를 호출하여 그 결과를 사용자에게 반환하는 코드를 구현

 

Service 구현

사용자의 요청에 응답하기 위한 비즈니스 로직을 구현

 

DAO 구현

데이터 베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현

 

SQL 구현

데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성

SQL문은 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리한다.

 

 

 

이제 스프링 부트의 기본 구조를 알아보자.

1. 클라이언트Controller에게 요청(request)DTO 형식으로 보낸다.

2. Controller는 해당 request에 맞는 Service를 호출하면서 DTO를 보낸다.

3. Service에서 핵심 비즈니스 로직을 구현한다.

    DTOEntity 변환도 Service에서 처리한다.

    Repository에 데이터를 요청한다.

4. RepositoryDatabase에 직접 접근하여 Domain(Entity) 객체를 저장하고 관리한다.

5. Repository에서 가져온 데이터를 Service에 반환한다.

6. Service의 수행 결과를 Controller에 반환한다.
    응답(response)할 때 함께 보낼 데이터가 있다면 DTO로 변환하여 반환한다.

7. Controller의 수행 결과를 클라이언트에게 반환한다.

 

 

Controller

클라이언트의 요청을 처리한다.

Service의 비즈니스 로직을 호출한다.

Service에서 반환받은 값을 클라이언트에게 응답해준다.

 

Service

핵심 비즈니스 로직 구현

Controller에서 받아온 DTO를 가공하여 Repository로 보내거나,

Repository에서 받아온 데이터를 가공하여 DTO에 담아 컨트롤러로 반환한다.

 

Repository

데이터베이스에 접근하기 때문에 DAO(Data Access Obect)영역라고도 불린다.

도메인 객체를 DB에 저장하고 관리

Spring Data Jpa에서 제공하는 인터페이스

스프링 내부에서 자동으로 객체를 생성하고 실행

(기존 Hibernate는 모든 코드를 직접 구현하고 트랜잭션 처리를 했지만, Spring Data JPA는 자동으로 생성되는 코드를 이용하므로 단순 CRUD나 페이지 처리 등의 개발에 코드를 개발할 필요 🙅‍♀️)

 

Domain(Entity)

비즈니스 도메인 객체, 주로 데이터베이스에 저장하고 관리됨

DB와 가장 가까운 클래스

테이블과 1:1 매핑클래스의 필드는 테이블의 컬럼을 의미한다.

비즈니스 로직을 처리한다.

 

DTO Data Transfer Object

데이터를 교환할 때 사용하는 객체

엔티티에 직접 접근하지 않는다.

화면마다 DTO를 가진다.