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



애플리케이션의 데이터를 나타내며, 데이터의 구조와 비즈니스 로직을 정의하는 데 사용
도메인 객체, 폼 객체, 데이터 전송 객체, 리포지토리 등으로 구성
도메인 객체(Domain Object)
애플리케이션의 주요 비즈니스 개념을 나타내는 객체 (예: 사용자를 나타내는 User 클래스)
일반적으로 엔터티(Entity)라고도 하며, 데이터베이스의 테이블과 매핑됨
폼 객체(Form Object)
사용자 입력을 받아서 저장하는 객체
주로 웹 애플리케이션에서 폼 데이터를 캡처하고 검증하는데 사용
도메인 객체와 비슷하지만, 주로 사용자 인터페이스와 상호작용하는데 사용
데이터 전송 객체(DTO, Data Transfer Object)
계층 간 데이터를 전달하는데 사용되는 객체
주로 서비스 계층과 프레젠테이션 계층 간 데이터 전송에 사용
도메인 객체와 구분하여 사용되며, 필요한 데이터만 포함하도록 설계
리포지토리(Repository)
데이터베이스와 상호작용하는 계층
CRUD 작업을 처리
Spring Data JPA와 같은 라이브러리를 사용하여 리포지토리를 쉽게 구현이 가능
사용자 요청을 처리하고 적절한 응답을 생성하는 역할.
사용자가 요청한 URL을 매핑하여 해당 요청을 처리하는 메서드를 호출하고, 모델 데이터를 생성하거나 수정한 후에 적절한 뷰를 선택하여 응답을 반환.
URL 경로와 HTTP 메서드(GET, POST, PUT, DELETE 등)를 매핑하여 해당 요청을 처리하는 메서드를 지정
모델 객체를 사용하여 데이터를 뷰에 전달
적절한 뷰 이름을 반환하여, 뷰 리졸버(View Resolver)가 이를 실제 뷰로 매핑하고 렌더링
사용자 입력 폼 데이터를 처리하고 검증

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

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

SQL을 사용해 CRUD 기능을 직접 구현해야 함.
DB와 관련된 연결(Connection) 정보를 담고 있으며, 빈(bean)으로 등록해 인자로 넘겨 줌.
→ 이 과정을 통해 스프링은 DataSource로 DB와 연결을 획득.
JDBC 드라이버 벤더 별로 여러가지가 존재
⇒ 일반적으로 connectionURL, username, password, jdbcDriver 등으로 구성 .
DB에 접근할 수 있도록 Java에서 제공하는 API.
데이터에이스에서 자료를 추가, 검색, 수정, 삭제하는 방법을 제공.
Plain JDBC API 문제점
- 쿼리 실행 전후에 많은 코드를 작성해야 함
- 예외 및 트랜젝션 처리
- 매번 쿼리를 실행할 때 마다 수행
Plain JDBC API의 문제점을 해결하기 위해 스프링에서 제공하는 Spring JDBC 접근 방법 중 하나.

자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해 주는 클라이언트 측 어댑터.
DB 마다 Driver가 존재하고, 자신이 사용하는 DB에 맞는 JDBC Driver를 사용.
DataSource를 JDBC Template에 주입하고, JDBC Template은 JDBC Driver를 이용해서 DB에 접근.
서버 사이드 자바 템플릿 엔진으로 스프링 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