슈퍼코딩/주특기(JAVA)

2024.05.28(화) 슈퍼코딩 신입연수원 9주차 Day 2 후기 - framework vs library, Springboot, WAS, MVC, DI/IoC

곰돌이볼 2024. 5. 28. 10:27
  • 강의
    • 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과 내부 원리는 동일
  • 실습

 

정보 렌더링하는 방식


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 프레임워크)
    • 서버 소켓 관리
    • 쓰레드풀
  • Dispatcher Servelet(스프링 프레임워크)
    • @RestController
    • @Controller
    • => Http method와 URI로 매핑
  • 서버-클라이언트 단계
    1. WAS(tomcat) 동작
    2. 서버 소켓 생성(port 8080)
    3. 쓰레드 풀 생성
    4. 클라이언트 요청
    5. 동적 처리를 위해 서버의 서블릿 컨테이너 접속
    6. 쓰레드풀에서 쓰레드 할당 → 입출력 스트림 연결
    7. HTTP Sevelet
    8. Spring Container 영역 내부의 Dispatcher Sevelet
    9. Http method와 URI에 따라서 @RestConstroller 또는 @Controller 사용
    10. 결과 반환

MVC 패턴


MVC 패턴

  1. 클라이언트 요청
  2. @Controller, @GetMapping을 이용해서 Controller 인식
  3. 인식한 Controller 반환
  4. method+URI 요청
  5. 해당하는 controller가 view와 model(동적 데이터) 반환
  6. view Name에 해당하는 view 요청
  7. view(출력 화면) 반환
  8. model(동적 데이터)를 이용한 웹 페이지 요청
  9. view에 model을 넣어서 만든 웹 페이지 반환
  10. 웹 페이지 반환 

출처 : https://www.geeksforgeeks.org/spring-mvc-framework/

프론트 컨트롤러 패턴

  • model과 view를 반환하지 않지만 MVC 패턴이라고 함
  • 대표적인 '디자인 패턴' 중 하나
  •  요청
    1. 클라이언트 요청
    2. @Controller, @GetMapping을 이용해서 Controller 인식
    3. 인식한 Controller 반환
    4. method+URI 요청
    5. 해당하는 controller가 데이터 반환 → 직렬화/역직렬화 라이브러리를 이용해서 JSON이나 XML 형태로 변환
    6. 결과 반환

출처 : https://www.geeksforgeeks.org/spring-mvc-framework/


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