Framework/Springboot

[Springboot] Springboot 기본

웹개발자(진) 2024. 5. 8. 10:51
반응형
잡담

앞서서 Servlet을 통해서 TodoList를 만들면서 framework에 대한 기본적인 개념을 배웠는데 요즘은 복잡해서 잘 안 쓰고 Springboot를 많이 사용한다고 합니다. 어노테이션(annotation) '@'을 사용해서 좀더 심플하게 코드를 작성할 수 있다고 해서 기본적인 예제를 통해 Springboot를 배워 보도록 하겠습니다.


 

1. 프로젝트 생성

 

프로젝트 생성

File -> New -> Project...


기본설정


 

Spring Boot dependencies

"dependencies"란 프로젝트가 외부 라이브러리나 모듈을 사용하기 위해 의존하는 것들을 말합니다. 일반적으로 프로젝트의 빌드 시스템(예: Maven, Gradle)을 통해 관리됩니다. Spring Boot 프로젝트에서도 종종 사용되며, 프로젝트에 필요한 라이브러리와 모듈을 정의하는 데 사용됩니다.

  1. Spring Boot DevTools:
    • Spring Boot 애플리케이션의 개발을 보다 쉽게 만들어주는 도구입니다.
    • 코드 변경이 있을 때 애플리케이션을 자동으로 다시 시작하고, 리로드하는 등의 기능을 제공하여 개발자의 생산성을 향상합니다.
    • 개발 환경에서 빠른 반복과 테스트를 가능케 합니다.
  2. Lombok:
    • Lombok은 자바 언어를 위한 라이브러리로, 반복적이고 장황한 코드를 줄여주는 기능을 제공합니다.
    • 주로 Getter, Setter, Equals 및 HashCode와 같은 메서드를 생성하는 등의 작업을 자동화하여 코드를 간결하게 유지할 수 있도록 돕습니다.
  3. Spring Web:
    • Spring Web은 Spring Framework에서 제공하는 웹 개발 관련 모듈입니다.
    • Spring MVC를 포함하여 다양한 웹 개발 기능을 제공합니다.
    • HTTP 요청 및 응답 처리, RESTful 웹 서비스 구축, 웹 애플리케이션 개발에 필요한 기능을 포함합니다.
  4. Thymeleaf:
    • Thymeleaf는 서버 측 Java 템플릿 엔진으로, HTML, XML, JavaScript 등의 마크업 언어를 처리합니다.
    • 자연스러운 템플릿을 생성할 수 있으며, HTML 파일 내에서 동적 데이터를 쉽게 처리할 수 있도록 합니다.
    • Spring Boot의 주요 템플릿 엔진 중 하나로 사용됩니다.
  5. Spring Data JPA:
    • Spring Data JPA는 Spring 프레임워크와 JPA(Java Persistence API)를 통합하여 데이터 액세스 계층을 구현하는 데 도움을 줍니다.
    • JPA를 사용하여 데이터베이스에 접근하고 객체 지향적인 방식으로 데이터를 다룰 수 있도록 합니다.
    • 리포지토리 인터페이스를 통해 CRUD(Create, Read, Update, Delete) 기능을 제공하고, 쿼리 메서드를 사용하여 데이터 검색을 쉽게 할 수 있습니다.
  6. MariaDB Driver:
    • MariaDB는 MySQL을 기반으로 한 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
    • MariaDB Driver는 Java 언어에서 MariaDB에 연결하기 위한 JDBC 드라이버입니다.
    • Spring Boot 애플리케이션에서 MariaDB와의 통합을 위해 필요한 의존성입니다.

해당내용은 build.gradle에서 추가된 것을 확인할 수 있고, 체크 안 하고 넘어가도 나중에 따로 추가할 수 있습니다. 또한 필요에 따라서 변경도 가능합니다. 저 같은 경우 MariaDB를 사용할 것이라서 미리 dependencies에 추가했습니다. 그렇게 되면 실행할 때 DB가 연결되었는지 먼저 확인하기 때문에 DB정보를 주지 않으면 실행이 안됩니다.

아래 노란 줄은 test를 위해서 따로 추가한 dependencies입니다.

 


 

2. 기본 예제

간단한 예제를 통해 Springboot를 배워보도록 하겠습니다.

package org.zerock.b01.Controller;

import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
@Log4j2
public class SampleController {
    @GetMapping("/hello")
    public void hello(Model model) {
        log.info("hello......");
        model.addAttribute("msg","Hello World");
    }
}

해당 내용을 servlet과 비교해서 보면 더 쉽게 이해할 수 있습니다. 아래는 Servlet에서 같은 내용을 코딩한 내용입니다.


package org.zerock.demo3;

import java.io.*;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

