본문 바로가기
ETC/쓰레기통

Spring Boot

by Tarake 2024. 8. 31.

스프링 부트 소개


스프링 부트(Spring Boot)는 자바(Java) 프로그래밍 언어를 사용하는 개발자들이 웹 애플리케이션을 쉽게 만들 수 있도록 돕는 프레임워크입니다. 스프링의 서브 프로젝트 중 하나 였으나 메인 프로젝트가 되어버린 케이스 입니다.

 

스프링 부트는 스프링(Spring) 프레임워크를 기반으로 하면서도, 개발자들이 애플리케이션을 더 빠르고 간편하게 만들 수 있도록 여러 가지 기능과 도구를 제공합니다.

 

스프링 부트의 주요 특징

  • 자동 설정 (Auto-Configuration): 스프링 부트는 애플리케이션의 설정을 자동으로 합니다. 즉 개발자가 많은 설정을 직접 하지 않아도, 스프링 부트가 필요한 기본 설정을 자동으로 해줍니다.
  • 내장 서버 (Embedded Server): 스프링 부트는 내장된 웹 서버(예: 톰캣, 제티 등)를 제공합니다. 그래서 애플리케이션을 실행할 때 별도의 서버를 설정할 필요 없이, 애플리케이션 자체로 서버 역할을 하면서 실행할 수 있습니다.

스프링 부트를 사용하면 복잡한 설정을 신경 쓰지 않고, 간편하게 강력한 웹 애플리케이션을 만들 수 있어 많은 자바 개발자들이 스프링 부트를 사용해서 효율적으로 애플리케이션을 개발하고 있습니다.

 

 

기존 개발에서 달라지는 점


서블릿에서 스프링으로 넘어가는 과정은 기존 코드를 재사용할 수 없다는 점 때문에 학습에 많은 시간이 드는 문제가 있습니다. 하지만 스프링에서 스프링 부트로 넘어가는 것은 코드와 개념이 그대로 유지되기 때문에 새로운 학습이 필요하지 않습니다.

 

스프링에서는 톰캣같은 설정을 다운로드해야 하지만 스프링 부트는 내장되어 있습니다.

 

 

스프링 부트의 프로젝트 생성 방식

2024.08.25 - [Web framework/Spring Boot] - 스프링 부트 시작하기

 

프로젝트의 실행

 스프링 부트의 프로젝트는 서버가 내장된 상태에서 만들어지기 때문에 WAS 설정이 필요없고 main()의 실행을 통해서 프로젝트를 실행합니다.

 

 

 

스프링 부트에서 웹 개발


컨트롤러와 Thymeleaf 만들기


컨트롤러를 만들기 위해 test 폴더 밑에 Controller라는 폴더를 생성합니다.

그리고 MainController.java 를 생성합니다.

클래스명 위에 @Controller 를 붙여 컨트롤러 임을 알리고 주소는 @GetMapping으로 받아서 처리합니다.

Tymeleaf로 처리를 위해서 msg를 Hello World라고 보냅니다. 보내는 위치는 return "index"로 나타내서 index 파일로 전달합니다.

위에서 보낸 메시지를 받기 위해서 템플릿 폴더에 index.html을 생성합니다. Tymeleaf를 사용하는 html 파일은 템플릿 폴더에 넣어야 합니다. CSS처럼 변하지 않는 파일은 static 폴더에 넣습니다.

index.html 파일에는 위에 코드와 같이 작성합니다. 타임리프를 사용하기 위해 네임스페이스 추가하는 것입니다.

 

실행 결과를 확인할 수 있습니다.

 

 

JSON 데이터 만들기

API 서버는 JSP나 Thymeleaf처럼 서버에서 화면과 관련된 내용을 만들어 내는 것이 아닌 데이터만 전송하는 방식입니다.

 

JSON은 Javascript Object Notation의 약자로 구조를 가진 데이터를 자바스크립트의 객체 표기법으로 표현한 문자열 입니다.

과거에는 XML을 주로 사용해서 데이터를 전송했지만 최근에는 JSON을 주로 사용합니다.

 

 

Thymeleaf


Thymeleaf 기초 문법


Thymeleaf를 이요하기 위해서는 네임스페이스(xmlns)에 Thymeleaf를 지정하는 것입니다.

<html xmlns:th="http://www.thymeleaf.org">

네임스페이스를 지정하면 th:와 같은 Thymeleaf의 모든 기능을 사용할 수 있습니다.

 

 

Thymeleaf 출력

Thmeleaf는 Model로 전달된 데이터를 출력하기 위해서 HTML 태그 내에 th: 로 시작하는 속성을 이용합니다.

model.addAttribute("msg", "hello");

 

<h1 th:text="${msg}"></h1>

 

주석 처리

작성 단계에서는 간단해 보여도 디버깅할 때 오류가 발생해도 찾기가 어렵습니다.

