Spring 정의, Spring Boot, Thymeleaf 문법

2023. 3. 21. 17:07WEB개발/TIL

반응형

Spring

: Java 기반의 웹 애플리케이션을 만들 수 있는 백엔드 프레임워크

 

특징

1. IoC(Inversion of Control, 제어 반전)

2. DI(Dependency Injection, 의존성 주입)

3. AOP(Aspect Object Programming, 관점 지향 프로그래밍)

4. POJO(Pain Old Java Object 방식)

 

IoC(Inversion of Control)

제어 반전

객체의 생성부터 소멸까지 개발자가 직접하는 것이 아닌 Spring Container가 대신해주는 것

제어권이 개발자가 아닌 IoC에 있으며, IoC가 개발자의 코드를 호출해 필요한 객체를 생성/소멸해 생명주기를 관리

 

DI(Dependency Injection)

의존성 주입

구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의되는 것

DI를 통해 IoC를 구현

코드 간의 재사용률을 높이고, 모듈 간의 결합도를 낮출 수 있음

 

AOP(Aspect Oriented Programming)

AOP 설명

관점지향 프로그래밍

어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 그것을 기준으로 각각 모듈화

공통 관심(로깅, 보안 등)을 따로 빼내어 객체별로 처리하는 것이 아닌 관점별로 외부에 접근해 사용하도록 만듦

핵심관심과 횡단관심으로 관심의 분리 실현

즉, 공통적인 기능을 종단간 삽입

DI는 의존성 주입, AOP는 기능의 주입

 

POJO(Plain Old Java Object)

단순한 자바 오브젝트

객체지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트

getter와 setter 같이 기본적인 기능만 가진 Java 오브젝트

 

 

 


Spring Boot

: Spring을 더 쉽게 이용하기 위한 도구

Spring을 이용할 시, 여러 세팅 작업들 필요

=> 번거로움 없이 빠르고 쉽게 사용할 수 있도록 만들어진 프레임워크

 

Spring Boot 사용하기

1. IntelliJ 설치

https://www.jetbrains.com/ko-kr/idea/download/#section=windows

자신의 운영체제에 맞는 exe 다운로드

 

2. Spring Boot 접속

https://start/spring.io/

spring boot setting

  • 세팅 후, generate 버튼 클릭
  • 다운 받은 압축파일 선택 후, git 폴더에 압축 풀기(선택)

 

 

 


IntelliJ 프로젝트

1. 프로젝트 실행

1.1. 압축 푼 파일 열기

1.2. ./src/main/java/group명.name명/name명Application 파일 선택

1.3. run icon 클릭하여(사진참고) 프로젝트 실행

project run

 

Spring MVC

spring MVC

Thymeleaf 템플릿

: 템플릿 엔진의 일종으로 HTML 태그에 속성을 추가해 페이지에 동적으로 값을 추가하거나 처리할 수 있게 도와주는 것

Spring Boot 사용 시, 권장되는 템플릿 엔진

 

Thymeleaf 템플릿 사용하기

<html lang="en"> 안에 xmlns:th="http://www.thymeleaf.org" 추가하기

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
..
</head>
..

참고)  Spring Boot 동작 환경

Spring Boot 동작 환경

 

Spring MVC & Thymealeaf 템플릿 사용 예시

 

1. 정적파일 생성

./src/main/resources/static에 index.html 파일 생성

<body>
    <h1>Hello!</h1>
    <span th:text="${msg}">message</span>
</body>

 

2. Controller 만들기

./src/main/java/group명.name명Controller package생성

Controller 패키지에 controller class 생성

@Controller
public class MainController {
	@GetMapping("/hi")
        public String getHi(Model model) {
            model.addAttribute("msg","hi");
            return "hi";
        }
}
  • @Controller: class 선언부 위에 작성, 해당 클래스가 Controller 클래스라는 것을 Spring Container에게 알려줌.
  • @GetMapping("url"): URL을 매핑시켜주는 어노테이션, GET method로 해당 경로로 들어올 시 getHi 함수 실행.
  • Model 객체: Controller에서 생성된 데이터를 담아서 JSP에 전달하는 역할

      addAttribute() 메서드를 통해 Model에 원하는 속성과 그에 대한 값을 주어 뷰(view)에 데이터를 전달

 

화면

 

 

Thymeleaf 문법

기본 문법

HTML 태그 안에 문법을 추가

HTML에서 지원하는 태그들에 모두 사용 가능

<div th:[속성]="서버에서 받는 값 및 조건식" />

 

1) th:text

: 서버에서 전달받은 값으로 태그 안의 텍스트 값 표현

// controller
model.addAttribute("hello", "hello");

//html
<span th:text="${hello}">message</span>

2) th:utext

: 서버에서 받은 값에 html태그가 존재한다면 태그값을 반영해서 표시

// controller
model.addAttribute("hello", "<strong>hello</string>");

//html
<span th:utext="${hello}">message</span>

(왼) th:text, (오) th:utext

 

3) th:value

: 태그의 value값 지정

<input type="text" th:value="${hello}" />

4) th:with

: 변수 값을 지정해서 사용하고자 할 때 사용됨

<div th:with="temp=${hello}" th:text=${temp}" />

5) th:switch

: switch-case문을 이용할 때 사용되는 문법

th:case에서 case문을 다루고,
*(=default)로 case문에서 다루지 않은 모든 경우 처리

 

 

<div th:switch="${hello}">
	<p th:case="'admin'">hello is admin</p>
	<p th:case="'manager'">hello is manager</p>
	<p th:case="*">hello is other</p>
</div>

6) th:if

조건문이 필요할 때 사용되는 문법

else문이 필요한 경우, th:unless를 사용함

<p th:if="${hello}=='web'" th:text="${hello}"></p>
<p th:unless="${hello}=='web'" th:text="unless입니다."></p>
  • 주의! if에 적은 조건을 th:unless에 똑같이 작성해주어야 unless 인식 가능

7) th:each

: 반복문이 필요한 경우, 사용되는 문법

리스트와 같은 collection 자료형을 서버에서 넘겨주면 그에 맞춰 반복적인 작업을 하고자 할 때 사용

// server
String[] names = {"kim", "lee", "hong", "seo"};
model.addAttribute("names". names);
return "thymeleafPractice";

// html
<ul>
    <li th:each="name:${names}">
        <span th:text="${name}">name</span>
    </li>
</ul>
  • 반복하고자 하는 태그를 감싸는 최상위 태그에 th:each를 작성

th:each 화면

 

반응형

'WEB개발 > TIL' 카테고리의 다른 글

Spring(DTO&VO, Bean, Annotation)  (0) 2023.03.21
REST API  (0) 2023.03.21
Java(추상클래스, 인터페이스)  (0) 2023.03.09
Java(클래스의 상속)  (1) 2023.03.06
Java(Array, Class)  (0) 2023.03.06