스프링(Spring)이란?
1. 스프링 프레임워크란?
자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이다.
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.
( 출처 : 위키백과 )
- 비즈니스 개체를 관리하는 데 도움이되는 다양한 방법을 제공하는 데 중점을 둠
- Java 데이터베이스 연결 (JDBC), JavaServer Pages (JSP) 및 Java Servlet과 같은 기존 Java 프레임 워크 및 API (Application Programming Interface)에 비해 웹 애플리케이션 개발이 훨씬 쉬워짐
- Spring 개체 관계형 매핑 (Spring ORM). Spring Web Flow 및 Spring Web MVC 등이 있음
- 웹 응용 프로그램을 구성하는 동안 이러한 모듈을 별도로 사용 가능
- 모듈은 웹 응용 프로그램에서 더 나은 기능을 제공하기 위해 함께 그룹화 가능
※ Spring의 특징
1. IoC (Inversion of Control, 제어반전)
개발자는 코딩 시 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성하고 소멸시킨다.
IoC란 인스턴스의 생성부터 소멸까지의 생명주기 관리를 개발자가 아닌 Spring이 대신 해주는 것이다.
쉽게 말해 제어권이 개발자에게 있는 것이 아닌 IoC에게 있으며 IoC가 개발자의 코드를 호출하여 생명주기를 제어하는 것이다.
2. DI (dependency injection, 제어반전)
프로그래밍에서 구성요소 간의 의존관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식이다.
코드의 재사용을 높이고 소스코드를 다양한 곳에서 호출해 사용할 수 있으며 모듈간의 결합도를 낮출 수 있다.
데이터를 저장하고 가져오는 기능을 외부 데이터베이스를 사용할 수 있고 필요한 부분을 뺏다 꼈다 하면서 적절한 상황에 필요한 기능을 해낼 수 있다.
3. AOP (Aspect Object Programming, 관점 지향 프로그래밍)
로깅, 트랜잭션, 보안 등 공통적으로 사용하는 기능을 분리하고 관리할 수 있다.
여러 클래스를 생성하고 클래스마다 서로 코드와 기능들의 중복되는 부분을 최대한 배제하고, 기능을 사용할 때만 호출하여 관리하기 때문에 효율성이 좋다.
4. POJO 방식: Plain Old Java Object 의 약자, 말그대로 기존의 일반적인 java 코드를 이용해서 프로그래밍이 가능하다. 기존의 프레임워크(Java EE)의 방식에선 미리 설계되어있는 인터페이스나 클래스를 상속받아 무거운 객체들을 만들어야만 했는데, 그럴 필요가 없이 일반적인 java코드로만으로도 객체를 구성할 수 있게된다. 따라서 더 유연한 프로그래밍이 가능해지며 가볍고 생산성이 높아진다.
※ 프레임워크 vs 라이브러리
◎ 라이브러리(=자원)
라이브러리는 개발에 필요한 기능이 있을 때 직접 가져와 사용할 수 있도록 자주 사용되는 기능들을 모아 미리 구현해 둔 것이다.
예를 들어 자바에서는 문자열을 사용할 때 String name = "Jenny" ; 이렇게 사용한다. String은 java.lang.String 에 미리 만들어져있는 기능이고 우리는 java.lang.String 이라는 라이브러리에서 기능을 가져와 사용하는 것이다.
◎ 프레임워크(=구조)
프레임워크도 개발에 필요한 기능이 미리 구현되어 있는 것이다. 하지만 프레임워크에는 라이브러리와 달리 기본틀이 정해져있다. 때문에 제약없이 사용할 수 있는 라이브러리와 달리 프레임워크는 정해진 틀 안에서 미리 구현 된 기능을 사용해야한다.
◎ 프레임워크, 라이브러리 차이 정리
프레임 워크, 라이브러리의 가장 큰 차이는 "흐름을 누가 결정하는가" 이다. 라이브러리는 개발자가 직접 프로그램의 흐름을 결정하지만 프레임워크는 정해진 흐름에 맞게 개발자가 프로그램을 개발한다.
즉, 내가 코드를 컨트롤한다면 라이브러리, 내 코드를 컨트롤한다면 프레임워크다.
2. Spring MVC란?
◎ MVC란?
Model - View - Controller 의 줄임말
Spring의 MVC 구조를 살펴보면 아래와 같다.
- Spring은 확장 가능한 애플리케이션을 만드는 데 널리 사용 되는 Spring MVC 프레임 워크를 제공
- Spring MVC 프레임 워크는 Model View, Controller라는 모듈의 분리를 가능하게하고 애플리케이션 통합을 원활하게 처리
- 개발자는 일반 Java 클래스를 사용하여 복잡한 응용 프로그램을 만들 수 있음
- 모델 객체는 맵을 사용하여 뷰와 컨트롤러간에 전달
- 각 구조에 대해 보면 크게 View, Controller, Service, DAO, DTO로 이루어져있다. 이 외에도 DispatcherServlet, servlet-context가 있지만 우선 위 구조만 살펴본다.
- View
말 그대로 사용자에게 보여지는 화면을 View라고 한다. Spring에서는 JSP를 통해 화면을 구성하고 Controller를 통해 백엔드 서버와 연결한다. - Controller
View와 Service 사이를 연결한다. 클라이언트에서 입력한 URL에 맞는 View를 보여주고, View에서 처리하는 데이터를 Service로 전달해준다. - Service
실제 로직을 처리하는 곳으로 모든 기능은 Service에서 만들어진다. Controller를 통해 화면과 연결되고, DAO를 통해 데이터베이스와 연결된다. - DAO
Data Access Object의 줄임말인 DAO는 프로젝트와 데이터베이스를 연결한다. Mapper에 SQL을 명시한뒤 Mapper와 함께 데이터베이스와 데이터를 주고받는다. - DTO
Data Transfer Object의 줄임말이고 VO(Value Object)라고도 불리는 DTO는 MVC 구조 사이사이에서 데이터 교환을 위한 오브젝트이다. 특이하게 getter/setter 두가지 함수만 가지고 있으며 주로 데이터베이스 테이블과 매칭된다.
(DTO와 VO가 완벽하게 같은 말은 아니지만 크게 차이를 두진 않는다.)
3. 스프링 부트(Spring Boot)
개발 속도가 느리고 비대했던 스프링 프레임워크를 좀 더 빠르게 만드는데 집중하기 위해 개발된 프레임워크가 스프링부트!
※ Spring Boot의 4계층
- Presentation Layer : 이름에서 알 수 있듯이 view (예 : front-end 부분)로 구성
- Data Access Layer : 데이터베이스에 대한 CRUD (create, retrieve, update, delete)
- Service Layer : 서비스 클래스로 구성되며 데이터 액세스 계층에서 제공하는 서비스를 사용
- Integration Layer : 웹별 웹 서비스 (인터넷을 통해 사용 가능한 모든 서비스 및 XML 메시징 시스템 사용)로 구성
※ Spring Boot의 장점
1. 라이브러리 관리의 자동화
스프링부트 Starter 라이브러리를 등록해서 의존성을 간단하게 관리할 수 있다.
2. 라이브러리 버전 자동관리
SpringFramework 에서는 버전을 일일이 입력해주어야 했지만 SpringBoot 에서는 xml 설정파일에 버전을 입력하면 스프링 라이브러리 뿐만 아닌 서드파티 라이브러리들도 호환되는 버전으로 알아서 다운로드 한다.
3. SpringFramework 설정 자동화
SpringBoot는 @EnableAutoConfiguration 어노테이션을 선언하면 스프링에서 자주 사용했던 설정들을 알아서 등록한다.
4. 내장 Tomcat 사용 가능
SpringBoot는 Tomcat을 내장하고 있기 때문에 @SpringBootApplication 어노테이션이 선언되어 있는 클래스의 main() 메소드를 실행하는 것으로 서버를 구동할 수 있다.
특별한 설정도 없다. Web Starter 의존성만 추가하면 된다.
5. 독립 실행 가능한 JAR 배포
웹 프로그래밍이라면 WAR 파일로 패키징해야 하지만 SpringBoot는 내장 톰캣을 지원하기 때문에 JAR 파일로 패키징해서 배포가 가능하다.
spring | spring boot | spring MVC |
엔터프라이즈 애플리케이션을 개발하는 오픈 소스 경량 프레임 워크 | REST API를 개발하는 데 널리 사용되는 기존의 스프링 프레임 워크 위에 빌드 | Model View이며 웹 애플리케이션 개발에 널리 사용되는 Controller 기반 웹 프레임 워크 |
의존성 주입 | 자동 구성 | 수동으로 빌드 |
명시 적으로 서버를 설정 | Tomcat 및 Jetty 등과 같은 임베디드 서버를 제공 | |
실행 시 배치 디스크립터가 필요 | 배치 디스크립터에 대한 요구 사항은 없음 | 배치 디스크립터가 필요 |
개발자는 많은 코드를 작성 | 코드 줄일 수 있음 , 개발 시간을 줄이고 생산성을 높임 | 개발에 더 많은 시간이 걸림 |
메모리 내 데이터베이스에 대한 지원을 제공하지 않음 | H2와 같은 메모리 내 데이터베이스에 대한 지원을 제공 | |
Presentation Layer, Data Access Layer, Service Layer, Integration Layer | Model, View, Controller, Front Controller |
정리하는데 참고한 사이트
1. https://velog.io/@duckchanahn/Spring-%EC%9D%B4%EB%A1%A0%EC%A0%95%EB%A6%AC
2. http://dawoonjeong.com/spring-spring_mvc-vs-spring_boot-vs-spring_mvc
3. https://www.wrapuppro.com/programing/view/Zt85y5DzRUgwpXE
'Spring' 카테고리의 다른 글
Redis란? (0) | 2021.12.20 |
---|---|
IoC, DI 그리고 컨테이너 (0) | 2021.11.12 |
IntelliJ 단축키 정리 (0) | 2021.11.11 |
좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2021.11.10 |
H2 Console 접속 에러 (0) | 2021.11.04 |