목차
- Spring이란?
- Spring 의 주요핵심 개념과 특징
- Spring Boot 란?
- Spring 과 Spring Boot 의 차이
스프링(Sping)이란?

스프링을 구글링 해보면
"자바 언어를 기반으로, 엔터프라이즈급 웹 애플리케이션을 쉽게 개발할 수 있게 해주는
오픈소스 애플리케이션 프레임워크입니다." 라는 정의를 볼수있습니다.
일단 하나씩 뜯어보면서 어려운 정의를 좀더 쉽고 깊게 이해 해보겠습니다~!
" 엔터프라이즈급 웹 애플리케이션을 쉽게 개발할 수 있게 해주는 "
여기서 엔터프라이즈는 대기업이나 대규모 관공서 같은 '거대 비즈니스 환경'을 뜻합니다.
내가 혼자 취미로 만드는 '개인 홈페이지'와, 한 달에 수천억 원이 오가는 '쿠팡'이나 '토스(Toss)' 같은 서비스는
차원이 다르겠죠? 이렇게 규모가 엄청나게 크고 복잡한 시스템을 엔터프라이즈급 애플리케이션이라고 부릅니다.
엔터프라이즈급 시스템이 되려면 반드시 까다로운 조건들을 만족해야합니다.
● 초대형 트래픽: 동시에 수십, 수백만 명이 접속해도 서버가 터지지 않고 버텨야 합니다.
● 절대적인 안정성: 은행 앱이 1분만 마비되어도 난리가 나겠죠? 24시간 365일 절대 죽지 않아야 합니다.
● 철저한 보안: 해킹 공격으로부터 고객의 개인정보와 자산을 완벽하게 보호해야 합니다.
● 데이터의 정확성: 100만 명이 동시에 물건을 주문해도 결제 데이터와 재고 데이터가 단 1원, 1개도 틀리지 않고 정확하게 맞아야 합니다.
스프링은 이처럼 복잡한 인프라 작업을 완벽하게 만들어서 내부에 내장이 되어있다고 생각하시면됩니다.
개발 초기에 기본적인 설정과 적용시킬 기술들만 잘 선택을 해준다면,
기술보다는 애플리케이션의 로직자체에 더 집중하여 원하는 방향으로 구현을 할수 있습니다.
" 오픈소스 "
말그대로 유튜브에 요리를 검색했을때 이렇게 만드세요~
하고 레시피(설정/코드) 를 통째로 무료로 공개한것과 같습니다.
누구나 그 레시피를 그대로 사용할수 있고 응용을 할 수도 있는거죠.
Spring이 오픈소스라는 것은 프로그램의 모든 설계도가 세상에 무료로 공개되어 있다는 뜻입니다.
덕분에 전 세계 개발자들이 자유롭게 버그를 고치고 기능을 발전시켜 왔으며,
기업들은 비용 부담 없이 가장 안전하고 검증된 기술을 가져다 쓸 수 있게 되었습니다.
오늘날 자바 백엔드 시장을 Spring이 지배하게 된 가장 큰 원동력이 바로 이 '오픈소스의 힘'입니다.
🌐 1. 스프링 공식 홈페이지
주소 : https://spring.io/
용도 : 스프링으로 개발할 때 필요한 공식 문서(Documentation),
가이드 가이드북, 각 프로젝트(스프링 부트, 스프링 시큐리티 등)에 대한 소개를 볼 수 있습니다.
💻2. 스프링 공식 깃허브 (GitHub)
주소 : https://github.com/spring-projects
용도 : 전 세계 개발자들이 스프링의 코드를 분석하고, 버그를 제보하며,
직접 코드를 수정해 기여(Contribution)하는 진짜 오픈소스 공간입니다.
" 애플리케이션 프레임워크 "
프레임워크란 쉽게말해 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것을 의미합니다.
예를 들어 우리가 핸드폰을 만든다고 가정을 해볼게요.
이때 처음부터 끝까지 핸드폰의 모든 부품을 손수만들고 용접하고 하는것 보단,
카메라 회사에서는 카메라를 , 스피커회사에선 스피커를 사와서 각 부품을 맞게 가져다쓰는것 훨씬 편리하겠죠?
여기서 완성된 부품에 해당하는것이 바로 프레임 워크입니다.
Spring은 이 뼈대를 너무나도 튼튼하고 유연하게 잘 만들어두었기 때문에,
수많은 자바 개발자들의 표준 프레임워크로 자리 잡게 되었습니다.
Spring 주요 핵심 개념 과 특징
- IoC/DI (제어의 역전 / 의존성 주입): 객체의 생성과 관리, 의존성 연결을 개발자가 아닌 스프링이 직접 처리하여 결합도를 낮추고 유연한 코드를 만듭니다.
- AOP (관점 지향 프로그래밍): 로깅, 보안, 트랜잭션 등 여러 코드에서 공통으로 쓰이는 부가 기능들을 핵심 비즈니스 로직과 분리하여 모듈화합니다.
- POJO (평범한 자바 객체) : 특정 기술이나 규약에 얽매이지 않고 객체지향적인 자바 본연의 기능을 충실히 사용할 수 있게 합니다.
스프링부트 (Spring Boot) 란?

