Spring

[Spring] 어노테이션이란 무엇일까?

Jay_J 2024. 7. 11. 11:17

저번 학기에도 Kotlin으로 안드로이드 앱 개발 수업을 진행하며 수없이 많은 어노테이션을 봤지만 제대로 알고 넘어가지 않았다. 이번에 Spring을 공부하다 보니 생전 처음 보는 어노테이션을 많이 마주했는데, 이번 포스팅에서는 어노테이션이 뭔지 정도만 간략하게 알고 넘어가 보자.

어노테이션(Annotation)이란, 코드에 추가 정보를 제공하기 위해 사용하는 메타데이터의 일종이다. Java와 같은 언어에서 어노테이션은 주석처럼 보이지만, 컴파일러와 런타임 환경에서 특별한 의미를 가진다. 어노테이션은 주로 코드의 가독성을 높이고, 코드의 동작을 변경하거나 추가 기능을 제공하는 데 사용된다.

Spring 프레임워크에서도 많은 어노테이션을 사용하여 다양한 기능을 구현한다. 예를 들어, `@Controller`는 해당 클래스가 컨트롤러 역할을 한다는 것을 나타내며, `@GetMapping`은 특정 URL에 대한 HTTP GET 요청을 처리하는 메서드를 정의하는 데 사용된다. 이러한 어노테이션을 통해 코드의 구조를 명확히 하고, 설정을 간소화할 수 있다.

한 가지 예로, 우리가 작성한 `HelloController` 클래스를 살펴보자:

@Controller
public class HelloController {
    
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }
}


이 클래스에서 사용된 어노테이션을 하나씩 설명해 보겠다.

1. `@Controller`
    - 이 어노테이션은 해당 클래스가 Spring MVC의 컨트롤러임을 나타낸다. 컨트롤러는 사용자의 요청을 받아 적절한 비즈니스 로직을 수행하고, 결과를 뷰에 전달하는 역할을 한다.
    - 컨트롤러 클래스는 보통 웹 애플리케이션의 엔드포인트를 정의하며, 사용자와 상호작용하는 로직을 포함한다.

2. `@GetMapping("hello-mvc")`
    - 이 어노테이션은 `hello-mvc` 경로로 들어오는 HTTP GET 요청을 처리하는 메서드를 정의한다. 즉, 사용자가 `http://localhost:8080/hello-mvc` URL로 요청을 보내면, 이 메서드가 호출된다.
    - `@GetMapping` 외에도 `@PostMapping`, `@PutMapping`, `@DeleteMapping` 등 다양한 HTTP 메서드에 대응하는 어노테이션이 있다.

3. `@RequestParam("name") String name`
    - 이 어노테이션은 요청 파라미터를 메서드의 인자로 매핑하는 데 사용된다. 예를 들어, 사용자가 `http://localhost:8080/hello-mvc?name=spring`와 같이 요청을 보내면, `name` 파라미터의 값인 "spring"이 `name` 변수에 할당된다.
    - 이를 통해 우리는 사용자가 보낸 데이터를 쉽게 받아올 수 있다.

4. `Model model`
    - 이 메서드 파라미터는 뷰에 데이터를 전달하기 위한 모델 객체다. 우리는 `model.addAttribute` 메서드를 사용하여 모델에 데이터를 추가할 수 있다.
    - 이렇게 추가된 데이터는 뷰 템플릿에서 사용되어 동적으로 콘텐츠를 생성할 수 있다.

마지막으로, 이 메서드는 `hello-template`이라는 뷰 이름을 반환한다. Spring은 이 이름을 기반으로 적절한 뷰 템플릿을 찾아 렌더링한다. 여기서 우리가 작성한 `hello-template.html` 파일이 사용된다.

이처럼 Spring에서 어노테이션을 사용하면 코드가 간결해지고, 설정을 위한 XML이나 자바 코드를 많이 줄일 수 있다. 또한, 어노테이션을 통해 코드의 의도를 명확하게 드러낼 수 있어 가독성과 유지보수성이 높아진다.

어노테이션을 잘 활용하면 개발 생산성을 크게 향상시킬 수 있다. 하지만 처음에는 생소할 수 있으므로, 각 어노테이션의 역할과 사용 방법을 하나씩 익혀 나가는 것이 중요하다. 이번 포스팅에서는 어노테이션의 기본적인 개념과 몇 가지 주요 어노테이션의 사용법을 간략히 살펴보았다. 앞으로 Spring을 더 깊이 공부하면서 다양한 어노테이션을 접하게 될 텐데, 그때마다 어노테이션의 의미와 사용법을 잘 이해하고 넘어가는 것이 좋을것 같다!