Skip to content

Latest commit

Β 

History

History
83 lines (58 loc) Β· 5.16 KB

File metadata and controls

83 lines (58 loc) Β· 5.16 KB

μ–΄λ…Έν…Œμ΄μ…˜ 정리 ν•˜κΈ°

Request λ§€ν•‘μ΄λž‘ GetMapping의 차이가 뭐야? μ™œ λ‹€λ“€ RequestMapping을 μ„ ν˜Έν•˜λŠ”κ±ΈκΉŒ?

@RequestMappingκ³Ό @GetMapping은 λ‘˜ λ‹€ Spring Frameworkμ—μ„œ HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ κ·Έλ“€μ˜ μ‚¬μš© λͺ©μ κ³Ό 차이점이 μ‘΄μž¬ν•©λ‹ˆλ‹€. 기본적인 차이점과 μ‚¬λžŒλ“€μ΄ μ™œ @RequestMapping을 μ„ ν˜Έν•˜λŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. @RequestMapping과 @GetMapping의 차이

1) @RequestMapping

  • μ—­ν• : @RequestMapping은 HTTP μš”μ²­μ„ μ²˜λ¦¬ν•  λ©”μ„œλ“œ λ˜λŠ” ν΄λž˜μŠ€μ— λ§€ν•‘ν•˜λŠ” κ°€μž₯ 일반적인 μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. HTTP λ©”μ„œλ“œ(GET, POST, PUT, DELETE λ“±)와 관계없이 μ—¬λŸ¬ μœ ν˜•μ˜ μš”μ²­μ„ λ§€ν•‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μœ μ—°μ„±: @RequestMapping은 HTTP λ©”μ„œλ“œλΏλ§Œ μ•„λ‹ˆλΌ 경둜(path), 헀더(headers), μš”μ²­ λ§€κ°œλ³€μˆ˜(params) λ“± λ‹€μ–‘ν•œ 쑰건을 기반으둜 μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” 맀우 μœ μ—°ν•œ μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€.

    예:

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

2) @GetMapping

  • μ—­ν• : @GetMapping은 @RequestMapping의 νŠΉμ •ν•œ μœ ν˜•μœΌλ‘œ, GET μš”μ²­λ§Œμ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. 이것은 HTTP λ©”μ„œλ“œκ°€ GET인 κ²½μš°μ—λ§Œ μ‚¬μš©λ©λ‹ˆλ‹€. @GetMapping은 더 κ°„κ²°ν•˜κ³  μ§κ΄€μ μœΌλ‘œ GET μš”μ²­μ„ μ²˜λ¦¬ν•  λ•Œ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

    예:

    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

2. μ™œ @RequestMapping을 μ„ ν˜Έν• κΉŒ?

  1. λ‹€μ–‘ν•œ HTTP λ©”μ„œλ“œ 처리: @RequestMapping은 GET, POST, PUT, DELETE, PATCH λ“± λ‹€μ–‘ν•œ HTTP λ©”μ„œλ“œλ₯Ό μ§€μ›ν•˜λ©°, ν•˜λ‚˜μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ—μ„œ μ²˜λ¦¬ν•  수 있기 λ•Œλ¬Έμ— 더 μœ μ—°ν•©λ‹ˆλ‹€. 특히 REST APIμ—μ„œλŠ” μ—¬λŸ¬ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žμ•„ @RequestMapping이 더 적합할 수 μžˆμŠ΅λ‹ˆλ‹€.

  2. 클래슀 레벨 λ§€ν•‘: @RequestMapping은 클래슀 λ ˆλ²¨μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 클래슀 λ ˆλ²¨μ— μ μš©ν•˜λ©΄ λͺ¨λ“  λ©”μ„œλ“œμ— λŒ€ν•΄ κ³΅ν†΅λœ 경둜λ₯Ό μ„€μ •ν•  수 μžˆμ–΄ μ½”λ“œλ₯Ό 더 κ°„κ²°ν•˜κ²Œ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    @RestController
    @RequestMapping("/users")
    public class UserController {
    
        @GetMapping
        public List<User> getAllUsers() {
            return userService.getAllUsers();
        }
    
        @PostMapping
        public User createUser(@RequestBody User user) {
            return userService.createUser(user);
        }
    }

    μœ„ μ½”λ“œμ—μ„œ 클래슀 레벨의 @RequestMapping("/users")λŠ” λͺ¨λ“  λ©”μ„œλ“œμ— λŒ€ν•΄ /users 경둜λ₯Ό μ μš©ν•˜λ―€λ‘œ, λ©”μ„œλ“œλ³„λ‘œ 경둜λ₯Ό λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.

  3. ν•˜μœ„ ν˜Έν™˜μ„±: @RequestMapping은 μŠ€ν”„λ§ 2.5λΆ€ν„° μ‘΄μž¬ν•΄μ˜¨ μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, 였래된 λ²„μ „μ˜ μŠ€ν”„λ§μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 반면, @GetMapping, @PostMapping λ“±μ˜ νŠΉμ • λ©”μ„œλ“œ μ „μš© μ–΄λ…Έν…Œμ΄μ…˜μ€ μŠ€ν”„λ§ 4.3 이후에 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 였래된 ν”„λ‘œμ νŠΈλ‚˜ λ ˆκ±°μ‹œ μ½”λ“œμ—μ„œλŠ” 주둜 @RequestMapping을 많이 μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

  4. λ‹€κΈ°λŠ₯μ„±: @RequestMapping은 λ©”μ„œλ“œ 외에도 μš”μ²­μ˜ λ‹€μ–‘ν•œ 속성(헀더, λ§€κ°œλ³€μˆ˜, ν”„λ‘œλ“€μŠ€/컨슘 λ“±)을 μ²˜λ¦¬ν•  수 μžˆλŠ” μ˜΅μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— λ‹€μ–‘ν•œ 쑰건에 따라 μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” λ³΅μž‘ν•œ APIμ—μ„œλŠ” @RequestMapping이 더 μ„ ν˜Έλ©λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄, νŠΉμ • 헀더가 μžˆλŠ” μš”μ²­λ§Œ μ²˜λ¦¬ν•˜λŠ” 경우:

    @RequestMapping(value = "/users", method = RequestMethod.GET, headers = "X-Custom-Header=foo")
    public List<User> getUsersWithCustomHeader() {
        return userService.getAllUsers();
    }