오류가 난 부분을 주석처리하기 위해서 주석처리를 합니다.

<!--/*  <h1 th:text="${msg}"></h1> */-->

 

변수 선언

임시로 변수를 선언해야 하는 상황이 오면 th:with 를 이용해서 처리할 수 있습니다.

<div th:with="num1 = ${10}, num2 = ${20}"></div>

 

 

반복문과 제어문 처리


반복문 처리는 크게 2가지 방법을 이용할 수 있습니다.

  • th:each를 적용하는 방법
  • <th:block>이라는 별도의 태그를 이용하는 방법
<ul>
    <li th:each="item : ${items}">
        <span th:text="${item}">Item</span>
    </li>
</ul>

<ul>
    <th:block th:each="student : ${students}">
        <th:block th:if="${student.age > 18}">
            <li>
                <span th:text="${student.name}">학생 이름</span> - 
                <span th:text="${student.age}">학생 나이</span>
            </li>
        </th:block>
    </th:block>
</ul>

 

 

Thymeleaf 링크 처리


@로 링크를 작성하면 됩니다.

<a th:href="@{/index}">Index</a>

 

링크의 쿼리 스트링 처리

링크를 key=value의 형태로 파리미터를 처리할 수 있습니다. 쿼리 스트링은 ()를 이요애서 파라미터의 이름과 값을 지정합니다.

<a th:href="@{/index(name='aaa')}">Index</a>

GET 방식으로 처리되는 링크에서 한글이나 공백 문자는 주의해야 합니다.

 

 

Spring Data JPA


Board 엔터티와 JpaRepository


JPA를 이용하는 개발의 핵심은 객체지향을 통해 영속 계층을 처리하는데 있습니다.

JPA를 이용해서 데이터에 해당하는 객체를 엔터티 객체로 다루고 JPA로 이를 데이터베이스와 연동해서 관리합니다.

 

엔터티는 PK를 가지는 자바의 객체입니다. 엔터티 객체는 고유의 식별을 위해 @Id를 사용해 객체를 구분하고 관리합니다.

 

Spring Data JPA는 스프링 관련 라이브러리입니다. 자동으로 객체를 생성하고 예외처리를 자동으로 하기 이해서 제공되는 인터페이스가 JpaReposiotry입니다.

 

엔터티 객체를 생성하기 위한 엔터티 클래스를 정의해야 합니다. 엔터티 클래스는 @Entity가 존재하고 객체를 구분하기 위한 @Id가 필요합니다.

엔터티 클래스는 반드시 @Entity를 작성해야 하며 @Id가 필요합니다.

  • IDENTITY : 데이터베이스에 위임 - auto_increment
  • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용 - @SequenceGenertaotr 필요
  • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용 @TableGenerator 필요
  • AUTO : 자동지정, 기본값

 

JpaRepository 인터페이스


JpaRepository라는 인터페이스를 이용하면 데이터베이스 관련 작업을 어느 정도 처리할 수 있습니다.

인터페이스를 상속하는 인터페이스를 선언하는 것만으로 CRUD와 페이징 처리가 모두 됩니다.

 

Insert 기능

데이터베이스에 insert를 실행하는 기능은 JpaRepository의 save()를 통해서 이루어집니다.

save()는 데이터가 존재하는지 찾아보고 해당 엔터티 객체가 없을 때 insert를 존재할 때는 update를 자동으로 실행합니다.

 

Select 기능

특정한 번호의 게시물을 조회하는 기능은 findById()를 이용해서 처리합니다.

 

Update 기능

Update 기능은 Insert 기능과 동일하게 save()를 통해서 처리됩니다.

동일한 @Id 값을 가지면 Update 기능을 실행합니다.

 

Delete 기능

delete는 @Id에 해당하는 값으로 deleteById()를 통해서 실행할 수 있습니다.

 

 

Pageable과 Page<E> 타입

페이징 처리는 Pageable이라는 타입의 객체를 구성해서 파라미터로 전달하면 됩니다.

Pageable은 인터페이스로 설계되어 있고 PageRequest.of()라는 기능을 이용해서 개발합니다.

  • PageRequest.of(페이지 번호, 사이즈) : 페이지 번호는 0부터
  • PageRequest.of(페이지 번호, 사이즈, Sort) : 정렬 조건 추가
  • PageRequest.of(페이지 번호, 사이즈, Sort.Direction 속성) : 정렬 방향과 여러 속성 지정

 

쿼리 메소드와 @Query

쿼리 메소드는 보통 SQL에서 사용하는 키워드와 칼럼들을 같이 결합해서 구성하면 그 자체가 JPA에서 사용하는 쿼리가 되는 기능입니다.

'ETC > 쓰레기통' 카테고리의 다른 글

데이터 모델링의 이해  (0) 2024.07.31