Spring 특징과 장점

2022. 9. 17. 22:12자바 & Spring

Spring 이란?

위키백과에는 다음과 같이 나와있다.

  • 자바 플랫폼을 위한 오픈소스 어플리케이션 프레임워크.
  • 동적인 웹 사이트를 개발하기 위한 여러가지 서비스를 제공한다.

즉 스프링은 많은 프레임워크들 중 하나로, 자바로 어플리케이션을 만들 수 있다.

수많은 Framework 중 스프링은 어떤 장점이 있을지 알아보자.

 

 

1. POJO 기반의 구성

 

POJO 란?

  • Plain Old Java Object
  • 특정 라이브러리나 컨테이너 기술에 종속적이지 않게 개발.
  • 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어

오래된 방식의 자바 객체라는 말로, Java EE 같은 중량 프레임워크를 사용하는 것에 반발해 나온 용어라고 한다.

예를 들면 자바 ORM(Object Relationship Mapping)이 나왔을 때 그 ORM 프레임워크를 사용해 개발하는 건 POJO가 아니다.

특정 기술인 ORM에 종속되었기 때문.

  • 환경에 종속적이지 않다.

특정 기업의 서버나 프레임워크에서만 동작가능한 코드라면 POJO가 아니다. 환경에 독립적이어야 한다.

 

POJO의 장점

  • 깔끔한 코드
  • 객체지향적으로 설계, 프로그래밍할 수 있다.
  • 테스트가 쉬움

 

2.  내장 서버

Spring Boot 는 기본적으로 tomcat이라는 WAS(Web Application Server)를 내장하고 있다.

(내장서버는 얼마든지 바꿀 수 있음.)

 

Spring Boot란?

  • 스프링에 톰캣 서버를 내장, 여러 어노테이션 등 편의기능을 추가한 프레임워크.
  • 개발할 때 대부분 SpringBoot를 사용한다.

 

톰캣은 아파치(Apache) 사에서 개발한 어플리케이션 서버다.

 

웹 서버 & 웹 어플리케이션 서버

우리가 흔히 웹 페이지에서 보는 모든 것은 HTML(hyper text Markup Language) 이다. 

html을 http (hypertext protocol) 라는 통신규약에 의해 전송하게 된다.

 

 • HTML, TEXT

 • IMAGE, 음성, 영상, 파일

 • JSON, XML(API)

 

거의 모든 형태의 데이터를 전송 가능하며 서버간에 데이터를 주고 받을 때도 HTTP를 많이 사용한다.

 

웹 서버는 정적인 리소스를 관리하는데 주력하고,

WAS(Web Application Server)는 어플리케이션의 로직을 실행하는데 주력한다.

 

 

서버에서 처리해야 하는 업무는 다음과 같다.

 

• 서버 TCP/IP 연결 대기, 소켓 연결

• HTTP 요청 메시지를 파싱해서 읽기

• 어떤 방식으로 request 했는지? (GET인지, POST 인지......), Content-Type 확인

• HTTP 메시지 바디 데이터를 사용할 수 있게 파싱

 

• 저장 프로세스 실행

• 비즈니스 로직 실행 

데이터베이스에 요청

 

• HTTP 응답 메시지 생성

• 메시지 바디에 HTML 생성에서 입력

• TCP/IP에 응답 전달, 소켓 종료

 

 

이 많은 것들을 개발자가 처음부터 끝까지 처리해야 한다면 어떨까? 정말 지옥.....일듯.

 

하지만 우리는 WAS가 있기 때문에 의미있는 노란색 배경의 로직만 작성하면 된다.

스프링부트는 tomcat이 기본적으로 내장되어 있어 이 tomcat이 해당 URI에 맞는 Servlet을 호출

 

 

 

 

 

브라우저가 url : "/hello" 로 요청을 보내면 WAS는 이 요청 메시지를 기반으로 request, response 객체를 생성하고

개발자는 request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용한다.

response 객체를 이용해 개발자는 http 정보를 편리하게 입력, 응답을 편리하게 보낼 수 있다.

 