@WebServlet(name = "helloServlet", value = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("msg", "Hello World");
        req.getRequestDispatcher("/hello.jsp").forward(req, resp);
    }
}

두 코드는 각각 서블릿과 스프링 MVC를 사용하여 "Hello World" 메시지를 처리하는 방식을 보여줍니다. 여기서 두 가지 접근 방식을 비교해 보겠습니다:

  1. Servlet 기반 코드 (HelloServlet):
    • 이 코드는 전통적인 서블릿을 사용하여 HTTP 요청을 처리합니다.
    • doGet() 메서드에서 HttpServletRequest를 통해 요청을 받고, HttpServletResponse를 통해 응답을 보냅니다.
    • @WebServlet 어노테이션을 사용하여 서블릿을 매핑합니다.
    • JSP 파일로 포워딩하여 화면을 표시합니다.
    • 전통적인 서블릿 방식으로 개발되었기 때문에 직접적인 HTTP 요청 및 응답 처리가 필요합니다.
  2. Spring MVC 기반 코드 (SampleController):
    • 이 코드는 스프링 프레임워크의 MVC 아키텍처를 사용하여 요청을 처리합니다.
    • @Controller 어노테이션을 사용하여 컨트롤러를 정의하고, @GetMapping 어노테이션을 사용하여 해당 URL에 매핑됩니다.
    • hello() 메서드는 요청을 처리하고, Model 객체를 통해 데이터를 뷰에 전달합니다.
    • 스프링이 제공하는 뷰 리졸버를 사용하여 뷰를 찾고, 해당하는 뷰에 모델을 전달합니다.(thymeleaf를 사용)
    • 스프링의 기능을 활용하여 더 간단하고 유연한 개발이 가능하며, 서블릿에 비해 코드가 간결해집니다.

두 가지 접근 방식 모두 "Hello World" 메시지를 처리하는 기능을 제공하지만, Spring MVC를 사용하는 방법은 코드가 더 간결하고 유연하며, 스프링의 다양한 기능을 활용할 수 있습니다.


주의해야 할 점이 Model을 Import 하는 데 있어서 Springframework를 찾아서 import 해주어야 합니다. 


 

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1 th:text="${msg}"></h1>
</body>
</html>
  • <html xmlns:th="http://www.thymeleaf.org"> : Thymeleaf 네임스페이스를 선언하여 Thymeleaf의 속성을 사용할 수 있도록 합니다.
  • <h1 th:text="${msg}"></h1>: 제목을 표시하는 <h1> 태그입니다. 여기서는 Thymeleaf의 th:text 속성을 사용하여 동적으로 데이터를 표시합니다. ${msg}는 컨트롤러에서 전달된 모델 속성의 값을 나타냅니다. Thymeleaf는 이 값을 표시할 때 해당 위치에 동적으로 삽입합니다.

 

출력물

 

 


 

3. DB연결정보

앞서 MariaDB Driver를 dependencies에 추가했기 때문에 DB연결을 위한 정보를 추가로 입력해 줄 필요가 있습니다.

resources / templates 밑에 보면 application.properties 파일이 있는 것을 확인하실 수 있습니다.

  • 데이터베이스 관련 설정입니다. MariaDB를 사용하고 있으며, 드라이버 클래스명, URL, 사용자 이름, 비밀번호 등을 설정하고 있습니다.
  • JPA를 사용하여 데이터베이스 스키마를 관리할 때, Hibernate의 DDL(Data Definition Language) 자동 생성 기능을 설정합니다. update로 설정되어 있으므로 애플리케이션 시작 시 엔티티 클래스의 변경 사항에 따라 자동으로 데이터베이스 스키마를 업데이트합니다.
  • Hibernate가 생성하는 SQL 문을 보기 쉬운 형식으로 출력할지 여부를 설정합니다.
  • JPA가 실행하는 SQL 쿼리를 콘솔에 출력할지 여부를 설정합니다. 설정된 경우, 실행되는 SQL 쿼리를 로그로 확인할 수 있습니다.

 

글을 마치며

Servlet과 비교해서 코드도 간단해지고 urlpattern을 통해 jsp가 아닌 html에 직접 연결되는 모습을 봤습니다. 아직까지는 Servlet을 자주 사용했다 보니 model부분도 그렇고 urlpattern부분도 그렇고 적응이 안 되지만  Springboot를 통해서 웹서버를 코딩할 수 있게 되는 날까지 열심히 달려보도록 하겠습니다. 감사합니다.

반응형

'Framework > Springboot' 카테고리의 다른 글

[Springboot] thymeleaf 조건문 if  (0) 2024.05.31
[Springboot] Session이란?  (0) 2024.05.30
[Springboot] Scope란?  (0) 2024.05.30
[Springboot] DB설정 / JPA  (0) 2024.05.09
[Springboot] Controller (get / post)  (0) 2024.05.09