문법을 외우기 전에, 스프링이 어떤 고통을 덜어주려고 나왔는지부터 알면 전부 이해돼요. 이번 장은 큰 그림과 이야기 중심입니다. 자바를 아는 태호님껜 술술 읽혀요.
스프링은 "자바로 서버(백엔드) 애플리케이션을 쉽고 견고하게 만들도록 도와주는 프레임워크"예요. 우리가 매번 똑같이 짜야 하는 귀찮고 복잡한 공통 작업(객체 연결·트랜잭션·웹 요청 처리 등)을 스프링이 대신 처리해줘서, 개발자는 진짜 중요한 비즈니스 로직에 집중할 수 있어요.
new로 만들고, 그 객체가 또 필요로 하는 객체까지 일일이 만들어 넣어줘야 해요. 규모가 커지면 이 "누가 누구를 만들고 연결하나"가 얽히고설켜 관리가 어려워져요.
// 내가 모든 걸 직접 생성·연결
Repository repo = new Repository();
Service service = new Service(repo); // service가 repo에 의존
Controller ctrl = new Controller(service);
방금 본 "객체를 일일이 new로 만들고 연결하는 번거로움" 기억하시죠? 바로 그 문제를 풀려고 나온 아이디어가 IoC와 DI예요. 이름은 어렵지만, 핵심은 "객체를 만들고 연결하는 귀찮은 일을 개발자 대신 스프링이 맡는다" 딱 하나예요. 천천히 볼게요.
new 하지 않고 외부(스프링)가 만들어 넣어주는(주입) 것이에요.
💡 비유: 요리사가 재료를 직접 사러 가는(new) 대신, 주방 보조가 필요한 재료를 척척 가져다주는(DI) 것. 요리사(내 로직)는 요리에만 집중하면 돼요.
Engine engine = new Engine();
Car car = new Car(engine); // 내가 new 하고, 내가 연결
객체 생성·연결의 제어권이 전부 개발자에게 있어요.Engine engine = new Engine();
Wheel wheel = new Wheel();
Seat seat = new Seat();
Car car = new Car(engine, wheel, seat);
프로그램이 커질수록 "누가·언제 만들지, 누가 연결하지" 코드가 폭증해요.class Car {
private Engine engine;
public Car(Engine engine) { this.engine = engine; } // Car는 Engine이 필요
}
예전엔 new Engine() 해서 내가 넣었죠. 스프링에선 Engine 생성 → Car 생성 → Engine을 Car에 넣어줌을 스프링이 대신 해요. 이게 DI(의존성 주입)예요.IoC = DI로 오해하는데, 사실은 포함 관계예요.
@Autowired 는 CH 02 「IoC와 DI」 에서 이어져요.| 이름 | 역할 |
|---|---|
| Spring Framework | IoC/DI 컨테이너 등 핵심 기반. 모든 것의 뿌리. |
| Spring Boot | 복잡한 설정을 자동으로 해주고 바로 실행되게 해줌. 요즘의 출발점. (CH 05) |
| Spring Data (JPA) | 데이터베이스 접근을 간편하게. (CH 08) |
| Spring Security | 인증·인가(로그인·권한) 처리. |
new 대신 스프링이 만들어 넣어줘요.