데이터 분석 부트캠프를 수료하면서 다양한 데이터에 대해 분석도 해보고 AI를 활용한 흥미로운 프로젝트들을 진행하였다. 과정을 거듭하며 데이터들의 흐름을 알고 싶어 백엔드 개발에 발을 들이고자 한다. 프레임워크는 SpringBoot로 선택하였고 실습에 들어가기 전 스프링 부트의 레이어드 아키텍처를 알아보고자 한다.
소프트웨어 시스템을 여러 계층으로 분리하여 각 계층이 특정 역할과 책임을 수행하는 구조
먼저 각 계층의 역할을 알아보자. 그림과 같이 일반적으로 3개의 계층으로 나뉜다.
특징도 알아보자.
각 계층은 역할별로 분리되어 있고 특정 책임만 수행하며 인접한 계층과 상호작용한다. 이를 통해 시스템의 유지보수성, 재사용성, 확장성 등을 높일 수 있다. 레이어드 아키텍처에 대해 간단히 알아 보았다. 이제 레이어드 아키텍처를 스프링에 적용해보자.
내부적으로 그림과 같이 구성되어 있다. 각 계층의 구성요소를 먼저 알아보자.
클라이언트의 요청을 받아들이고, 애플리케이션의 응답을 클라이언트에게 표시하는 역할
Dispatcher Servlet
핸들러 매핑
Controller
실제 사용자의 요청을 받아 처리하고 비즈니스 계층(서비스)를 호출한 뒤, 결과를 View에 전달하거나 응답 데이터를 생성.
@Controller 어노테이션이 붙은 클래스를 의미.
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "안녕하세요!");
return "hello";
}
}
ModelAndView
View Resolver
View
용어도 생소하고 구성요소 하나하나 봐서는 잘 이해가 되지 않는다. 프레젠테이션 계층은
Spring MVC의 동작방식과 거의 동일하다. Spring MVC가 뭘까? Spring MVC는 자바 기반의 웹 애플리케이션을 개발하기 위한 프레임워크로 Model-View-Controller 아키텍처를 제공한다. 이 구조는 애플리케이션을 세 가지 주요 부분으로 분리하여 개발의 효율성과 유지보수성을 높인다.
이제 프레젠테이션 계층의 핵심 동작 원리를 알아보자.
위의 과정을 거쳐 클라이언트는 요청에 대한 응답을 받게 되는데 JSP, Thymeleaf를 예시로 선택하였다. 레이어드 아키텍처에 대해 기술하기 때문에 자세히 설명하지는 않고 표로 간단히 넘어가겠다.
특징 | JSP (JavaServer Pages) | Thymeleaf |
---|---|---|
기반 기술 | Java Servlet | Java (HTML, XML, JavaScript, CSS 처리 가능) |
파일 확장자 | .jsp | .html (Natural Templates), .xml , .js , .css 등 |
문법 | HTML 내에 <% ... %> 형태로 Java 코드 삽입 | HTML 속성 형태로 Thymeleaf 표현식 (th:* ) 사용 |
가독성 | Java 코드와 HTML 혼합으로 가독성 저하 우려 | Natural Templates 지원으로 HTML 구조 유지, 가독성 우수 |
유지보수 | Java 코드 변경 시 재배포 필요, HTML과의 분리 어려움 | HTML 구조 유지로 디자인 변경 용이, Java 코드와의 분리 용이 |
프레젠테이션 계층으로부터 전달받은 요청을 처리하고, 필요한 데이터를 가공하여, 데이터 접근 계층을 통해 데이터를 조회하거나 저장
데이터베이스와 같은 데이터 저장소에 접근하여 데이터에 CRUD 작업을 수행하는 역할
Spring Boot의 레이어드 아키텍처를 통해 견고하고 확장 가능한 백엔드 시스템의 기본 구조를 이해할 수 있었다. 각 계층의 명확한 역할과 Spring MVC의 흐름을 파악함으로써 본격적인 실습에 들어가기 전, 중요한 배경지식을 알게 되었다. 실습을 하면서도 필요하다고 생각되는 지식을 블로깅할 예정이다.