스프링은 기존 기술의 복잡성을 크게 줄인 프레임워크이지만,
그럼에도 불구하고 스프링을 사용하기 위해서는 여러 가지의 사항들을 설정해주어야 합니다.
하지만 스프링부트가 있기 때문에, 복잡한 설정 정보를 간략하게 줄일수 있습니다.
😱 기존 Spring 프레임워크의 방식 (과거)
기존에는 저 짧은 문구 하나를 띄우기 위해 이런 험난한 과정을 거쳐야 했습니다.
(이 코드는 느낌만 보여주는 용도이니 너무 깊게 이해하지 않으셔도 됩니다.)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
설명: 라이브러리 버전 맞추다가 에러 나고, 톰캣 서버 연동하다가 하루가 다 갔습니다.
😎 Spring Boot의 방식 (현재)
스프링 부트는 단 두 개의 파일만 있으면 끝납니다.
1. 설정 파일 (build.gradle 또는 pom.xml) 그냥 '웹 스타터 패키지' 하나만 선언하면 끝입니다.
버전도 부트가 알아서 맞춰줍니다.
Groovy
// "웹 개발할 거니까 필요한 거 알아서 다 가져와!"
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
2. 실행 및 비즈니스 로직 코드 (Java) 톰캣 설치? 필요 없습니다.
main 메서드 하나로 서버가 실행되고, 화면에 글씨가 뜹니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// 1. "스프링부트야, 필요한 설정 알아서 켜줘!" (자동 설정 마법)
@SpringBootApplication
@RestController
public class HelloApplication {
public static void main(String[] args) {
// 2. 내장 톰캣 서버를 실행하는 단 한 줄의 코드
SpringApplication.run(HelloApplication.class, args);
}
// 3. 브라우저에서 접속했을 때 띄워줄 내용
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot! 설정 너무 쉽죠?";
}
}
설명: 코드를 작성하고 실행(Run) 버튼만 누르면, 스프링 부트가 알아서 내장된 톰캣 서버를 켜고 웹사이트를 구동합니다.
코드가 말도 안 되게 짧고 직관적으로 변했습니다!
"스프링 부트는 마치 '3분 카레'와 같습니다. 복잡한 재료 손질(설정) 없이 데우기만 하면 훌륭한 요리가 완성되죠.
하지만 주의할 점이 있습니다.
스프링 부트가 모든 것을 자동으로 해준다고 해서,
그 밑바탕에 깔려있는 스프링 프레임워크의 핵심 원리(IoC/DI, AOP 등)를 모르면 안 됩니다.
에러가 났을 때 그 상자 안에서 무슨 일이 벌어지는지 알아야 고칠 수 있기 때문입니다.
개인적인 견해로써 결론을 내리자면...실무 프로젝트는 무조건 '스프링 부트'로 시작하되,
틈틈이 그 뼈대인 '스프링'의 동작 원리를 공부하는 것이 좋은 백엔드 개발자로 성장하는 지름길이라 생각이 듭니다...
스프링과 스프링부트 의 차이
1. 설정 방식 (Configuration): 수동 vs 자동
- Spring: 웹 프레임워크 하나 쓰려면 XML 파일을 열어 수십 줄의 코드를 적거나,
자바 파일에 복잡한 설정을 직접 등록해야 했습니다. - Spring Boot: Auto Configuration 기능 덕분에 설정이 거의 필요 없습니다.
프로젝트가 시작될 때 내부에 포함된 라이브러리들을 보고, 웹 서버 설정을 자동으로 알아서 세팅합니다.
2. 웹 서버(WAS) 관리: 외부 설치 vs 내장
- Spring: 코드를 다 짜고 나면 톰캣(Tomcat) 같은 웹 서버를 컴퓨터에 따로 설치하고,
소스코드를 WAR 파일로 압축해서 서버에 수동으로 밀어 넣는 귀찮은 과정을 거쳐야 했습니다. - Spring Boot: 톰캣 서버를 아예 프로그램 내부에 품고 있습니다(Embedded Tomcat). 덕분에 서버 설치 없이 그냥 자바 코드를 실행하듯 실행하면 JAR 파일 하나로 웹 서버가 바로 구동됩니다.
3. 라이브러리 영입: 각개전투 vs 세트메뉴
- Spring: 데이터베이스를 연결하려면 JPA 라이브러리, 드라이버 라이브러리 등을 일일이 찾아서 넣어야 했고, 서로 버전이 안 맞으면 에러가 난리났었습니다.
- Spring Boot: Starter 패키지를 제공합니다. spring-boot-starter-data-jpa 딱 하나만 고르면, 관련 라이브러리들을 가장 안정적인 버전 조합으로 알아서 묶어서 가져옵니다.
"Spring Boot는 Spring과 완전히 다른 새로운 기술이 아니라, 기존의 강력한 Spring 엔진을 우리가 더 편하고 빠르게 쓸 수 있도록 껍데기를 이쁘게 씌워놓은 편리한 도구 상자입니다."