[SPRING] Annotation & Mapping

림민지·2025년 3월 19일

Today I Learn

목록 보기
28/62

📌 Annotation이란?

Annotation은 자바 코드에 추가하는 마법 코드!
프레임워크가 특정 동작을 수행할 수 있도록 명시하고 전달하는 방식이라고 할 수 있다
예시로 @Override @controller @RestController 등등이 있다

1. @Slf4j

: 로깅 라이브러리를 사용하기 위해 선언하는 annotation
→ 자동으로 logger를 추가한다.

로그 레벨
TRACE → DEBUG → INFO → WARN → ERROR : 레벨 순서대로 더 상세한 정보를 제공한다

@Slf4j
@RestController
public class Slf4jController {
	@RequestMapping("/logging") //링크 맵핑 -> 뒤에 맵핑에서 좀 더 자세히 보쟈
    String name = "sparta";
    log.trace("문자 trace={}" ,name)
    log.trace("문자 debug={}" ,name)
    log.trace("문자 info={}" ,name)
    log.trace("문자 warn={}" ,name)
    log.trace("문자 error={}" ,name)
    return "success"; //성공적으로 실행되면 success 반환됨!

2. @Controller

: HTML을 반환할 때 사용한다 (View화면) - 예를 들어 Thymeleaf 사용해서 화면 보여주기

@Controller
public class ViewController {
    @RequestMapping("/view") // view 페이지로 ~~
    public String example() {
        return "sparta"; 
    }
}

3. @RestController

: Json 데이터를 반환할 때 사용한다
@Controller@ResponseBody 의 역할 동시수행 !

@RestController
public class RestController {
    @RequestMapping("/string") // string 페이지로 ~~
    public String example() {
        return "sparta";
    }
}

4. Mapping

@RequestMaping

: URL로 들어오는 요청을 Controller의 메서드와 연결해주는 annotation
method = RequestMethod.GET -> .HTTP메서드 요러케 표현하기
→ 모든 HTTP 메서드를 다 처리할 수 있다 (GET, POST, PUT 등등)

@RestController
@RequestMapping("/prefix")
public class RequestMappingController {
    @RequestMapping(value = "/v1", method = RequestMethod.GET)
    public String exampleV1() {
        return "this is sparta!";
    }
}

근데 이런 맵핑은 아래의 GetMapping이 좀 더 직관적이고 보기 좋다
더 편한 겟맵핑이 있는데 왜 리퀘스트를 쓰냐? RequestMapping은 보통 prefix 설정할때 쓰인다!

@GetMapping

: @RequestMapping의 단축형, 주로 GET 요청을 처리한다.

@GetMapping("/v2")

비슷하게 다른 요청에서는 @PostMapping, @PutMapping, @DeleteMapping도 같은 방식으로 사용이 가능!

@RestController
@RequestMapping("/prefix") // -> 리퀘스트맵핑은 프리픽스 해주는걸로 많이 사용됨
public class RequestMappingController {
    @GetMapping("/v2")
    public String exampleV2() {
        return "this is sparta!";
    }
}

5. @PathVariable

: URL 경로 일부를 따로 입력받아서 거기 넣어가지고 사용하고 싶을때 사용해보자

@RestController
@RequestMapping("/posts") //post라는 prefix 경로에
public class PathVariableController {
    @GetMapping("/{postId}") //입력받아서 넣어주자
    public String pathVariable(@PathVariable Long postId) {
        return "Pathvariable 결과입니다 : " + postId;
    }
}

ex) /posts/1postId = 1

6. @RequestParam

: URL의 쿼리 파라미터를 받아오자

@RestController
public class RequestParamController {
    @GetMapping("/users")
    public String getUserByGender(@RequestParam String gender) {
        return "gender = " + gender;
    }
}

http://localhost:8080/users?gender=man 이러케 사용이 가능하다~~

7. @RequestBody

: HTTP 요청의 Body 내용을 객체로 변환하여 받아오기 위해 사용
주로 POST 요청에서 JSON 데이터를 받는 경우!
반환값을 뷰 파일로 찾는 게 아니라, 응답으로 직접 보내라는 것 (ex- 문자열 그대로 출력하거나 JSON으로 보내기)

@RestController
public class RequestBodyController {
    @PostMapping("/users")
    public String createUser(@RequestBody User user) {
        return "User name = " + user.getName();
    }
}

⭐️ @RestController

위에서 봤듯이 @controller는 뷰를 찾는데에 쓰고 @RestBody는 반환값을 응답으로 직접 보낸 건데
이 두개를 쓰기 귀찮으니까~~ @RestController로 합쳐서 사용할 수 있음!
그러면 모든 메서드가 자동으로 @ResponseBody 처리된다

@RestController
public class TestController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring!";
    }
}

위의 코드는 브라우저에서 localhost:8080/hello로 요청하면, 화면에 'Hello, Spring!' 이라는 글자가 그대로 출력된다.
→ 뷰 파일을 찾는 게 아니고, 그냥 'Hello, Spring!'이라는 값을 직접 보내주는 것이라는 점!


🔑 정리

ANNOTATION기능
@ControllerHTML 뷰 반환용
@RestControllerAPI 데이터 반환용
@RequestMappingURL 경로 매핑
@GetMappingGET 요청 전용
@PathVariableURL 경로의 변수 사용
@RequestBody요청 Body로부터 데이터 추출
@Component스프링 빈으로 등록 (싱글톤 관리)
profile
@lim_128

0개의 댓글