728x90

Spring
Java 기반의 웹 어플리케이션을 만들 수 있는 백엔드 프레임워크이다.
자바스크립트에서 Node.js를 통해 웹서버를 개발한다면, 자바에서는 Spring을 이용하여 웹 서비스를 만들 수 있다.
📌 Spring 구조

📌 Spring 특징
스프링은 특정 기술에 종속되지 않으면서, 객체를 관리할 수 있는 컨테이너를 제공한다.
1) IoC
IoC (Inversion of Control): 제어의 반전 (코드의 흐름을 제어하는 주체가 바뀐 패턴)
- 객체의 라이프사이클(생성부터 소멸까지)을 개발자가 직접 하는 것이 아니라, Spring Container가 대신 한다.
- 제어권이 개발자가 아닌 IoC에 있다.
- IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸하여 라이프사이클을 관리한다.
2) DI
DI(Dependency Injection): 의존성 주입
DI는 객체를 직접 생성하는 것이 아니라, 외부(IoC 컨테이너)에서 객체를 생성한 후, 객체의 의존 관계를 외부에서 주입시켜주는 패턴이다.
- DI를 통해 IoC를 구현한다.
- 각 클래스 사이에 필요로 하는 의존관계를 '빈 설정 정보'를 바탕으로 IoC 컨테이너가 자동으로 연결해준다.
- 코드 간의 재사용률을 높이고, 모듈 간의 결합도를 낮출 수 있다.
3) AOP
AOP(Aspect Object Programming): 관점 지향 프로그래밍
로직을 핵심적인 관점과 부가적인 관점으로 나누어서 보고, 그 관점을 기준으로 각각 모듈화한다.
- 기능을 비즈니스 로직과 공통 모듈로 구분한 뒤, 개발자의 코드 밖에서 필요한 시점에 비즈니스 로직을 삽입하여 실행되도록 한다.
- 예를 들어, 계좌이체와 입출금 로직을 처리할 때 공통적으로 로깅, 보안 작업이 필요하다. 이때, 공통관심(로깅, 보안)을 따로 빼내어 관점별로 외부에서 접근하여 사용하도록 만든다. (객체별로 처리하는 것이 아님)

4) POJO
POJO(Plain Old Java Object): 단순한 자바 객체.
특정 기술에 종속되어 작동하는 객체가 아닌, 순수한 자바객체를 뜻한다.
- 오래된 방식의 간단한 자바 오브젝트로, 기본적인 필드와 그에 해당하는 getter, setter로 구성된 객체이다.
- 객체 지향적인 원리에 충실하다.
- 환경과 기술에 종속되지 않고, 필요에 따라 재활용될 수 있는 방식으로 설계된 객체이다.
📌 Spring Boot
Spring 이용에 필요한 여러가지 세팅 작업들(ex. 톰캣 서버 설정, XML 설정 등) 없이, 쉽고 빠르게 프레임워크를 사용할 수 있도록 해주는 도구이다.
Spring에서 운영하는 사이트에서 Spring Boot 기반으로 Spring 프로젝트를 만들 수 있다.
주로 아래 3가지의 dependencies를 추가한다.
- Spring Web: Spring MVC 구조를 이용하여 web build 한다.
- Thymleaf: 템플릿 엔진의 일종으로, html 태그에 속성을 추가하여 페이지에 동적으로 값을 추가하거나 처리할 수 있게 도와준다.
- Lombok: Java Annotation library으로 annotation을 통해 코드를 간결화할 수 있다.
Spring MVC 구조

Controller
@Controller 어노테이션으로 해당 클래스가 controller임을 컨테이너에 알려줘야 한다.
Spring Boot 동작 환경

- controller에서 return 값으로 문자를 반환하면, viewResolver가 화면을 찾아 처리한다.
(resouces:templates/+{viewName}+.html 으로 파일 찾아 처리) - 템플릿 엔진을 사용하여, html을 웹서버에서 웹브라우저로 그대로 넘기는 것이 아니라 원하는 루프를 적용시켜 넘겨줄 수 있다. (ex. thymeleaf로 원하는 데이터 전달할 수 있다.)
thymeleaf으로 원하는 데이터 전달할 수 있음.
📌 Thymeleaf 문법
- 기본적으로, html 태그에 연결해야 한다.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>...
- <div th:[속성]="서버에서 받는 값 및 조건식" />의 형식으로 html 태그 안에 소문법을 추가한다. (html에서 지원하는 태그들 모두 사용 가능)
th:text
: 태그 안의 텍스트를 서버에서 전달받은 값에 따라 표현하고자 할 때 사용하는 문법
- 아래의 경우, hello라는 이름으로 전달된 text가 표시된다.
// 서버 (controller)
@Controller
public class HelloController {
@GetMapping("/")
publilc String getHello (Model model) {
model.addAttribute("hello", "hi"); // "hello"는 attributeName, "hi"는 attributeValue
return "hello"; // hello.html 템플릿 렌더
}
}
<!--hello.html-->
<span th:text="${hello}">message</span> <!--hi-->
- 특정 문구를 추가하여 표시되도록 할 수 있다.
<span th:text="'안녕'+${hello}">message</span>
th:utext
: html 태그 값을 반영하여 text를 표시한다.
- <strong>안녕</strong> 값이 서버에서 넘어오면, strong 태그에 의해 굵게 표시된 "안녕"이 표시된다.
<span th:utext="${hello}">message</span>
th:value
: 요소의 value 값을 지정할 수 있다.
<button th:value="${hello}"/>
th:with
: 변수 값을 지정하여 사용할 수 있다.
- 아래의 경우, 서버에서 hello 라는 이름으로 전달된 값이 temp라는 변수에 저장되며, temp 변수를 이용할 수 있다.
<div th:with="temp=${hello}" th:text="${temp}"/>
th:switch
: Switch-case 문을 이용할 때 사용한다.
- case문에서 다루지 않는 모든 경우는 으로 처리한다. (default 대신 )
<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>
th:if
: 조건문이 필요할 때 사용한다.
- else문이 필요한 경우, th:unless를 사용한다. (th:unless에 if에 적은 조건을 적어줘야, 해당 if가 아닌 경우를 인식할 수 있음)
<p th:if="${hello}=='web'" th:text=${hello}></p>
<p th:unless="${hello}=='web'" th:text="unless입니다."></p>
th:each
: 반복문이 필요한 경우에 사용한다.
- 리스트와 같은 collection 자료형을 서버에서 넘겨주면, 그에 맞춰 반복적인 작업이 이뤄질 때 사용된다.
<ul>
<li th:each="name:${names}">
<span th:text="${name}">이름</span>
</li>
</ul>728x90
'포스코x코딩온 웹 풀스택 양성과정' 카테고리의 다른 글
| [포스코x코딩온] 웹 풀스택 과정 18주차 회고 | Spring REST API (0) | 2024.04.18 |
|---|---|
| [포스코x코딩온] 웹 풀스택 과정 18주차 회고 | Spring Bean (0) | 2024.04.18 |
| [포스코x코딩온] 웹 풀스택 과정 17주차 회고 | JAVA 래퍼, 제네릭, 콜렉션 (1) | 2024.04.18 |
| [포스코x코딩온] 웹 풀스택 과정 16주차 회고 | JAVA 클래스 상속 (0) | 2024.04.18 |
| [포스코x코딩온] 웹 풀스택 과정 16주차 회고 | JAVA 클래스와 인스턴스 (0) | 2024.04.05 |