[LG CNS AM Inspire CAMP 1기] Spring Boot (1) - MVC, DAL, Thymeleaf

니니지·2025년 1월 22일

LG CNS AM Inspire Camp 1기

목록 보기
27/47
post-thumbnail

INTRO

안녕하세요, 어제까지 스프링의 AOP에 대해 학습할 때 익숙하지 않아 복잡하게 느껴졌는데, 스프링 부트로 들어오면서 이제야 웹이란 무엇인지 공부하는 느낌이 듭니다. 스프링 부트의 특징에는 어떤게 있는지, 웹의 구조는 어떻게 돼있는 지 학습한 내용을 정리했습니다.

1. 스프링 부트 (SpringBoot)

스프링 기반 애플리케이션을 빠르고 쉽게 개발.

  • 어노테이션을 통해 자동 설정 가능
  • 스타터 의존성
  • 내장 웹 서버를 포함하고 있어서 독립 실행 가능 (앱 배포가 쉬움)
  • DevTools 의존 모듈 설치로, 코드 변경 시 자동 재시작, 라이브 리로딩, 개발 모드 전용 설정 등 사용 가능
  • 프로덕션 준비 기능 : actuator ⇒ 모니터 및 관리 기능을 제공
  • 간편한 설정
  • CLI 지원

2. MVC 패턴

- 모델(model)

애플리케이션의 데이터를 나타내며, 데이터의 구조와 비즈니스 로직을 정의하는 데 사용
도메인 객체, 폼 객체, 데이터 전송 객체, 리포지토리 등으로 구성

  • 도메인 객체(Domain Object)
    애플리케이션의 주요 비즈니스 개념을 나타내는 객체 (예: 사용자를 나타내는 User 클래스)
    일반적으로 엔터티(Entity)라고도 하며, 데이터베이스의 테이블과 매핑됨

  • 폼 객체(Form Object)
    사용자 입력을 받아서 저장하는 객체
    주로 웹 애플리케이션에서 폼 데이터를 캡처하고 검증하는데 사용
    도메인 객체와 비슷하지만, 주로 사용자 인터페이스와 상호작용하는데 사용

  • 데이터 전송 객체(DTO, Data Transfer Object)
    계층 간 데이터를 전달하는데 사용되는 객체
    주로 서비스 계층과 프레젠테이션 계층 간 데이터 전송에 사용
    도메인 객체와 구분하여 사용되며, 필요한 데이터만 포함하도록 설계

  • 리포지토리(Repository)
    데이터베이스와 상호작용하는 계층
    CRUD 작업을 처리
    Spring Data JPA와 같은 라이브러리를 사용하여 리포지토리를 쉽게 구현이 가능

- 뷰(view)

  • 사용자에게 데이터를 표시하고 사용자 인터페이스를 제공하는 역할.
  • 모델 데이터를 표시하고, 사용자가 입력한 데이터를 컨트롤러로 전달하는 중간 매개체로 작동.
  • JSP, Thymeleaf, FreeMarker, Velocity와 같은 템플릿 엔진을 사용.
  • 뷰 리졸버(View Resolver) : 컨트롤러가 반환한 뷰 이름을 실제 뷰로 매핑하는 역할

- 컨트롤러(controller)

사용자 요청을 처리하고 적절한 응답을 생성하는 역할.

사용자가 요청한 URL을 매핑하여 해당 요청을 처리하는 메서드를 호출하고, 모델 데이터를 생성하거나 수정한 후에 적절한 뷰를 선택하여 응답을 반환.

요청 매핑 (Request Mapping)

URL 경로와 HTTP 메서드(GET, POST, PUT, DELETE 등)를 매핑하여 해당 요청을 처리하는 메서드를 지정

  • @RequestMapping, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등의 애너테이션을 사용

모델 처리 (Model Handling)

모델 객체를 사용하여 데이터를 뷰에 전달

  • Model, ModelMap, ModelAndView를 사용하여 모델 데이터를 처리

뷰 선택 (View Selection)

적절한 뷰 이름을 반환하여, 뷰 리졸버(View Resolver)가 이를 실제 뷰로 매핑하고 렌더링

폼 데이터 처리 (Form Handling)

사용자 입력 폼 데이터를 처리하고 검증

  • @ModelAttribute, @Valid 애너테이션을 사용하여 폼 데이터를 바인딩하고 검증

3. DAL (데이터 접근 계층)

애플리케이션의 다른 부분과 저장소 간의 상호작용을 담당하는 계층.
비즈니스 로직과 데이터 접근 코드를 분리해 애플리케이션의 유지 보수성과 확장성을 높이는 것을 목적으로 함.

- DAO(Data Access Object)

데이터베이스와 상호작용을 담당하는 객체.

SQL을 사용해 CRUD 기능을 직접 구현해야 함.

- Data Source

DB와 관련된 연결(Connection) 정보를 담고 있으며, 빈(bean)으로 등록해 인자로 넘겨 줌.
→ 이 과정을 통해 스프링은 DataSource로 DB와 연결을 획득.
JDBC 드라이버 벤더 별로 여러가지가 존재
⇒ 일반적으로 connectionURL, username, password, jdbcDriver 등으로 구성 .

- JDBC(Java DataBase Connectivity)

DB에 접근할 수 있도록 Java에서 제공하는 API.
데이터에이스에서 자료를 추가, 검색, 수정, 삭제하는 방법을 제공.

Plain JDBC API 문제점

  • 쿼리 실행 전후에 많은 코드를 작성해야 함
  • 예외 및 트랜젝션 처리
  • 매번 쿼리를 실행할 때 마다 수행

- JDBC Template

Plain JDBC API의 문제점을 해결하기 위해 스프링에서 제공하는 Spring JDBC 접근 방법 중 하나.

- JDBC Driver

자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해 주는 클라이언트 측 어댑터.
DB 마다 Driver가 존재하고, 자신이 사용하는 DB에 맞는 JDBC Driver를 사용.
DataSource를 JDBC Template에 주입하고, JDBC Template은 JDBC Driver를 이용해서 DB에 접근.

4. Thymeleaf

서버 사이드 자바 템플릿 엔진으로 스프링 MVC와 사용.
HTML, XML, JS, CSS 등의 템플릿을 처리할 수 있으며, 내추럴 템플릿 방식으로 동작.

- 표준 표현식

${...} : Variable expressions / 변수 표현식 / 모델 객체의 값을 참조
*{...} : Selection expressions / 선택 변수 표현식 / 선택된 객체의 속성을 참조
#{...} : Message (i18n) expressions / 메시지 표현식 / 메시지 번들을 참조
@{...} : Link (URL) expressions / 링크 (URL) 표현식 / 링크(URL)을 생성
~{...} : Fragment expressions / 조각 표현식 / 템플릿 조각을 참조

- 속성 처리

- 내장 메서드

https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#expression-utility-objects

profile
지니니

0개의 댓글