🛠️Spring MVC, 컨트롤러, 서비스, Lombok
📍Sping Boot 기초 및 Spring MVC
URI vs. URL
웹 사이트 주소 → scheme(protocol), Host, Path로 구성.
URL 위치만 나타냄.
URI/URL 위치+식별자를 나타냄.
IP 인터넷 상 PC 주소 식별자
local host 자신의 컴퓨터(127.0.0.1)
Domain IP주소의 별칭
PORT Number IP주소로 PC 접속을 위한 연결 통로 번호
- 22 : SSH 요청 포트
- 80 : HTTP 요청 포트
- 443 : HTTPS 요청 포트
📍Spring 구조
Web Server : 정적컨텐츠를 반환해줌.(동적 컨텐츠 반환X)
Web Container : 동적인 데이터들을 정적인 파일로 반환해줌.
→ 동적 데이터 처리, 동적 응답 생성
Servlet Container(Spring Container) : 서블릿 컨테이너가 서블릿에 요청 위임. / 소켓 생성
→ servlet : URI를 기준으로 요청을 받음. HTTP랑 코드를 연결해주는 역할.
→ 프레임워크는 개발자 코드를 호출
Dispatcher Servlet : 모든 URI에 대해 하나만 존재. 모든 URI를 받아서 적절한 코드로 분배(핸들러 or 컨트롤러)
Web Application Server (web server + web container) : 정적, 동적 요청 모두 가능.
→ Tomcat : Apche Tomcat 이라고 불리기도 함.
🪄Spring 동작 과정
client → Spring/Spring Boot → Tomcat(Web Application Server) → Dispatcher Servlet → 개발자 코드
코드 실행 → Web Server → client
Thread Pool : 동시에 실행되는 작업을 관리
→ 모든 요청은 Thread로 처리됨.
*Thread : 하나의 프로세서 내에서 여러 개의 실행 흐름(단일, 동시, 병렬)을 두어 작업을 효율적으로 처리하기 위한 모델.
📍MVC(Model, View, Controller)
MVC
:사용자 인터페이스, 데이터 및 논리 제어를 구현하는 데 사용되는 소프트웨어 디자인 패턴.
→가독성이 높아지고, 역할 분리 가능.
1️⃣ Model
: 정보를 저장하고 가공하며, 비즈니스 로직을 수행하고 데이터 처리.
→ 비즈니스 로직 : 애플리케이션의 핵심 기능, 애플리케이션의 실질적 동작을 구현하는 코드
→ 모델은 주로 DB와 직접 상호작용하거나, 외부 데이터 소스와 통신을 해서 데이터 처리.
→ 외부 데이터 소스와 통신.
ex) 만약 사용자가 버튼을 누르면 GPT를 통해 랜덤 문자열을 영어로 출력하는
비즈니스 로직이 있을 경우
- GPT를 통해서 데이터를 얻는 것→ 사용자의 요청을 처리하는데 필요한 모든 데이터를 가지고 있어야 함.
- → View, Controller에 대한 어떠한 정보도 알면 안됨.
- → 외부 데이터 소스와 통신
2️⃣ View
: 사용자 인터페이스. 사용자에게 정보를 표시하고 사용자의 입력을 받는 역할. (프론트엔드)
→ 사용자에게 Model의 데이터를 시각적으로 표현하고 사용자와 상호작용하는 UI를 제공.
→ View는 주로 HTML, CSS, Java Script 등을 사용해서 웹에서 UI를 생성하고 표현.
→ Model이 가지고 있는 정보를 따로 저장하면 안됨 *역할 분리
→ Model이나 Controller와 같은 다른 구성 요소들은 몰라야 함 *의존성 제거, 책임 분리를 위한 계층화
3️⃣ Controller
: Model과 View의 중간 역할을 담당. 사용자 입력을 처리하고, Model의 데이터를 업데이트하는 역할.
→ 사용자에게 요청을 받아 Model을 통해 해당 요청을 처리하고, 그 결과를 적절한 View에 전달함.
→ 주로 라우팅 및 요청 처리를 담당하고, 비즈니스 로직(Model)과 사용자 인터페이스(View) 간의 연결을 담당.
→ 컨트롤러에서의 라우팅 : 어떤 요청을 어디로 보낼지 결정해주는 것.
(/hello에 대한 요청을 HelloController로 전달하는 것)
→ 사용자의 역할을 받을 함수를 정의. 사용자가 해당 함수가 필요한 요청을 보내면 그 함수 호출.
→ 함수는 Model, View를 통해 사용자의 요청을 처리하고 나온 데이터를 반환하는 역할
→ Model, View에 대해서 알고 있어야 함. *얘는 의존성 필요.
🪄Spring MVC 동작 과정
client → DispatcherServlet(어떤 컨트롤러로 보낼지 라우팅) → 선택된 Controller → Model / View를 선택 → DispatcherServlet으로 반환 → viewResolver → DispatcherServlet에서 view 생성 → client
vs.
🪄Rest API
client → DispatcherServlet(어떤 컨트롤러로 보낼지 라우팅) → 선택된 controller가 서비스로 요청 위임 → Service에서 비즈니스 로직 수행 → DB → service → controller(HTTP Response 생성) → DispatcherServlet(HTTP Response 전달) → client
📍Spring 개념 정리
IOC, DI, Spring Container, Spring Bean
1️⃣ IOC(Inversion Of Control) 제어의 역전
→ 스프링 프레임워크가 코드를 관리.
→ 구현 객체는 자신의 로직 실행만을 담당.
→ 일반적인 상황에서 프로그래밍을 할 때는 필요한 객체를 필요한 순간에 초기화하고,
이를 필요한 상황에 가져다가 사용 *개발자의 판단에 의해 객체의 생명 주기를 관리.
→ IOC는 이와 반대되는 개념 *스프링 프레임워크가 요구하는대로 개발자가 코드를 작성하면,
프레임워크가 필요한 상황에 이 코드를 가져다가 사용.
2️⃣ DI(Dependency Injection) 의존성 주입
→ 객체를 우리가 직접 생성하는 것이 아니라 외부에서(spring 프레임워크) 생성한 후, 주입시켜 주는 방법.
→ IOC를 통해 관리되는 객체를 DI를 통해서 해당 객체가 필요한 클래스에 주입.
→ 정적인 클래스 의존관계 : 클래스가 사용하는 import 코드만 보고 의존관계를 쉽게 판단 가능한 것.
→ 동적인 객체 인스턴스 의존관계 : 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계(DI)
→생성자 주입, Setter 주입, 필드 주입, 일반 메서드 주입
3️⃣ Spring Bean
→ IOC로 인해 생성된 객체들(Spring 프레임워크가 관리하는 객체)을 Bean이라고 부름. DI로 인한 의존성 주입은 Bean끼리만 가능.
→ Spring Bean으로 등록하기 위해서는 @Component Scan이라는 기술을 사용해서 Spring Bean으로 관리하기 시작함.
🪄컴포넌트 스캔 대상
@Component(컴포넌트 스캔), @Controller(스프링 MVC에서 사용), @Service(스프링 비즈니스 로직에서 사용), @Repository(스프링 데이터 접근 계층에서 사용), @Configration(스프링 설정 정보에서 사용)
- @Component 어노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 자동 등록.
4️⃣Spring Container
→ IOC로 인해 Spring이 관리하는 Bean들의 의존성을 관리하고, 객체를 만들어주며, Bean으로 등록시켜주고, 만들어진 Spring Bean을 관리함.
→ 기본적으로 싱글톤.
→ Spring Container는 Bean으로 등록되지 않은 클래스에는 의존성 주입을 해주지 않음.
📍Lombok
: Java 라이브러리. 반복되는 코드의 작성을 어노테이션을 사용해 자동으로 해준다.
→Getter, Setter, Builder, 생성자 등
'💻 백엔드개발 > 멋쟁이사자처럼 12기' 카테고리의 다른 글
Cookie와 Header (0) | 2024.10.30 |
---|---|
인증, 인가, JWT, 요청 캐싱 (0) | 2024.10.29 |
RDB, 데이터베이스 구축, JPA (0) | 2024.10.29 |
HTTP Request & Response, 예외처리 (0) | 2024.10.29 |
Java 기초와 디자인 패턴, Spring Boot 기초 (0) | 2024.10.29 |