Spring 정의와 SpringBoot의 장점 그리고 SpringBoot vs Spring Framework 차이점 알아보기
Java 개발자가 자바를 공부하고 프로그래밍을 할 때 선택해야 할 필수인 Spring에 대해 소개하고, Spring을 더 편하게 관리하고 쉽게 사용할 수 있는 프레임워크와 Spring Framework에서 더 진화한 SpringBoot를 알아보도록 한다.
5년 전과 비교했을 때 Java 를 선택하지 않아도 요즈음은 다양한 서버 언어 및 Back End 기술들을 사용할 수 있다.
그러나, 아직도 Java는 모든 시장 점유율 80% 이상을 사용하고 있는 만큼 Java를 사용하는 개발자라면 꼭 SpringFramework와 SpringBoot를 사용하는 방법과 이유를 알아야 할 것이다.
Java Spring 이란 무엇인가?
Java의 웹 프레임워크로 Java언어 기반으로 다양한 어플리케이션을 만들기 위한 툴이다.
JSP 서블릿과 데이터베이스 커넥션을 연결해주는 Mybatis, JPA 등 이런 기술들을 더 편하게 사용하기 위해 만들어진 것이다.
Spring을 사용하여 다른 개발자의 코드를 참조하여 쓰기 편리하고 오픈소스를 활용하여 효율적으로 가져다 쓰기 좋은 구조이다.
이렇게 효율적으로 관리하기 위해 Spring은 특징이 존재하는데 IoC (Inversion of Control, 제어반전), DI (dependency injection, 제어반전), AOP (Aspect Object Programming, 관점 지향 프로그래밍) 등이 있다.
1. IoC (Inversion of Control, 제어반전)
개발자는 코딩 시 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성하고 소멸시킨다.
IoC란 인스턴스의 생성부터 소멸까지의 생명주기 관리를 개발자가 아닌 Spring이 대신 해주는 것이다.
쉽게 말해 제어권이 개발자에게 있는 것이 아닌 IoC에게 있으며 IoC가 개발자의 코드를 호출하여 생명주기를 제어하는 것이다.
2. DI (dependency injection, 제어반전)
프로그래밍에서 구성요소 간의 의존관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식이다.
코드의 재사용을 높이고 소스코드를 다양한 곳에서 호출해 사용할 수 있으며 모듈간의 결합도를 낮출 수 있다.
데이터를 저장하고 가져오는 기능을 외부 데이터베이스를 사용할 수 있고 필요한 부분을 뺏다 꼈다 하면서 적절한 상황에 필요한 기능을 해낼 수 있다.
3. AOP (Aspect Object Programming, 관점 지향 프로그래밍)
로깅, 트랜잭션, 보안 등 공통적으로 사용하는 기능을 분리하고 관리할 수 있다.
여러 클래스를 생성하고 클래스마다 서로 코드와 기능들의 중복되는 부분을 최대한 배제하고, 기능을 사용할 때만 호출하여 관리하기 때문에 효율성이 좋다.
SpringFramework 란 무엇인가?
프레임워크는 어떠한 목적을 달성하기 위해 복잡하게 되어있는 구조의 문제를 해결하기 위한 규칙 또는 약속을 하고 소프트웨어 개발함에 있어서 뼈대의 역할을 한다.
즉, 프레임워크는 자주 쓰일만한 기능들을 한곳에 모아놓은 관리툴 (유틸)들의 모음이라고 정의할 수 있다.
확장이 가능한 코드와 이 코드를 개발자의 사용성에 맞게 수정, 확장하는데 필요한 라이브러리 요소를 통합하여 제공한다.
쉽게 말해서, 기본적인 설계나 필요한 라이브러리는 알아서 제공해줄께~ 개발자는 만들고 싶은 기능을 만들어~ 라는 취지이다.
SpringBoot 란 무엇인가?
SpringBoot는 SpringFramework 기반의 프로젝트를 복잡한 설정없이 쉽고 빠르게 만들어주는 라이브러리이다.
SpringFramework에서는 Spring, mybatis, logging 등 여러 xml 파일을 개발자가 설정해야 하고 설정방법을 까먹었을 때 일일이 구글링을 통해 찾아서 설정해야 했다.
하지만 SpringBoot를 사용하면 복잡한 설정 없이 쉽고 빠르게 SpringFramework를 사용할 수 있다.
SpringBoot 의 장점?
1. 라이브러리 관리의 자동화
스프링부트 Starter 라이브러리를 등록해서 의존성을 간단하게 관리할 수 있다.
2. 라이브러리 버전 자동관리
SpringFramework 에서는 버전을 일일이 입력해주어야 했지만 SpringBoot 에서는 xml 설정파일에 버전을 입력하면 스프링 라이브러리 뿐만 아닌 서드파티 라이브러리들도 호환되는 버전으로 알아서 다운로드 한다.
3. SpringFramework 설정 자동화
SpringBoot는 @EnableAutoConfiguration 어노테이션을 선언하면 스프링에서 자주 사용했던 설정들을 알아서 등록한다.
4. 내장 Tomcat 사용 가능
SpringBoot는 Tomcat을 내장하고 있기 때문에 @SpringBootApplication 어노테이션이 선언되어 있는 클래스의 main() 메소드를 실행하는 것으로 서버를 구동할 수 있다.
특별한 설정도 없다. Web Starter 의존성만 추가하면 된다.
5. 독립 실행 가능한 JAR 배포
웹 프로그래밍이라면 WAR 파일로 패키징해야 하지만 SpringBoot는 내장 톰캣을 지원하기 때문에 JAR 파일로 패키징해서 배포가 가능하다.
SpringFramework와 SpringBoot의 정의, 장점을 알아보았다.
매번 복잡한 설정을 해야하고 귀찮은 작업을 SpringBoot가 등장하고 너무 편해졌다.
SpringBoot는 선택이 아닌 필수가 되어버렸다.
SpringBoot 스터디와 관련된 내용은 아래 링크를 참고하기 바란다.
Spring Boot + JDBC Driver 설정, Mybatis Datasource 연동하기
Spring Boot + DataSource HikariCP 커넥션 풀
Spring Boot 에서 Log4j2 Gradle 사용하기
Spring Boot :: Freemarker 템플릿 뷰 사용하기