ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot에서 @ (어노테이션) 활용하기
    🌱 Spring 프레임워크 2025. 1. 9. 15:47
    728x90

    어노테이션이 뭔가요? 🤔

    어노테이션은 @ 기호로 시작하는 특별한 마크예요. 컴파일러에게 코드에 대한 추가 정보를 제공하거나, 런타임에 특정 기능을 실행하도록 지시하는 역할을 합니다. 🗣️ Spring Boot에서는 어노테이션을 통해 빈(Bean) 설정, 컴포넌트 스캔, 웹 요청 처리 등 다양한 작업을 수행할 수 있답니다.

     

    Spring Boot 주요 어노테이션 ⭐️

    • @SpringBootApplication: Spring Boot 애플리케이션의 시작 지점을 알리는 중요한 어노테이션이에요. 컴포넌트 스캔, 자동 설정 등을 활성화해줍니다. 마치 Spring Boot에게 "여기서부터 시작해!" 라고 알려주는 역할을 합니다.
    • @Component: 클래스를 Spring 빈으로 등록해줍니다. 마치 Spring에게 "이 클래스는 중요해요! 관리해주세요!"라고 말하는 것과 같아요. Spring은 @Component가 붙은 클래스를 빈으로 등록하고 관리해줍니다.
    • @Controller: 웹 요청을 처리하는 컨트롤러 클래스를 나타냅니다. 웹 브라우저에서 요청이 오면, @Controller가 붙은 클래스가 요청을 받아 처리하고, 결과를 반환해줍니다.
    • @RestController: RESTful 웹 서비스를 위한 컨트롤러 클래스를 나타냅니다. 요즘 많이 사용하는 REST API를 만들 때 사용하는 어노테이션이죠. @Controller와 비슷하지만, JSON이나 XML 형태로 데이터를 반환하는 데 특화되어 있습니다.
    • @Service: 비즈니스 로직을 처리하는 서비스 클래스를 나타냅니다. 애플리케이션의 핵심 로직을 담당하는 중요한 부분이에요. 주로 @Controller에서 받은 요청을 처리하고, 데이터베이스와 상호 작용하는 등의 작업을 수행합니다.
    • @Repository: 데이터 접근 계층의 클래스를 나타냅니다. 데이터베이스에서 데이터를 가져오거나 저장하는 역할을 합니다. 데이터베이스 관련 예외를 처리하는 기능도 제공합니다.
    • @Autowired: 의존성 주입을 수행합니다. 다른 클래스를 사용해야 할 때, @Autowired를 사용하면 Spring이 알아서 연결해준답니다. 예를 들어, UserService 클래스에서 UserRepository 클래스를 사용하려면 @Autowired를 사용하여 UserRepository 객체를 주입받을 수 있습니다.
    • @RequestMapping: 웹 요청 경로를 매핑합니다. 특정 URL에 접속했을 때 어떤 메서드가 실행될지 지정해줍니다. 예를 들어, /users 경로에 @RequestMapping 어노테이션을 붙이면, /users로 요청이 왔을 때 해당 메서드가 실행됩니다.
    • @GetMapping, @PostMapping: HTTP GET, POST 요청을 처리합니다. 웹 개발에서 가장 기본적인 요청 방식이죠. @GetMapping은 GET 요청을 처리하고, @PostMapping은 POST 요청을 처리합니다.
    • @RequestParam: 요청 파라미터를 가져옵니다. URL에 포함된 쿼리 스트링 값을 가져올 때 사용합니다. 예를 들어, /users?name=john과 같이 요청이 오면 @RequestParam("name")을 사용하여 john이라는 값을 가져올 수 있습니다.
    • @RequestBody: 요청 본문을 가져옵니다. POST 요청으로 JSON 데이터를 전송할 때 사용합니다. JSON 데이터를 자바 객체로 변환하여 사용할 수 있도록 해줍니다.
    • @ResponseBody: 메서드 반환 값을 응답 본문에 포함합니다. REST API에서 JSON 데이터를 반환할 때 사용합니다. 자바 객체를 JSON 데이터로 변환하여 응답 본문에 포함시켜 줍니다.

    어노테이션 사용 예시 ⌨️

    컨트롤러부분

    @RestController // REST API 컨트롤러임을 나타냅니다.
    @RequestMapping("/users") // /users 경로로 오는 요청을 처리합니다.
    public class UserController {
    
      @Autowired // UserService 객체를 주입합니다.
      private UserService userService;
    
      @GetMapping("/{id}") // /users/{id} 경로로 오는 GET 요청을 처리합니다.
      public User getUser(@PathVariable Long id) { // {id} 값을 Long id 변수로 받습니다.
        return userService.getUser(id);
      }
    
      @PostMapping // /users 경로로 오는 POST 요청을 처리합니다.
      public User createUser(@RequestBody User user) { // 요청 본문의 JSON 데이터를 User 객체로 받습니다.
        return userService.createUser(user);
      }
    }

    서비스부분

    @Service // 서비스 클래스임을 나타냅니다.
    public class UserService {
    
      @Autowired // UserRepository 객체를 주입합니다.
      private UserRepository userRepository;
    
      public User getUser(Long id) {
        return userRepository.findById(id).orElse(null); // id에 해당하는 사용자를 찾아 반환합니다.
      }
    
      public User createUser(User user) {
        return userRepository.save(user); // 새로운 사용자를 저장합니다.
      }
    }

     

     

    레포지토리 부분

    @Repository // 레포지토리 클래스임을 나타냅니다.
    public interface UserRepository extends JpaRepository<User, Long> { 
      // JpaRepository를 상속하여 기본적인 CRUD 기능을 사용합니다.
    }

     

    728x90
Designed by Tistory.