Home Spring boot
Post
Cancel

Spring boot

Spring Boot?

Spring Framework

IoC (Inversion of Control) : 제어 역전

  • 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임

외부란? 스프링 컨테이너 또는 IoC 컨테이너.

IoC를 통해 DI (Dependency Injection) : 의존성 주입,
AOP (Aspect-Oriented Programming) : 관점 지향 프로그래밍이 가능해지고 개발자는 비즈니스 로직에 집중할 수 있다.


프로그래밍에서 의존관계는 new로 표현된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
운전자가 자동차를 생산한다.
자동차는 내부적으로 타이어를 생산한다.

///////////////////////////////////////////

new Car();
Car 객체 생성자에서 new Tire();

///////////////////////////////////////////

의존성을 단순하게 정의하면 아래와 같다.

의존성은 new다.
new를 실행하는 Car와 Tire 사이에서 Car가 Tire에 의존한다.




DI (Dependency Injection) : 의존성 주입

  • 주입이란 외부에서라는 뜻을 내포하고 있는 단어다.

  • 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입

  • 스프링 공식 문서에서는 생성자를 통해 의존성을 주입받는 방식을 권장.

  • 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계되기 때문.




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

스프링 DI가 의존성(new)에 대한 주입이라면 스프링 AOP는 로직(code) 주입이라고 할 수 있다.

다수의 모듈에 공통적으로 나타나는 부분이 존재하는데 이것을 횡단 관심사라고 한다.

코드 = 핵심 관심사 + 횡단 관심사

핵심 관심사는 모듈별로 다르지만 횡단 관심사는 모듈 별로 반복되어 중복해서 나타나는 부분이다.


  • 어떤 기능을 구현할 때 그 기능을 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것을 의미.
1
2
3
핵심 기능?
핵심 기능은 비즈니스 로직이 처리하려는 목적을 말한다.
예를 들면 정보를 데이터베이스에 저장하는것, 데이터를 보여주는 것이 핵심 기능이다.
1
2
부가 기능?
핵심 기능들 사이에 로깅 처리를 하거나 트랜잭션을 처리하는 기능들.

→ AOP는 여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식.


1
2
3
4
5
6
7
A의 하루

키패드로 문을 열고 집에 들어간다.

**컴퓨터로 게임을 한다.**

불을 끄고 잔다.
1
2
3
4
5
6
7
8
9
B의 하루

키패드로 문을 열고 집에 들어간다.

**요리를 한다.**

불을 끄고 잔다.




스프링 프레임워크의 다양한 모듈

  • JDBC, ORM, Transactions, Web, Servlet, Beans, Core 등등 여러개의 모듈을 제공한다.

  • 모든 모듈을 사용할 필요 없이 개발에 필요한 모듈만 선택해서 사용할 수 있다.





Spring Framework vs. Spring Boot

SpringBoot

필요한 모듈을 추가하다보며 복잡해지는 문제를 해결하기 위해 등장한 것이 스프링 부트

공식 사이트 문구
“스프링 부트를 이용하면 단독으로 실행 가능한 상용 수준의 스프링 기반 애플리케이션을 손쉽게 만들 수 있다.”


의존성 관리

스프링 프레임 워크

  • 개발에 필요한 각 모듈의 의존성을 직접 설정

  • 호환되는 버전을 명시해야 정상 동작

  • 애플리케이션에서 사용하는 스프링 프레임워크나 라이브러리의 버전을 올리는 상황에서는
    연관된 다른 라이브러리의 버전까지 고려

→ 스프링 프레임워크나 라이브러리의 버전을 변경하려면 관련된 다른 라이브러리의 호환성까지 확인해야함


스프링 부트

  • ‘spring-boot-starter’라는 의존성을 제공 (종류가 여러 개다)

  • 각 라이브러리의 기능과 관련해서 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공

  • 많이 사용되는 ‘spring-boot-starter’ 라이브러리

    스프링 부트에서는 spring-boot-start-xxx 들로 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공.

    • spring-boot-starter-web : 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성,
      기본으로 내장 톰캣(Tomcat)이 포함돼 있어 jar 형식으로 실행 가능

    • spring-boot-starter-test : JUnit Jupiter, Mockito 등의 테스트용 라이브러리를 포함

    • spring-boot-starter-jdbc : HikariCP 커넥션 풀을 활용한 JDBC 기능을 제공

    • spring-boot-starter-security : 스프링 시큐리티(인증, 권한, 인가 등) 기능을 제공

    • spring-boot-starter-data-jpa : 하이버네이트를 활용한 JPA 기능을 제공

    • spring-boot-starter-cache : 스프링 프레임워크의 캐시 기능을 지원




자동 설정

  • @ComponentScan@EnableAutoConfiguration 어노테이션으로
    @Component 시리즈 어노테이션이 붙은 클래스를 발견해 빈(Bean)을 등록

  • @EnableAutoConfiguration 어노테이션을 통해 다양한 자동 설정이 일부 조건을 거쳐 적용




WAS (Web Application Server)

DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server

HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다.

웹컨테이너 혹은 서블릿 컨테이너라고도 불린다. (즉, WAS는 JSP, Servlet 구동 환경을 제공 )

  • 스프링 부트는 내장 WAS가 존재

  • spring-boot-starter-web의 경우 톰캣을 내장

  • 스프링 부트의 자동 설정 기능이 톰캣에도 적용되어 특별한 설정 없이도 톰캣을 실행할 수 있다.



Web Server

  • 정적인 컨텐츠(html, css, js)를 제공하는 서버
  • 소프트웨어와 하드웨어로 구분
  • 하드웨어 : Web 서버가 설치되어 있는 컴퓨터
  • 소프트웨어 : 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공하는 컴퓨터 프로그램

기능

HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스 하는 기능을 담당
→ Apache Server, Nginx, IIS(Windows 전용 Web 서버) 등등

사용하는 이유

WAS가 해야할 일의 부담을 줄이기 위해서 사용

WAS 앞에 웹서버를 둬서 웹서버에서는 정적인 문서만 처리하도록 하고,
WAS는 애플리케이션의 로직만 수행하도록 기능을 분배하여 서버의 부담을 줄이기 위함

This post is licensed under CC BY 4.0 by the author.