[BE] 프레임워크와 디자인패턴

지니🧸·2023년 10월 1일
0

GDSC

목록 보기
10/12
post-custom-banner

본 게시글은 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하게 설계/구현하는 것이 난이도 높음
profile
우당탕탕
post-custom-banner

0개의 댓글