Study/Spring Boot

스프링(Spring)이란 무엇인가?

sowon02 2025. 7. 3. 17:41

1. 스프링 정의

: 스프링은 자바 기반의 웹 애플리케이션 개발을 쉽고 효율적으로 해주는 프레임 워크이다.

- 자바로 웹, API, 백엔드 서버를 개발할 때 빠르고 편리하게 만들어주는 오픈소스 프레임워크이다. 

- 복잡한 설정과 반복 작업을 줄여 개발자가 비즈니스 로직에 집중할 수 있도록 도와준다.

- 스프링은 개발자가 직접 객체 생성, 연결, 설정을 일일이 하지 않아도 되게 해주어 개발을 훨씬 편하게 만들어준다는 것이다. 

 

2. 스프링 역사 & 사용 이유

조금 길어질 수 있지만, 스프링과 스프링 부트를 사용하게 된 역사를 먼저 이해해보자. 역사를 이해하면 왜 사용하는지가 납득될 것이다. 

 

  1) 초창기 자바 웹 개발: Servlet과 JSP

자바로 웹 개발을 처음 시작할 때는 서블릿과 JSP를 사용했다.

- 클라이언트가 요청을 보내면 서블릿이 이를 처리하고, JSP로 화면을 보여주는 구조

- 모든 HTTP 요청과 응답, 파라미터 처리, 객체 생성과 관리, 세션 관리 등을 개발자가 직접 처리

- 규모가 커질수록 코드가 복잡해지고 유지보수 어려움 

 

  2) EJB 시대: 복잡함의 시대

자바 엔터프라이즈 개발의 표준으로 EJB(Enterprise Java Beans)가 등장했다.

- 분산 트랜잭션, 보안, 데이터베이스 연결 등의 엔터프라이즈 기능을 제공

- 하지만 설정파일(XML)이 너무 복잡했고, 개발과 배포 과정이 느리고 무거움

- 개발 생산성이 낮아지고, 작은 수정에도 빌드와 배포 시간이 길어짐 

 

요약 : EJB는 강력했지만 너무 무겁고 개발 속도가 느려서 실무에서 불편했음 

 

  3) 스프링(Spring) 등장 (2002~2004)

이 문제를 해결하기 위해 로드 존슨(Rod Johnson)이 "Expert One-on-One J2EE Design and Development" 책을 통해 제시한 것이 스프링 프레임 워크였다. 

 

스프링의 목표는 :

- EJB의 무거움과 복잡함을 벗어나자 

- 경량화된 엔터프라이즈 개발 환경 제공하자

- IoC/DI 기반으로 객체 생성 및 의존성 관리 자동화하자

- 트랜잭션 처리, AOP, 보안 기능을 필요한 만큼 가볍게 사용 가능하도록 하자

 

이로 인해 생산성은 높이면서도 유연하고 유지보수가 쉬운 개발 환경이 가능해졌다. 

 

  4) 스프링의 한계 (2010년대 초반)

스프링은 유연하고 강력했지만, 초기 설정이 복잡하고 XML/Java Config 설정 파일이 너무 많아지는 한계가 있었다. 

예를 들어, MVC 설정, 데이터베이서 연결 설정, 트랜잭션 설정, 스프링 빈 등록 등등을 모두 설정해야만 실행이 가능했고, 프로젝트를 시작할 때 설정만으로 며칠을 써야하는 경우도 있었다(내가 본 영상에서는 초기 설정에서 에러가 나 2주동안 붙잡고 있었다고 한다...). 여러 라이브러리 버전 충돌 문제도 자주 발생했다. 

 

  5) 스프링 부트(Spring Boot) 등장 (2014)

이러한 문제를 해결하기 위해 스프링 팀(Pivotal, 현재 VMware)이 개발한 것이 스프링 부트(Spring Boot)이다.

 

스프링 부트의 핵심 목표:

- 설정 최소화 : 복잡한 XML, 자바 설정 파일 없이도 최소 설정으로 실행 가능하게 하자

- 의존성 관리 : 라이브러리 버전 충돌 없이 Spring Boot Starter로 통합 관리

