본 게시글은 GDSC 연세 BE 파트의 세미나 내용입니다.
프레임워크
프레임워크: 프로그램 구현에 있어서 큰 구조를 결정하고 흐름을 제어하는 역할
- 뼈대를 구성하는 역할
- 프레임워크 vs. 라이브러리
- 라이브러리: 개발자가 직접 호출하는 것들
- 특정 로직을 추상화하여 묶어둔 것
- (예) pandas 등
- 프레임워크: 우리가 짠 코드를 실행시켜주는 것
- 제어권이 어디있는가가 차이다
- Inversion of Control (IoC)
상황에 맞게 프레임워크를 사용할 수 있어야 한다
Spring
Spring 탄생 배경
- Java를 이용해서 서비스를 만들 때 Java(Jakarta) EE를 따라 개발
- Java EE/J2EE는 기업환경의 어플리케이션을 개발할 때 필요한 스펙의 집합
- 주요 구성 요소: Srevlet/JSP, JDBC, EJB, etc.
- EJB(Enterprise Java Beans)
- 기업의 어플리케이션을 만든다고 가정하면 많은 객체가 필요하다
- EJB Container: 다양한 비즈니스 객체를 관리하기 위해 만드는 컨테이너
- EJB 컨테이너와 관련된 상투적인 코드 증가
- 하지만 EJB 컨테이너 없이는 개체 사용이 불가하고, 테스트가 어려움
- 결과:
- 실행환경을 구축하는데 시간이 더 오래 걸림
- 특정 기술에 종속되는 비즈니스 코드
Spring
- POJO(Plain Old Java Object): 우리가 평소에 쓰는 객체
- EJB 컨테이너사에서 만든 객체가 아닌, POJO를 사용하는 "경량" 컨테이너 기술 적용
- Spring은 결국 여러 기술의 집합
- IoC(Inversion of Control)
- DI(Dependency Injection)
- AOP(Aspect Oriented Programming)
Spring Framework
spring-core
spring-context
spring-aop
spring-beans
spring-security
spring-data
spring-orm
Spring Boot
- 각종 설정 자동화
- Embedded Web Server
- Convention over configuration: 따로 별다른 설정을 해주지 않아도 잘 동작하는 경우가 발생한다
- Component Scan, Autoconfiguration
- 양날의 검이 될 수 있다
Spring Web MVC
- MVC: Model-View-Controller
Java Servlet
- 클라이언트의 요청을 받고 응답을 하는 컴포넌트
- Java답게 API로 동작
- HTTP통신을 하고 싶으면 Servlet을 상속받아 HttpServlet 생성
- Servlet Container는 Servlet의 생명주기를 관리한다
- 요청이 들어오면 적절한 Servlet을 찾아서 실행
- (예) Apache Tomcat, Eclipse Jetty
- Servlet은 요청당 하나의 스레드 사용
- Thread per Request Model
- Tomcat은 최대 200개의 thread를 쓸 수 있다
Front Controller 패턴
- 공통 로직에 요청을 받아 각자 핸들러로 처리한다
Event Loop
- 비동기적으로 처리하겠다는 선언
- 리퀘스트가 들어오면, 하나 또는 여러 스레드가 리퀘스트를 프로세스한다
Spring Webflux
- Spring의 Async, Non-blocking 웹 프로젝트
- 낮은 스레드 점유율로 적은 스레드의 효율적인 사용
- blocking 모델보다 더 많은 요청 처리 가능
- 애플리케이션의 한 부분이라도 blocking되면 전체 성능 하락
- reactive하게 설계/구현하는 것이 난이도 높음