티스토리 뷰
스프링 프레임워크.
웹 개발자를 시작하면서 들어보았고 시중에도 관련 서적들이 정말 많이 나온 프레임워크 중 하나이다.
또, 일부 사람들은 알다시피 eGov Framework(전자정부프레임워크)도 Spring을 기반으로 만들어진 프레임워크이다.
대체 왜 이렇게 유명할까?
그 전에 스프링 프레임워크의 역사부터 알아보아야겠다.
스프링 프레임워크는 2004년 3월에 처음으로 생성이 되었고,
처음에는 동적인 웹 사이트를 개발하기 위한 목적으로 만들어진 컨테이너의 역할을 하는 도구였다.
물론 자바 플랫폼을 처음부터 지원했기에
현재 JVM에서 사용이 가능한 Kotlin 언어도 Spring Framework의 사용이 가능하다.
기본 원리(목적)
1. Open Source
소프트웨어 혹은 하드웨어 제작자의 권리를 지키며
원시코드를 누구나 열람할 수 있도록 한 소프트웨어
2. Framework
개발 시 설계의 기본이 되는 뼈대나 구조/환경을 제공해 줌
JavaBean 을 생성/소멸시켜주고 조립이 가능
3. POJO(Plain Old Java Object)
오래된 방식의 간단한 자바 오브젝트라는 의미
Java EE(Enterprise Edition) 등의 중량 프레임워크가 아닌 일반 사용자들도 가볍게 사용하도록 개발
특징
1. 경량 컨테이너로서 자바 객체를 직접 관리
각각의 객체의 Life cycle을 관리한다. (단, GC에 너무 의존적이면 안된다)
2. 제어 역행 (IoC: Inversion of Control)
애플리케이션의 느슨한 결합을 도모하여 제어권이 사용자가 아닌 프레임워크에 있다
따라서, 필요에 따라 스프링에서 사용자의 코드를 호출한다
3. 의존성 주입 (DI: Dependency Injection)
각각의 계층이나 서비스들 간에 의존성이 존재하면 프레임워크가 서로 연결해준다
4. 관점 지향 프로그래밍 (AOP: Aspect-Oriented Programming)
트랜잭션, 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다
5. 트랜잭션 관리
추상화된 트랜잭션 관리를 지원한다.
설정파일 (xml, java, property 등) 을 이용한 선언적인 방식 및 프로그래밍을 통한 방식 모두를 지원한다
6. MVC (Model - View - Controller)
웹 프로그래밍 개발의 표준적인 방식인 'Spring MVC'를 사용한다
DispatcherServlet 의 Controller 역할을 담당하며 각종 요청을 적절한 서비스에 분산시켜준다
Service 들은 결과를 생성하고 다양한 형식의 View로 사용자에게 표시해준다
7. Batch
Build가 되어 메모리에 상주하고 있을 때, 타이머에 맞추어 자동으로 돌아가는 기능을 제공해준다
기본적으로 Spring Batch는 Quartz 기반으로 작동한다. (Job 기반)
참고
AOP: https://engkimbs.tistory.com/746
Quartz: https://homoefficio.github.io/2018/08/12/Java-Quartz-Scheduler-Job-Chaining-%EA%B5%AC%ED%98%84/
그럼 이와 비슷한 스프링 부트는 또 무엇일까?
스프링 부트(Spring boot) 는 스프링의 프로젝트 중 하나인데,
XML 방식으로 되어 있는 소스를 간단히 실행시킬 수 있는 실행기 역할을 한다.
기본적으로 내장 WAS(Apache Tomcat, Jetty 등)을 가지고 있어 스스로 배포가 되고 실행된다.
때문에 테스트가 정말 편리하다.
이전에는 server.xml 에 Port 번호를 명시하여 해당 포트로 Tomcat을 버전에 맞게 설치하고
Tomcat이 뻗기 전까지 최대한 로컬 테스트를 진행해본 경험이 있는데,
이제는 Spring Framework에서 기본적으로 제공해주어 그렇게 힘들게 개발할 필요가 없다.
Spring Boot의 특징은 다음과 같다.
* 단독 실행 가능한 웹 어플리케이션
* 내장형 Tomcat, Jetty, Undertow 장착
* 웹의 기본 Dependency인 starter 컴포넌트들을 쉽게 추가
* 환경설정이 자동화
* 필요에 따라 통계, 상태 점검(Health Check) 을 지원
* XML 코드를 생성하거나 요구하지 않음
또한, 요새는 시스템이 정말 잘 되어 있어서 마우스 클릭만으로도
원하는 DI를 하고 프로젝트 생성이 가능하다.
나도 자주 애용하는 페이지로서 프로젝트를 생성하는 곳의 링크는 아래와 같다
기본적으로 프로젝트를 생성하면 SpringBootApplication 어노테이션(@SpringBootApplication) 을 가지고 있는
메인 함수 클래스가 있으며 해당 클래스를 run 시키면 Spring Boot에 자동으로 배포가 진행되며 실행이 된다
Maven에서 application.properties를 사용한다면,
Gradle에서는 application.yml (YAML) 파일을 사용하여
웹 어플리케이션 서버의 환경설정 값들의 세팅이 가능하다
이 파일내에서는 server.xml 및 web.xml 에서 사용하던 환경 변수들의 설정값들도 변경이 가능하다
어노테이션 및 환경 변수 값들은 다시 설명 글을 올려야겠다!
'Server' 카테고리의 다른 글
[Java] NPE와 Optional Class (1) | 2019.10.26 |
---|---|
[Java] Lambda와 Stream(2) (0) | 2019.10.15 |
[Java] Lambda와 Stream(1) (2) | 2019.10.15 |
REST의 정체는? (1) | 2019.10.15 |
[Spring] Annotation과 MVC (1) | 2019.09.17 |
[Spring] Maven vs Gradle (1) | 2019.09.16 |