- 내장 톰캣 제공 : 별도의 서버 설정 없이 main()으로 바로 서버 실행 가능

- 빠른 개발 : REST API 서버, 웹 애플리케이션, 배치 작업 등을 빠르게 개발 가능

- 운영 환경 배포 용이 : JAR 파일 하나로 AWS, GCP 등에 쉽개 배포 가능

 

결국 스프링의 유연성과 강력함은 유지하면서, 불필요한 설정과 진입 장벽을 낮춘 것이 스프링 부트이다. 

 

  스프링과 스프링 부트를 사용하는 이유 

- 객체 생성, 의존성 주입, 라이프 사이클 관리를 대신해 주어 생산성을 높임. 

- 설정과 반복 작업을 최소화해 코드가 깔끔해짐.

- 트랜잭션, 보안, 데이터 접근 등을 쉽게 처리함.

- 유연하고 확장성이 높아 다양한 프로젝트에 적용 가능함. 

 

특히, 스프링은 단순히 "코드 줄이기"가 아니라, 협업과 유지보수를 위한 구조를 잡아주는 역할이 크다. 

 

3. 주요 특징

1) IoC (제어의 역전, Inversion of Control)

: 객체의 생성과 의존성 주입을 스프링 컨테이너가 대신 관리해주는 것.

개발자는 필요한 객체를 생성하는 것이 아니라 요청만 하면 된다. 

IoC 컨테이너의 핵심 구현체가 ApplicationContext.

 

2) DI (의존성 주입, Dependency Injection)

클래스 간 의존 관계를 스프링이 주입해 주어 결합도를 낮추고 유연성을 높임.

생성자 주입, 필드 주입, setter 주입 방식 등이 있다. 

 

 * 의존이란 ?

한 클래스가 다른 클래스의 메서드를 실행하거나 데이터를 사용하여, 변경에 의해 영향을 받는 관계를 의미한다. 

 

3) AOP (관점 지향 프로그래밍, Aspect Oriented Programming)

로깅, 트랜잭션 처리, 보안, 예외 처리처럼 공통 기능을 분리하여 모듈화할 수 있음.

핵심 로직과 공통 로직을 분리하여 유지보수성이 높아진다. 

 

4) 경량 프레임워크

기존 EJB 기반의 무겁과 복잡한 자바 엔터프라이즈 개발보다 가볍고 빠르게 개발 가능하다. 

 

5) MVC 아키텍쳐 제공

스프링 MVC는 웹 애플리케이션을 Model, View, Controller로 구분해 구조화된 개발을 가능하게 한다. 

 

4. 스프링과 스프링 부트(Spring Boot)의 관계

스프링(Spring): 프레임 워크 그 자체로, 강력하지만 설정할 것이 많다.

스프링 부트(Spring Boot): 스프링을 빠르고 쉽게 사용할 수 있도록 만들어진 확장 도구

    - 복잡한 설정 파일 최소화

    - 내장 Tomcat으로 배포 용이

    - 간단한 실행

    - 자동 설정 기능 제공 

 

5. 스프링 활용

스프링과 스프링 부트는 다음과 같은 곳에 활용된다:

- REST API 서버 개발

- 웹 애플리케이션 개발

- 마이크로서비스 아키텍처(MSA) 기반 서비스 개발

- AWS, GCP, Azure 배포

 

 마무리 

- 스프링은 객체 관리와 의존성 주입, 공통 기능 분리(AOP), MVC 구조화 등으로 협업과 유지보수를 수월하게 만든다.

- 스프링 부트는 스프링을 쉽게 사용해 실무 개발과 배포를 빠르게 할 수 있도록 해준다.

 

추후에는 스프링 부트로 간단히 REST API 서버를 직접 만들어보고, AWS EC2에 배포해보는 과정을 여기에 기록할 예정이다. 

'Study > Spring Boot' 카테고리의 다른 글

DTO, Domain 비교  (0) 2025.11.01
Repository, Service, Controller 계층 비교  (0) 2025.11.01
개발환경  (0) 2025.07.05