- 강의
- 89강(big picture) ~ 91강(스프링부트 핵심 원리 DI/IoC)
프레임워크 vs 라이브러리
- Framework
- 아이템들의 모음
- 이미 구현된 코드 사용
- 사용법을 익혀서 사용
- 프레임워크 흐름 주도 + 개발자의 일부 기능 추가
- ex) spring, tomcat
- Library
- 아이템
- 라이브러리 코드를 가져와서 코드 변경해서 사용
- 개발자 흐름 주도 + 여러 라이브러리 활용
- ex) stream api, map structure
Springboot
- springboot이 java의 대표적인 server framework인 이유
- 좋은 코드 확장성
- AOP 지원
- 다양한 라이브러리와 프레임워크 간의 호환성
- 큰 커뮤니티
- 클라우드 네이티브에서 지원하는 프레임워크
- Spring
- 내부가 Java OOP로 구현됨
- spring vs springboot
- spring : 쉬운 서버 개발 프레임워크
- springboot : spring보다 더 편리한 프레임워크, spring과 내부 원리는 동일
- 실습
- spring initializer로 새로운 프로젝트 만들기
- 코드 : https://github.com/kung036/spring-initail
- java 17
- groovy
- jar
- springboot : 3.2.7(SNAPSHOT )
정보 렌더링하는 방식
- SSR
- Server Side Rendering
- 서버에서 랜더링을 주도하는 방식
- 실습 코드 : https://github.com/kung036/spring-initail/commit/69520a8b217a5891cb1e2bfd8c16e215fe8cd8fd
- 구현 : Spring + Thymeleaf
- CSR
- Client Side Rendering
- 웹에서 랜더링을 주도하는 방식
- 실습 코드 : https://github.com/kung036/spring-initail/commit/cb134e7933fe57498eaa4e93ad79734245644eb3
- 구현 : JS + Spring
WAS
- WAS
- Web Application Server
- 클라이언트 요청을 의미있는 웹 어플리케이션을 실행하는 서버
- 구성
- WEB + Servlet Contaner(=web container)
- WEB : 정적 파일 반환 담당
- servlet container : 동적 요청 반환담당
servelet container
- 역할
- 프로토콜 요청 및 응답 처리
- 쓰레드풀 관리
- 스프링 지원 런타임 컴포넌트
- 쓰레드풀
- 미리 쓰레드를 생성해둔 풀
- 멀티 쓰레딩에서 사용
- 쓰레드 사용 후 쓰레드 풀에 쓰레드 반환
- 구성
- protocol 관련 Servelet
- HTTP Servelet
- WebSocket Servlet
- FTP Servelet
- Server 프레임워크 관련 Servelet
- Dispatcher Servelet(스프링 프레임워크)
- Action Servelet(Struts 프레임워크)
- Jersey Servelet(JAX-RS 프레임워크)
- 서버 소켓 관리
- 쓰레드풀
- protocol 관련 Servelet
- Dispatcher Servelet(스프링 프레임워크)
- @RestController
- @Controller
- => Http method와 URI로 매핑
- 서버-클라이언트 단계
- WAS(tomcat) 동작
- 서버 소켓 생성(port 8080)
- 쓰레드 풀 생성
- 클라이언트 요청
- 동적 처리를 위해 서버의 서블릿 컨테이너 접속
- 쓰레드풀에서 쓰레드 할당 → 입출력 스트림 연결
- HTTP Sevelet
- Spring Container 영역 내부의 Dispatcher Sevelet
- Http method와 URI에 따라서 @RestConstroller 또는 @Controller 사용
- 결과 반환
MVC 패턴
MVC 패턴
- 클라이언트 요청
- @Controller, @GetMapping을 이용해서 Controller 인식
- 인식한 Controller 반환
- method+URI 요청
- 해당하는 controller가 view와 model(동적 데이터) 반환
- view Name에 해당하는 view 요청
- view(출력 화면) 반환
- model(동적 데이터)를 이용한 웹 페이지 요청
- view에 model을 넣어서 만든 웹 페이지 반환
- 웹 페이지 반환
프론트 컨트롤러 패턴
- model과 view를 반환하지 않지만 MVC 패턴이라고 함
- 대표적인 '디자인 패턴' 중 하나
- 요청
- 클라이언트 요청
- @Controller, @GetMapping을 이용해서 Controller 인식
- 인식한 Controller 반환
- method+URI 요청
- 해당하는 controller가 데이터 반환 → 직렬화/역직렬화 라이브러리를 이용해서 JSON이나 XML 형태로 변환
- 결과 반환
DI/IoC
- POJO → Spring 철학
- AOP : 관점 지향형 프로그래밍
- PSA : 일관성 있는 추상화
- IoC/DI : 의존성 주입 / 제어의 역전
- 스프린 빈 등록
- Spring Container에 bean 등록
- 스프링빈 : 싱글톤 패턴
- Spring @Bean
- 쓰레드가 공유하는 자원
- 방법
- @Configuration(클래스) + @Bean(메서드)
- @Component(클래스)
- java 클래스 의존
- 한 클래스가 다른 클래스 동작에 영향을 받는 경우
- 객체 생성할 때 다른 클래스 의존성이 발생하는 경우
IoC
- Inversion Of Control, 제어의 역전
- bean을 통해서 IoC
- 객체를 빈으로 생성해서 스프링 컨테이너에서 객체 생성 및 관리 → 객체 제어가 생성한 자가 아닌 서블릿에게 넘어감
DI
- Dependency Injection, 의존성 주입
- 스프링 컨테이너가 대신 의존성 주입
- 필드 주입(field injection)
- 세터 주입(setter injection)
- 생성자 주입(contructor injection) : 생략 가능
- @Autowired 이용해서 DI
'슈퍼코딩 > 주특기(JAVA)' 카테고리의 다른 글
2024.05.30(목) 슈퍼코딩 신입연수원 9주차 Day 4 후기 - Service Layer, 트랜젝션 (0) | 2024.05.30 |
---|---|
2024.05.29(수) 슈퍼코딩 신입연수원 9주차 Day 3 후기 - Spring 프로젝트 구조, 코드 아키텍처 (0) | 2024.05.29 |
2024.05.27(월) 슈퍼코딩 신입연수원 9주차 Day 1 후기 - 네트워크, 프로토콜, HTTP, Web API (0) | 2024.05.27 |
슈퍼코딩 신입연수원 8주차 후기 (0) | 2024.05.25 |
2024.05.24(금) 슈퍼코딩 신입연수원 8주차 Day 5 후기 - 데이터베이스 모델링, JDBC (0) | 2024.05.24 |