◆ TURNING LAB

@Autowired 첫 사용

DI — 실습 / 약 20분

📍 지금 어디를 만지고 있나요?
브라우저
Tomcat
Spring + @Autowired
Controller
DB

사전 준비

이번 실습의 목표

전 차시 IoC 코드를 Spring 으로 다시 짭니다. @Service, @Autowired 한 줄씩이 main 메서드의 수동 주입을 어떻게 대체하는지 직접 봅니다.

1
Spring Legacy Project 생성

Eclipse 메뉴: File → New → Spring Legacy Project. Spring MVC Project 템플릿 선택. (강사의 안내가 있다면 그대로 따르기.)

CHECKPOINT
  • Project 안에 pom.xml, web.xml, servlet-context.xml, root-context.xml 이 보이나요?
2
인터페이스와 두 구현체 작성
// MessageSender.java
package com.example.demo;
public interface MessageSender {
    void send(String msg);
}

// GmailSender.java
@Service
public class GmailSender implements MessageSender {
    public void send(String msg) {
        System.out.println("📧 " + msg);
    }
}
3
OrderService — @Autowired
@Service
public class OrderService {
    @Autowired
    private MessageSender sender;

    public void order() {
        sender.send("주문 완료");
    }
}

@Autowired 한 줄로 컨테이너가 GmailSender 를 자동 주입합니다.

4
테스트 실행

가장 간단한 방법은 컨트롤러에서 호출:

@Controller
public class HomeController {
    @Autowired
    private OrderService orderService;

    @RequestMapping("/test")
    public String test() {
        orderService.order();
        return "home";
    }
}

Tomcat 실행 후 http://localhost:8080/.../test 접속. 콘솔에 "📧 주문 완료" 출력.

CHECKPOINT
  • 전 차시처럼 main 에서 부품을 직접 만들어 넘기는 코드가 있나요? 없습니다 — Spring 컨테이너가 자동으로 했음.
  • OrderService 안에 new GmailSender() 가 있나요? 없습니다 — @Autowired 가 했음.
5
부품 교체 체험

KakaoSender 를 추가하고 GmailSender 의 @Service 를 잠시 주석 처리:

// @Service  ← 주석
public class GmailSender implements MessageSender { ... }

@Service
public class KakaoSender implements MessageSender {
    public void send(String msg) {
        System.out.println("💬 " + msg);
    }
}

OrderService 코드는 한 줄도 수정하지 않았는데 Kakao 가 호출됩니다.

실습 완료 체크리스트

Spring Legacy Project 생성
@Service 로 Bean 등록
@Autowired 로 자동 주입
컨트롤러로 호출 후 콘솔에 결과 확인
부품 교체 시 OrderService 가 그대로임을 확인