스프링이란? 스프링과 스프링 부트의 차이점은?

취업 후 학습|2023. 6. 20. 14:26
728x90

이미 Spring Boot를 이용한 웹 업무를 하고 있지만 유지보수 수준이기 때문에 구체적인 이해가 부족한 듯싶어 처음부터 정리할 겸 작성하기로 했다.

 

Spring 이란?


Spring은 Java 개발을 편하게 해주는 프레임워크이며 웹 MVC 모듈을 제공하여 동적인 웹을 효과적으로 제작할 수 있다.

 

또한 ORM(JPA, Mybatis)과 같은 모듈들을 보다 편하게 사용할 수 있다는 장점이 있다.

 

이때 ORM은 Object Relational Mapping의 약자로 객체와 관계형 데이터 베이스의 데이터를 자동으로 Mapping 해주는 것을 뜻한다.

 

추가적으로 https://start.spring.io/ 해당 사이트에서 초기 프로젝트를 생성하는 서비스를 제공하기도 한다.

 

Spring은 자바 객체의 생명 주기를 관리하기 때문에 사용자는 컨테이너에서 필요한 객체를 가져와 사용만 하면 된다는 편리함이 있으며 대표적인 특징으로는 DI, IOC가 있다. 

 

DI는 Dependency Injection(의존성 주입)의 약자로 어떤 객체를 사용하는 주체가 객체를 직접 생성하는 것이 아니라 Spring에서 생성한 객체를 주체에게 주입시켜 주는 방식을 뜻한다.

 

객체를 직접 생성하게 되면 수정 사항이 생길 때마다 수정할 부분이 많아지는데(의존성이 높아지는데) Spring에서 생성하게 되면 Interface를 기반으로 관리하기 때문에 수정할 부분이 줄어든다(의존성이 낮아진다).

 

이때 Interface를 사용하는 이유는 Controller 단에서 직접 Service를 바라보는 게 아닌 Interface를 바라보고 있는데 Interface에 대한 실제 구현체가 Service단에 있으므로 Runtime 직전까지는 실제 구현체를 알지 못한다.

 

따라서  Controller 단에서는 실제 비즈니스 로직에 대해 알 필요가 없고 Interface의 메서드로만 로직을 구성하면 된다.

 

반대로 Service 단에서는 Interface의 규칙만 잘 지킨다면 언제든 로직 변경이 가능하고 새로운 클래스로 대체도 가능하기 때문에 의존성이 낮아져 확장성이 높다는 장점이 있다.

 

IOC는 Inversion Of Control(제어의 역전)의 약자로 간단하게 말하자면 사용자의 제어권을 Spring에게 넘기는 것을 뜻한다.

 

일반적인 Java Programming의 흐름은 사용자가 직접 객체를 생성하고 메서드를 호출하는 방식이었지만 Spring에서는 Spring이 객체를 생성하고 주입하여 객체의 메서드를 호출하는 방식이다.

 

따라서 Spring이 실행될 때 모든 의존성 객체를 생성하고 필요한 곳에 주입해 준다.

 

Spring과 Spring Boot의 차이점


결론부터 말하자면 Spring Boot는 Spring의 복잡성을 줄인 업그레이드 버전이라고 생각하면 된다.

 

Spring은 Dependency 설정을 위해 https://mvnrepository.com/ 같은 곳에서 일일이 찾아야 하고 버전 관리도 직접 해야 해서 번거롭고 복잡하지만 Spring Boot는 spring-boot-starter를 통해 자동으로 설정할 수 있어 훨씬 더 짧은 시간에 비교적 간단하게 실행할 수 있다.

 

또한 Spring은 주로 maven 기반의 Java Application을 만드는 데 사용하지만 Spring Boot는 Gradle 기반의 REST API 개발에 사용하며 톰캣 같은 WAS가 내장되어 있어 쉽게 Web Application 구동이 가능하며 실행 가능한 JAR 파일 생성도 가능하여 자바 옵션만으로 쉽게 배포가 가능하다.

 

정리하자면 Spring은 프레임워크를 보다 세밀하게 제어하는 경우, Spring Boot는 빠르게 간단하게 Application 개발을 하는 경우에 적합하다.

 

 

728x90

댓글()