이처럼 자바에서 지원하는 서블릿을 활용해 개발자는 http 스펙을 편리하게 사용할 수 있다.

이것이 스프링의 큰 장점이라고 할 수 있다.

 

 

톰캣은 단일 쓰레드인 것처럼 코딩하게 해준다.

어플리케이션 코드를 하나하나 실행하는 것은 쓰레드이다. 

자바의 실행하게 되면 처음으로 main 쓰레드가 실행.

쓰레드는 한 번에 하나의 코드라인만을 실행하므로 동시처리가 필요할 때에는 쓰레드를 추가로 생성해야 하는데, 

쓰레드를 생성하는데 많은 비용이 들기 때문에 보통 쓰레드풀(threadPool)에 쓰레드를 한꺼번에 만들어 놓고 한데 모아둔다.

 

브라우저에서 요청이 들어올 때마다 하나씩 쓰레드를 꺼내쓰고, 하나의 요청에 대해 응답이 완료되면 그 쓰레드를 반환한다.

쓰레드 풀에서 쓰레드의 최대 갯수를 설정 할 수 있고, (톰캣은 기본값이 200개) 이 방식은 쓰레드를 생성, 종료하는 비용(CPU)를 아낄 수 있고 응답시간이 빠르다는 장점이 있다.

 

WAS는 멀티 쓰레드 환경에 대한 지원을 해준다. 요즘 프로그램은 거의 멀티쓰레드 환경이다.

따라서 개발자는 멀티쓰레드 환경이어도 싱글 쓰레드 프로그래밍 하듯이 코드를 개발하면 된다. 

 

 

3. MVC 패턴

스프링은 디자인 패턴에는 MVC 라는 것이 있다.

이는  객체 지향적인 설계를 도와주고, 무엇보다 편리하다.

  • Model
    • 어플리케이션의 데이터가 저장되는 곳. 모든 데이터 정보를 가공하여 가지고있는 Component 이다.
    • 주로 Controller에서 Model 에 값을 저장하면 View 에서 꺼내 쓸 수 있음
  • View
    • 화면에 html 페이지를 렌더링 할 수 있다.
    • Controller 에서 해당 View로 이동하게 한다.
  • Controller
    • 핵심 비즈니스 로직을 구현
    • Model 과 View를 연결해준다.

 

Spring MVC 는 인터페이스와 구현을 따로 분리하여 설계하여 유지 보수에도 매우 강하다.

이는 다형성을 잘 활용한 것이고, 확장성있게 프로그램을 잘 설계할 수 있다는 말이 됨.

 

 

 

4.  DI (Dependency Injection) , Ioc(Inversion of control)

DI(의존관계 주입)를 통해 스프링 내부의 객체들의 관계를 정해준다.

 

정의할 때 역할(인터페이스)과 구현(구현클래스)을 명확히 나누어 놓고, 스프링 컨테이너가 클래스를 스프링 빈으로 등록, 인터페이스에 구현 클래스를 자동으로 주입해준다. 이는 @Autowired 어노케이션을 붙이면 된다.

 

개발자가 직접 의존관계를 정하는 것이 아니라 외부(스프링 컨테이너)에서 자동으로 의존관계를 주입해준다고 해서 제어의 역전, Inversion of Control (IoC) 라고 부른다.

 

DI를 사용하면 결합도가 낮아져 코드 수정이 쉬워진다.

비즈니스 로직이나, 클라이언트 코드에서 역할(인터페이스) 에만 의존할 수 있게 만들고, 구현(구체적인 클래스)은 외부에서 주입해주기 때문에, 변경과 확장에도 용이하다. 즉 객체 지향적인 개발을 할 수 있게 되는 것이다.

 

'자바 & Spring' 카테고리의 다른 글

빈 생명주기 콜백  (0) 2022.10.26
컴포넌트 스캔, 의존관계 자동 주입  (2) 2022.09.25
싱글톤(singleton) 패턴  (0) 2022.09.24
JUnit 단위 테스트  (0) 2022.09.07
타임리프(thymeleaf)  (0) 2022.05.04