soowanlog

Spring boot 본문

백엔드/Spring

Spring boot

개발자솬
백엔드/Spring

Spring boot

개발자솬 2024. 3. 9. 19:09
728x90
반응형
  • Spring 이란?

Spring 이란 Java의 웹 프레임워크로 Java 언어를 기반으로 합니다.

Java의 활용도가 점점 높아짐에 따라 JSP, Mybatis, JPA 등 Java를 이용한 여러 가지 기술들을 더 편하게 사용하기 위해 만들어진 것입니다.

즉, Spring이란 Java 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임워크입니다.

 

  • Spring의 핵심 기술

- IoC(Inversion of Control, 제어의 역전) :

객체의 생성부터 소멸까지의 객체 생명주기 관리를 개발자가 아닌 Spring이 대신 해주는 것을 말합니다.

제어권이 개발자가 아닌 IoC에게 있으며 IoC가 개발자의 코드를 호출하여 그 코드로 생명주기를 제어하는 것입니다.

 

- DI(Dependency Injection, 의존성 주입) :

구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식입니다.

DI에는 세가지 방식이 있습니다.

Constructor Injection(생성자 주입, 권장)

public class A {
  private B b;
  
  public A(B b) {
    this.b = b;
  }
}

Setter Injection(세터 주입)

public class A {
  private B b;
  
  public void setB(B b) {
    this.b = b;
  }
}

Interface Injection(인터페이스 주입)

public interface B {
  test(B b);
}

public A implements B {
  private B b;
  
  @Override
  public void test(B b) {
    this.b = b;
  }
}

 

- AOP(Aspect Object Programming, 관점 지향 프로그래밍) :

여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있습니다.

여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법입니다.

 

- PSA(Portable Service Abstraction)

특정 Class가 추상화된 상위 Class를 일관되게 바라보며 하위 Class의 기능을 사용하는 것을 말합니다.

PSA가 적용된 코드는 개발자의 기존에 작성된 코드를 수정하지 않으면서 확장할 수 있으며, 어느 특정 기술에 특화되어 있지 않은 코드입니다.

Spring에서 동작하는 라이브러리들은 POJO 원칙을 지키기 위해 PSA 형태의 추상화가 되어있습니다.

 

- POJO(Plain Old Java Object) :

직역하면 순수한 오래된 자바 객체로 Java로 생성하는 순수한 객체를 의미합니다.

Java나 Java의 스팩에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 합니다.

특정 환경에 종속적이지 않아야 합니다.

 

  • Spring boot란?

Spring boot는 Java 기반의 오픈 소스 프레임워크로 Spring framework 위에 구축되어 있습니다.

Spring boot의 주요 목표는 Spring 기반의 API 개발을 더 빠르고 쉽게 만들기 위한 것입니다.

 

Spring boot는 Tomcat이라는 WAS를 내장하고 있어 @SpringBootApplication이 선언되어 있는 Class의 main() 메서드를 실행하는 것만으로 서버를 구동시킬 수 있습니다.

또한 웹 프로젝트라면 .war파일로 패키징 해야 하는데 Spring boot는 내장 Tomcat을 지원하기 때문에 .jar파일로 패키징 해서 웹 애플리케이션을 실행시킬 수 있습니다.

  • Spring boot 동작방식

브라우저가 보낸 요청을 DispatcherServlet이 가장 먼저 받아들입니다.

(Filter를 사용한다면 DispatcherServlet이 요청과 응답을 다루기 전과 후에 동작을 할 수 있습니다.)

 

DispatcherServlet은 URI를 보고 Handler Mapping과 통신하여 요청을 전달할 Controller를 찾습니다.

 

Handler Adapter는 반환된 Controller에서 어떤 Method를 호출할지 결정합니다.

 

Handler Adapter는 결정된 Handler Method를 호출합니다.

 

Handler Method는 Model과 Veiw를 반환합니다.

 

DispatcherServlet에서 반환된 View이름을 가지고 View Resolver를 호출해 물리적 View를 찾습니다.

 

View Resolver는 해당하는 View를 반환합니다.

 

Dispatcher Servlet은 응답을 브라우저로 보냅니다.

※ Front Controller Pattern


모든 요청에 대한 응답을 할 때 공통된 작업을 해야된다면 모든 Controller에 해당 작업을 구현하는 것은 코드의 중복이 발생하고 실수로 일부 Controller에 해당 작업을 구현하지 않았다면 치명적인 오류를 발생시킴.

그렇기 때문에 공통 작업을 앞단에서 수행하는 Controller를 만드는 것이 Front Controller Pattern임.

Spring boot에서는 이 역할을 Dispatcher Servlet이 수행함.

참    고    자    료

- Spring 이란? | 쩨리쩨리

 

- Spring boot 스프링 부트란? | cheersHena

 

- FrontController 패턴이란? (with FrontController - Version01) | 주누

728x90
반응형