Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 생활코딩
- Java
- vscode
- mobaXterm
- SPLIT
- Generic
- JDoodle
- redis
- 문자열
- spring
- RestController
- outfitanyone
- Component
- Repository
- StringTokenizer
- 생성형AI
- 런타임에러
- 일관성
- 다이얼
- reverse()
- 문자열 반복문
- putty
- StringBuilder
- 백준
- prettier
- 가독성
- JAVA 설치
- 백준 문자열
- Service
- Controller
Archives
- Today
- Total
gone
[1주차] 02장. 개발에 앞서 알면 좋은 기초 지식? 본문
개요
애플리케이션이 '어떻게 동작하는지', '왜 이렇게 구성되는지' 생각하며 실습하기 위한 개발 배경지식을 알아보자.
2.1 서버 간 통신

2.2 스프링 부트의 동작 방식
spring-boot-start-web 모듈을 사용하면 톰켓을 사용하는 스프링 MVC 구조를 기바능로 동작한다.

<그림2.2> 설명 - DispatcherServlet 동작
(1) DispatcherServlet으로 요청 (HttpServletRequest)이 들어오면 DispatcherServlet은 Handler Mapping을 통해 URI에 매핑된 핸들러를탐색한다. (Handler = Controller 를 의미)
(2) HandlerAdapter 로 Controller을 호출
(3) HandlerAdapter에 Controller의 응답이 돌아오면 ModelAndView 로 응답을 가공해 반환한다.
(4) View 형식으로 리턴하는 Controller를 사용할 때는 View Resolver를 통해 View를 리턴받는다.
- Servlet
- 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술.
- Servlet Container 에서 관리됨
- Servlet Container 란? 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체로서 톰켓은 WAS의 역할과 서블릿 컨테이너의 역살을 수행하는 대표적인 컨테이너.
Servlet 특징
- 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리
- 서블릿 객체는 싱글톤 패턴으로 관리
- 멀티 스레딩을 지원
Spring에서는 DispatcherServlet이 Servlet 역할을 수행한다. (Servlet Container과 DispatcherServlet 은 자동 설정된 web.xml의 설정값을 공유함)
- Handler Mapping
- 요청 정보를 기준으로 어떤 컨트롤러를 사용할 지 선정하는 인터페이스이다.
- Handler Mapping 대표적 구편체 클래스
- BeanNameUrlHandlerMappin
- ControllerClassNameHandlerMapping
- SimlerUrlHanderMapping
- DefaultAnnotationHanderMapping
- BeanNameUrlHandlerMappin
- View Resolver
- 뷰의 렌더링 역할을 담당하는 뷰 객체를 반환


Message Converter 는 요청과 응답에 대해 Body 값을 변환하는 역할을 수행한다. (JSON 형식으로 변환하여 응답)
2.3 레이어드 아키텍처 (Layered Architecture)
애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미한다.
어떻게 설계하느냐에 따라 용어와 계층의 수가 달라진다. (일반적으로 3계층 또는 4계층 구성)
레이어드 아키텍처 기반 설계 특징
-> 애플리케이션 간의 관계를 설명하는데도 사용 할 수 있음.
* 각 레이어는 가장 가까운 하위 레이어의 의존성을 주입받는다.
* 각 레이어는 관심사에 따라 묶여 있으며, 다른 레이어의 역할을 침범하지 않는다.
- 각 컴포넌트의 역할이 명확하므로 코드의 가독성과 기능 구현에 유리
- 코드의 확장성이 좋아짐
* 각 레이어가 독립적으로 작성되면 다른 레이어와의 의존성을 낮춰 단위테스트에도 용이함.


| 일반적인 레이어드 아키텍처 | 스프링 레이어드 아키텍처 | |
| 프레젠테이션 계층 | - 애플리케이션의 최상단 계층으로, 클라이언트의 요청을 해석하고 응답하는 역할 - UI나 API를 제공 - 프레젠테이션 계층은 별도의 비즈니스 로직을 포함하고 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행 |
- 유저 인터페이스(UI) 계층라고 부를 수 있음 - 클라이언트와의 접점이 됨 - 클라이언트부터 데이터와 함께 요청을 받고 처리 결과를 응답으로 전달하는 역할 |
| 비즈니스 계층 | - 애플리케이션이 제공하는 기능을 정의하고 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행 - DDD(Domain-Driven Design) 기반의 아키텍처에서는 비즈니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 함 |
- 서브스(Service) 계층이라 부를 수 있음 - 핵심 비즈니스 로직을 구현하는 영역 - 트랜잭션 처리나 유효성 검사 등의 작업도 수행 |
| 데이터 접근 계층 | - 데이터 베이스 접근하는 일련의 작업을 수행 | - 영속(Persistence) 계층이라고 부를 수 있음 - 데이터베이스에 접근해야하는 작업을 수행 - Spring Data JPA에서는 DAO 역할을 Repository가 수행함. |
2.4 디자인 패턴 (Design 패턴)
2.5 Rest API
- Rest란?
- 'Representational State Transfer'의 약자
- WWW과 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식
- 주고받는 자원(Resource)에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, Post, Put, Delete)를 통해 해당 자원의 상태를 주고받는 것을 의미
- Rest API란?
- 'Application Programing Interface'의 약자로 애플리케이션에서 제공하는 인터페이스를 의미
- API를 통해 서버 또는 프로그램 사이를 연결할 수 있음
- Rest 의 특징
- 유니폼 인터페이스
- 일관된 인터페이스
- Rest 서버는 HTTP 표준 규약을 따르므로, 플랫폼 및 기술에 종속되지 않고 타 언어, 플랫폼, 기술 등과 호환해 사용할 수 있다는 것을 의미
- 무상태성(stateless)
- 서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미
- 캐시 가능성
- HTTP 의 캐싱 기능을 적용할 수 있다.
- 레이어 시스템
- 네트워크 사으이 여러 계층으로 구성될 수 있다.
- 클라이언트-서버 아키텍처
- 유니폼 인터페이스
출처 : [스프링 부트 핵심 가이드] 참고하여 작성하였습니다.

'개발일지(TIL)' 카테고리의 다른 글
| [1주차] 03장. 개발 환경 구성 (0) | 2024.10.27 |
|---|---|
| [1주차] 01장. 스트링 부트란? (0) | 2024.10.27 |
| OutfitAnyone 생성형AI (1) | 2024.01.15 |