3. @GetMappingκ³Ό 같은 λ©”μ„œλ“œ μ „μš© μ–΄λ…Έν…Œμ΄μ…˜μ˜ μž₯점

ν•˜μ§€λ§Œ, @GetMapping, @PostMapping, @PutMapping λ“±μ˜ HTTP λ©”μ„œλ“œ μ „μš© μ–΄λ…Έν…Œμ΄μ…˜λ“€λ„ μ‚¬μš© μ‹œ μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

  • 가독성: λ©”μ„œλ“œ μ „μš© μ–΄λ…Έν…Œμ΄μ…˜μ€ μš”μ²­μ˜ HTTP λ©”μ„œλ“œλ₯Ό μ§κ΄€μ μœΌλ‘œ μ•Œ 수 μžˆμ–΄, μ½”λ“œ 가독성이 λ†’μ•„μ§‘λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, @GetMapping을 μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή λ©”μ„œλ“œκ°€ GET μš”μ²­μ„ μ²˜λ¦¬ν•œλ‹€λŠ” 것을 λ°”λ‘œ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ°„κ²°μ„±: μ½”λ“œκ°€ κ°„κ²°ν•΄μ§‘λ‹ˆλ‹€. @RequestMapping(method = RequestMethod.GET) λŒ€μ‹  @GetMapping을 μ‚¬μš©ν•˜λŠ” 것이 더 μ§§κ³  λͺ…ν™•ν•©λ‹ˆλ‹€.

κ²°λ‘ 

  • @RequestMapping은 λ‹€μ–‘ν•œ HTTP λ©”μ„œλ“œλ₯Ό μ²˜λ¦¬ν•  수 있고 클래슀 λ ˆλ²¨μ—μ„œ 곡톡 경둜λ₯Ό μ„€μ •ν•˜λŠ” 데 μœ λ¦¬ν•˜λ©°, 더 μœ μ—°ν•˜κ²Œ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ ˆκ±°μ‹œ μ½”λ“œλ‚˜ λ³΅μž‘ν•œ APIμ—μ„œλŠ” μ—¬μ „νžˆ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.
  • @GetMapping λ“± HTTP λ©”μ„œλ“œ μ „μš© μ–΄λ…Έν…Œμ΄μ…˜μ€ κ°„κ²°ν•˜κ³  직관적이며, 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€. κ°„λ‹¨ν•œ APIλ₯Ό μž‘μ„±ν•  λ•ŒλŠ” μ΄λŸ¬ν•œ λ©”μ„œλ“œ μ „μš© μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λŠ” 것이 더 μ’‹μŠ΅λ‹ˆλ‹€.

λ‘˜ 쀑 μ–΄λŠ 것을 μ‚¬μš©ν• μ§€ μ„ νƒν•˜λŠ” 것은 ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬μ‚¬ν•­μ— 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€.