어제 오늘 내일

[Spring Boot] 필수 어노테이션 총정리 (Cheat Sheet) 📝 본문

IT/SpringBoot

[Spring Boot] 필수 어노테이션 총정리 (Cheat Sheet) 📝

hi.anna 2026. 2. 28. 00:32

스프링 부트를 공부하다 보면 가장 힘든 점 중 하나가 "무슨 어노테이션이 이렇게 많아?" 라는 것입니다.
@Controller, @Service, @Repository... 비슷비슷해 보이는데 무슨 차이가 있는지, 언제 뭘 써야 하는지 헷갈리시죠?

오늘은 스프링 부트 개발 시 "이것만 알면 90%는 해결되는" 필수 어노테이션들을 용도별로 정리해 드립니다. '이 포스팅을 즐겨찾기 해두고 사전처럼 꺼내 보세요! 📚


1. 객체 등록 (Bean 등록)

스프링 컨테이너에게 "이 클래스는 내가 관리할 테니까, 메모리에 올려줘"라고 말하는 어노테이션들입니다.

어노테이션 설명 용도
@Component 가장 기본적인 Bean 등록 어노테이션 어디에 속하는지 애매한 일반 클래스에 사용
@Controller 웹 요청(View)을 처리하는 컨트롤러 HTML 파일을 반환할 때 사용 (MVC 패턴)
@RestController 데이터(JSON)를 반환하는 컨트롤러 API 서버 만들 때 사용 (@Controller + @ResponseBody)
@Service 비즈니스 로직을 담당하는 클래스 트랜잭션 처리, 복잡한 로직 수행
@Repository DB 접근을 담당하는 클래스 (DAO) DB 예외를 스프링 예외로 변환해줌
@Configuration 설정 파일임을 명시 @Bean을 수동으로 등록할 때 사용
@Bean 메서드의 리턴 객체를 Bean으로 등록 외부 라이브러리 클래스를 Bean으로 만들 때 사용

2. 의존성 주입 (DI)

등록된 Bean을 "가져다 쓸 때" 사용하는 어노테이션입니다.

어노테이션 설명 권장 여부
@Autowired 스프링이 타입에 맞는 Bean을 찾아 자동 주입 필드 주입은 권장하지 않음 ❌
@RequiredArgsConstructor (Lombok) final 필드에 대한 생성자 자동 생성 가장 권장하는 방식 (생성자 주입)

[실무 코드 예시]

@Service
@RequiredArgsConstructor // 1. 생성자 자동 생성
public class MemberService {

    // 2. @Autowired 없이 final만 붙이면 자동 주입됨
    private final MemberRepository memberRepository; 
}

3. 웹 요청 처리 (Controller)

프론트엔드에서 보낸 데이터를 받을 때 사용하는 어노테이션들입니다. (가장 많이 헷갈리는 부분!)

어노테이션 설명 URL 예시
@RequestMapping 기본 경로 설정 (클래스 위에 주로 붙임) /api/members
@GetMapping 조회 요청 (READ) GET /members
@PostMapping 등록 요청 (CREATE) POST /members
@PutMapping 수정 요청 (UPDATE) PUT /members
@DeleteMapping 삭제 요청 (DELETE) DELETE /members
@PathVariable URL 경로에 있는 값을 꺼낼 때 /members/{id} ➡️ id 추출
@RequestParam 쿼리 파라미터(?key=value)를 꺼낼 때 /members?page=1 ➡️ page 추출
@RequestBody JSON 데이터(Body)를 객체로 받을 때 회원가입 시 JSON 데이터 받을 때

 


4. 데이터베이스 (JPA & Transaction)

DB와 관련된 핵심 어노테이션입니다.

어노테이션 설명
@Entity 이 클래스는 DB 테이블과 매핑된다는 표시 (필수)
@Id Primary Key (PK) 지정
@GeneratedValue PK 자동 생성 전략 (AUTO_INCREMENT 등)
@Column 컬럼 설정 (이름 변경, 길이 제한, Null 허용 여부 등)
@Transactional [매우 중요] 메서드 실행 중 에러가 나면 자동 롤백(Rollback)

5. 롬복 (Lombok) - 보일러플레이트 제거

코드를 짧게 줄여주는 마법의 도구입니다.

어노테이션 설명
@Getter / @Setter Getter, Setter 메서드 자동 생성
@NoArgsConstructor 기본 생성자 생성 (public Class() {}) - JPA 필수
@AllArgsConstructor 모든 필드를 받는 생성자 생성
@Builder 빌더 패턴 자동 생성 (객체 생성을 직관적으로)
@Slf4j 로깅 기능 자동 추가 (log.info(...))

6. 테스트 (Test)

테스트 코드를 작성할 때 사용합니다.

어노테이션 설명
@SpringBootTest 통합 테스트. 스프링 컨테이너를 실제로 띄워서 테스트함 (무거움)
@WebMvcTest 컨트롤러만 떼어내서 가볍게 테스트함 (단위 테스트용)
@Test (JUnit) 이 메서드는 테스트 메서드임을 명시
@DisplayName 테스트 결과창에 보여줄 한글 이름 설정

💡 요약: "이것만은 꼭!" (Best Practice)

  1. Bean 등록: @Controller, @Service, @Repository를 용도에 맞게 쓴다.
  2. 의존성 주입: @Autowired 대신 @RequiredArgsConstructor (Lombok)를 쓴다.
  3. 데이터 받기:
    • URL 경로(/1)는 @PathVariable
    • 검색 조건(?q=abc)은 @RequestParam
    • 저장할 데이터(JSON)는 @RequestBody
  4. DB 작업: 데이터를 변경(Insert, Update, Delete)하는 Service 메서드에는 꼭 @Transactional을 붙인다.

 

반응형
Comments