Spring 개발 주요 어노테이션 정리

백엔드&인프라 추종자·2025년 2월 18일

스프링 공부

목록 보기
2/35

📌 1. Spring MVC 관련 어노테이션

@RestController

📌 설명

  • @Controller@ResponseBody를 결합한 어노테이션입니다.
  • JSON/XML 응답을 자동으로 처리하는 REST API 컨트롤러를 만들 때 사용됩니다.
  • 반환된 객체는 자동으로 ResponseBody에 매핑되어 JSON 형식으로 변환됩니다.

📌 예제 코드

@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/user")
    public User getUser() {
        return new User(1L, "John Doe", "john@example.com");
    }
}

📌 결과

{
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
}

@Controller

📌 설명

  • MVC 패턴에서 컨트롤러 역할을 하는 클래스에 사용됩니다.
  • 주로 뷰(View) 반환을 위한 컨트롤러에서 사용됩니다.

📌 예제 코드

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home"; // home.html 또는 home.jsp를 반환
    }
}

@RequestMapping

📌 설명

  • 특정 URL과 해당 메서드를 매핑할 때 사용됩니다.
  • 클래스와 메서드 단위에서 사용할 수 있습니다.
  • HTTP 메서드(GET, POST 등) 지정 없이 사용하면 모든 요청을 허용합니다.

📌 예제 코드

@RestController
@RequestMapping("/api")
public class ApiController {

    @RequestMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping

📌 설명

  • HTTP 메서드(GET, POST, PUT, DELETE, PATCH)를 특정 메서드에 매핑할 때 사용됩니다.

📌 예제 코드

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "John Doe", "john@example.com");
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return user; // 생성된 사용자 반환
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return user;
    }

    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) {
        return "User " + id + " deleted";
    }
}

📌 2. 요청 처리 관련 어노테이션

@RequestBody

📌 설명

  • 요청 본문(Body)의 JSON 데이터를 Java 객체로 변환할 때 사용됩니다.

📌 예제 코드

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public User createUser(@RequestBody User user) {
        return user;
    }
}

📌 요청 예시 (JSON 데이터)

{
    "name": "John Doe",
    "email": "john@example.com"
}

@RequestParam

📌 설명

  • 쿼리 파라미터(Query Parameter) 또는 폼 데이터(Form Data)를 매개변수로 받을 때 사용됩니다.

📌 예제 코드

@RestController
@RequestMapping("/search")
public class SearchController {

    @GetMapping
    public String search(@RequestParam String keyword) {
        return "Searching for: " + keyword;
    }
}

📌 요청 예시

GET /search?keyword=Spring

@PathVariable

📌 설명

  • URL 경로(Path) 변수 값을 매개변수로 받을 때 사용됩니다.

📌 예제 코드

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id) {
        return "User ID: " + id;
    }
}

📌 요청 예시

GET /users/10

📌 3. 의존성 주입(DI) 관련 어노테이션

@Component

📌 설명

  • 스프링 컨테이너가 관리하는 일반적인 빈(Bean) 객체를 정의하는 어노테이션입니다.
  • @Service, @Repository, @Controller 등은 @Component를 확장한 것입니다.

📌 예제 코드

@Component
public class MyComponent {
    public String sayHello() {
        return "Hello from MyComponent!";
    }
}

@Service

📌 설명

  • 비즈니스 로직을 처리하는 서비스 계층 클래스에서 사용됩니다.
  • @Component와 동일하게 빈으로 등록됩니다.

📌 예제 코드

@Service
public class UserService {
    public String getUserName() {
        return "John Doe";
    }
}

@Repository

📌 설명

  • 데이터 액세스 계층(DAO, Repository)에서 사용됩니다.
  • @Component와 동일하지만, 예외 변환 기능을 제공합니다.

📌 예제 코드

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

@Autowired

📌 설명

  • 스프링 컨테이너에서 자동으로 빈을 주입할 때 사용됩니다.
  • 생성자 주입, 필드 주입, 세터 주입 방식이 있습니다.

📌 예제 코드 (생성자 주입 권장)

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

📌 4. 트랜잭션 관리 관련 어노테이션

@Transactional

📌 설명

  • 데이터베이스 트랜잭션을 관리할 때 사용됩니다.
  • 메서드 실행 중 오류가 발생하면 자동으로 롤백됩니다.

📌 예제 코드

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void updateUser(Long id, String name) {
        User user = userRepository.findById(id).orElseThrow();
        user.setName(name);
        userRepository.save(user);
    }
}

📌 5. 설정 관련 어노테이션

@Configuration

📌 설명

  • 스프링 설정 클래스를 정의할 때 사용됩니다.
  • Bean을 수동으로 등록할 때 주로 사용됩니다.

📌 예제 코드

@Configuration
public class AppConfig {

    @Bean
    public MyComponent myComponent() {
        return new MyComponent();
    }
}

이와 같이 Spring에서 자주 사용되는 어노테이션을 설명과 함께 예제 코드로 정리했습니다.
추가로 궁금한 어노테이션이 있으면 질문해 주세요! 🚀

profile
AI 답변 글을 주로 올립니다.

0개의 댓글