어제 오늘 내일

[Spring Boot 입문 - 7] 어노테이션(@) 지옥 탈출! 자주 쓰는 핵심 5총사 정리 본문

IT/SpringBoot

[Spring Boot 입문 - 7] 어노테이션(@) 지옥 탈출! 자주 쓰는 핵심 5총사 정리

hi.anna 2026. 2. 12. 11:58

스프링 부트 코드를 보면 자바 문법에는 없는 @ 표시가 정말 많이 나옵니다.
이걸 '어노테이션(Annotation)'이라고 부르는데요.

사전적 의미로는 '주석'이지만, 스프링에서는 '스티커(명찰)'라고 생각하면 이해가 빠릅니다.

 

1. 어노테이션 = "스프링에게 보내는 편지"

우리가 클래스 위에 @Controller라고 붙이는 건, 스프링에게 이런 메모를 남기는 것과 같습니다.

"스프링아, 이 클래스는 그냥 평범한 자바 파일이 아니야. 내가 '컨트롤러' 역할을 맡겼으니까 네가 알아서 관리해 줘!"

이 스티커가 안 붙어 있으면 스프링은 "얘는 뭐 하는 애인지 모르겠네?" 하고 무시해 버립니다.
그래서 적절한 스티커를 딱딱 붙여주는 게 개발자의 역할입니다.


2. 역할 부여 스티커 (3계층 구조)

지난 시간에 배운 '레스토랑 3인방' 기억하시죠? 그들에게 명찰을 달아주는 어노테이션입니다. 이 명찰을 달아야 스프링이 '빈(Bean)'으로 등록해서 관리해 줍니다.

@RestController (또는 @Controller)

  • 위치: 컨트롤러 클래스 위
  • 의미: "나는 웨이터야. 손님 요청이 오면 내가 받을게."
  • 특징: @Controller는 화면(HTML)을 돌려줄 때 쓰고, @RestController는 데이터(JSON)를 돌려줄 때 씁니다. 요즘은 주로 @RestController를 많이 씁니다.

@Service

  • 위치: 서비스 클래스 위
  • 의미: "나는 셰프야. 중요한 비즈니스 로직은 내가 처리할게."
  • 특징: 이 스티커가 붙어 있어야 컨트롤러가 "셰프님 요리해 주세요" 하고 일을 시킬 수 있습니다.

@Repository

  • 위치: 리포지토리 인터페이스/클래스 위
  • 의미: "나는 창고지기야. DB랑 연결해서 데이터 꺼내올게."
  • 특징: DB 관련 예외가 터지면 스프링이 알아서 처리해주기도 합니다. (JPA를 쓰면 생략 가능하기도 합니다.)

3. 연결 스티커 (의존성 주입)

직원들을 채용했으면 서로 일을 할 수 있게 연결해줘야겠죠? 웨이터가 셰프를 알고, 셰프가 창고지기를 알아야 하니까요.

@Autowired (옛날 방식)

  • 의미: "스프링아, 나한테 필요한 객체(친구) 좀 알아서 꽂아줘(Inject)."
  • 사용: 필드 변수 위에 붙입니다.
  • 단점: 편하긴 한데, 테스트하기 힘들고 순환 참조 문제가 생길 수 있어서 요즘은 비추천합니다.

@RequiredArgsConstructor (요즘 방식 - 강추!)

  • 출처: 롬복(Lombok) 라이브러리
  • 의미: "내 클래스에 final이 붙은 변수가 있으면, 걔네를 채워주는 생성자를 자동으로 만들어줘."
  • 왜 쓰나요? 코드가 훨씬 깔끔해지고 안전합니다.

[비교 체험]

// [옛날 방식 - 비추천]
@Service
public class MyService {
    @Autowired // 필드 주입
    private MyRepository repository;
}

// [요즘 방식 - 추천]
@Service
@RequiredArgsConstructor // 롬복아, 생성자 만들어줘!
public class MyService {
    // final만 붙이면 알아서 주입됨 (생성자 주입)
    private final MyRepository repository; 
}

여러분은 무조건 아래쪽(@RequiredArgsConstructor) 방식을 쓰시면 됩니다. "아, final 붙은 애들을 스프링이 알아서 연결해 주는구나"라고 이해하세요.


4. 대장 스티커

@SpringBootApplication

  • 위치: DemoApplication 파일 (메인 함수 있는 곳)
  • 의미: "여기서부터 스프링 부트 시작이다!"
  • 특징: 이 스티커가 붙은 위치부터 하위 패키지를 싹 뒤져서, 위에 말한 @Controller, @Service 붙은 애들을 다 찾아냅니다. (그래서 파일을 엉뚱한 곳에 만들면 안 되는 겁니다.)

요약: 이 표만 기억하세요

어노테이션 역할(비유) 설명
@RestController 웨이터 요청을 받는 컨트롤러
@Service 셰프 로직을 수행하는 서비스
@Repository 창고지기 DB에 접근하는 리포지토리
@RequiredArgsConstructor 전화 연결 필요한 친구(객체)를 자동으로 연결해 줌 (의존성 주입)
@SpringBootApplication 본점 간판 프로그램 시작점

이제 남의 코드를 볼 때, 골뱅이만 봐도 "아, 얘는 서비스네?", "아, 여기서 DB 연결하네?" 하고 해석이 가능해질 겁니다.

이론 무장은 여기까지입니다!
이제 본격적으로 데이터를 저장해 봐야겠죠?

다음 시간에는 진짜 데이터베이스(Database)를 연결해 보겠습니다. 복잡한 설치 없이 H2라는 아주 가벼운 DB를 쓸 거라 겁먹을 필요 없습니다.

다음 편에서 만나요! 👋

 

 

반응형
Comments