Home > Backend Development > πŸ“š[Backend Development] Java Spring ν”„λ ˆμž„μ›Œν¬μ˜ 계측 - Presentation Layer(ν‘œν˜„ 계측)

πŸ“š[Backend Development] Java Spring ν”„λ ˆμž„μ›Œν¬μ˜ 계측 - Presentation Layer(ν‘œν˜„ 계측)
Backend Ddevelopment Component Layer Architecture

πŸ“š[Backend Development] Java Spring ν”„λ ˆμž„μ›Œν¬μ˜ 계측 1️⃣

βœ… Presentation Layer(ν‘œν˜„ 계측)

  • μ£Όμš” μ»΄ν¬λ„ŒνŠΈ : @Controller, @RestController
  • μ—­ν•  : μ‚¬μš©μžμ˜ HTTP μš”μ²­(Request)을 λ°›κ³ , κ·Έ κ²°κ³Όλ₯Ό 응닡(Response)으둜 λ³΄λ‚΄μ£ΌλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§„μž…μ μž…λ‹ˆλ‹€.
  • μ„€λͺ… : μ‚¬μš©μžμ˜ μž…λ ₯을 λ°›μ•„ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€ κ³„μΈ΅μœΌλ‘œ 데이터 처리λ₯Ό μœ„μž„ν•©λ‹ˆλ‹€. λΉ„μ¦ˆλ‹ˆμŠ€ κ³„μΈ΅μ—μ„œ 처리된 κ²°κ³ΌλŠ” λ‹€μ‹œ 이 κ³„μΈ΅μ—μ„œ μ‚¬μš©μžμ—κ²Œ 보여쀄 ν˜•μ‹(HTML, JSON λ“±)으둜 λ³€ν™˜λ˜μ–΄ μ „λ‹¬λ©λ‹ˆλ‹€.

βœ… 1. Presentation LayerλŠ” μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

μ™ΈλΆ€ ν΄λΌμ΄μ–ΈνŠΈ(μ›Ή λΈŒλΌμš°μ €, λͺ¨λ°”일 μ•± λ“±)κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯에 μ ‘κ·Όν•΄μ•Ό ν•  λ•Œ 항상 μ‚¬μš©ν•©λ‹ˆλ‹€.
μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ˜ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ±°λ‚˜, 앱이 μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό κ°€μ Έμ˜€λŠ” λͺ¨λ“  μˆœκ°„μ— 이 계측이 κ°€μž₯ λ¨Όμ € λ™μž‘ν•©λ‹ˆλ‹€.

βœ… 2. Presentation LayerλŠ” μ–΄λ””μ„œ μ‚¬μš©ν•˜λ‚˜μš”?

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜μ˜ κ°€μž₯ λ°”κΉ₯μͺ½ 계측에 μœ„μΉ˜ν•©λ‹ˆλ‹€.
μ™ΈλΆ€ ν΄λΌμ΄μ–ΈνŠΈμ™€ λ‚΄λΆ€ λΉ„μ¦ˆλ‹ˆμŠ€ 계측(Service Layer) μ‚¬μ΄μ˜ 쀑간 닀리 역할을 ν•˜λ©°, μ‹œμŠ€ν…œμ˜ β€˜ν˜„κ΄€β€™ λ˜λŠ” β€˜μ•ˆλ‚΄ λ°μŠ€ν¬β€™λΌκ³  생각할 수 μžˆμŠ΅λ‹ˆλ‹€.

βœ… 3. Presentation LayerλŠ” μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ‚˜μš”?

주둜 μ–΄λ…Έν…Œμ΄μ…˜ 기반으둜 μ‚¬μš©ν•˜λ©°, μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  응닡을 λ°˜ν™˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

  • @RestController, @Controller μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ 클래슀λ₯Ό μ§€μ •ν•΄ μš”μ²­μ„ 받을 수 μžˆλŠ” μƒνƒœλ‘œ λ§Œλ“­λ‹ˆλ‹€.
  • @GetMapping, @PostMapping λ“±μœΌλ‘œ νŠΉμ • URLκ³Ό HTTP Method에 λ§žλŠ” 처리 λ©”μ„œλ“œλ₯Ό μ—°κ²°ν•©λ‹ˆλ‹€.
  • λ©”μ„œλ“œ λ‚΄μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 데이터λ₯Ό λ°›μ•„ μœ νš¨μ„±μ„ κ²€μ‚¬ν•œ ν›„, 처리λ₯Ό μ„œλΉ„μŠ€ 계측(Service Layer)에 μœ„μž„ν•©λ‹ˆλ‹€.
  • μ„œλΉ„μŠ€λ‘œλΆ€ν„° 받은 κ²°κ³Όλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ JSON λ°μ΄ν„°λ‚˜ HTML ν™”λ©΄μ˜ ν˜•νƒœλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

βœ… 4. Presentation LayerλŠ” μ™œ μ‚¬μš©ν•˜λ‚˜μš”?

κ°€μž₯ μ€‘μš”ν•œ μ΄μœ λŠ” κ΄€μ‹¬μ‚¬μ˜ 뢄리(Separation of Concerns, SoC) λ₯Ό 톡해 μ‹œμŠ€ν…œμ„ 더 체계적이고 μœ μ—°ν•˜κ²Œ λ§Œλ“€κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.

  • μ—­ν• κ³Ό μ±…μž„ λͺ…ν™•ν™” : 이 계측은 β€˜μ›Ή μš”μ²­κ³Ό μ²˜λ¦¬β€™λΌλŠ” μ±…μž„λ§Œ κ°€μ§‘λ‹ˆλ‹€. 덕뢄에 λΉ„μ¦ˆλ‹ˆμŠ€ 계측은 β€˜ν•΅μ‹¬ 둜직 μ²˜λ¦¬β€™μ—λ§Œ 집쀑할 수 μžˆμ–΄ μ½”λ“œ 이해가 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.
  • μœ μ§€λ³΄μˆ˜ μš©μ΄μ„± : ν”„λ‘ νŠΈμ—”νŠΈμ— λ³΄μ—¬μ£ΌλŠ” 데이터 ν˜•μ‹μ„ λ³€κ²½ν•΄μ•Ό ν•  λ•Œ, λ‹€λ₯Έ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ κ±΄λ“œλ¦¬μ§€ μ•Šκ³  Presentation Layer만 μˆ˜μ •ν•˜λ©΄ λ˜λ―€λ‘œ 관리가 νŽΈν•©λ‹ˆλ‹€.
  • μœ μ—°μ„± 및 ν™•μž₯μ„± : μ›Ή(HTML)으둜 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λ‹€κ°€ λͺ¨λ°”일 앱을 μœ„ν•œ APIκ°€ μΆ”κ°€λ‘œ ν•„μš”ν•΄μ Έλ„, κΈ°μ‘΄ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ κ·ΈλŒ€λ‘œ 두고 μƒˆλ‘œμš΄ Controller만 μΆ”κ°€ν•˜λ©΄ λ˜λ―€λ‘œ ν™•μž₯이 μš©μ΄ν•©λ‹ˆλ‹€.

βœ… Controller의 역할은 λ¬΄μ—‡μ•ˆκ°€μš”?

Controller의 핡심 역할은 HTTP μš”μ²­μ„ λ°›μ•„, 그에 λ§žλŠ” μ„œλΉ„μŠ€(κΈ°λŠ₯)λ₯Ό ν˜ΈμΆœν•˜κ³ , 처리된 κ²°κ³Όλ₯Ό λ‹€μ‹œ μ‚¬μš©μžμ—κ²Œ 응닡(Response)ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

쑰금 더 κ΅¬μ²΄μ μœΌλ‘œλŠ” λ‹€μŒκ³Ό 같은 역할을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

  • μš”μ²­ μ ‘μˆ˜ (Endpoint Mapping) : μ‚¬μš©μžκ°€ 보낸 URLκ³Ό HTTP Method(GET, POST λ“±)λ₯Ό 보고, μ–΄λ–€ λ©”μ„œλ“œκ°€ 이 μš”μ²­μ„ μ²˜λ¦¬ν•΄μ•Ό ν• μ§€ κ²°μ •ν•©λ‹ˆλ‹€.
  • 데이터 μˆ˜μ‹  및 검증 (Data Binding & Validation) : μ‚¬μš©μžκ°€ 보낸 데이터(예: νšŒμ›κ°€μž… 정보)λ₯Ό μžλ°” 객체둜 λ³€ν™˜ν•˜κ³ , 데이터가 μœ νš¨ν•œμ§€(예: 이메일 ν˜•μ‹μ΄ λ§žλŠ”μ§€) κ²€μ‚¬ν•©λ‹ˆλ‹€.
  • μ„œλΉ„μŠ€μ— μž‘μ—… μœ„μž„ (Delegate to Service) : ControllerλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 직접 μ²˜λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 데이터 μ²˜λ¦¬κ°€ ν•„μš”ν•œ μ‹€μ œ μž‘μ—…μ€ μ„œλΉ„μŠ€(Service) 계측에 μœ„μž„ν•©λ‹ˆλ‹€.
  • κ²°κ³Ό λ°˜ν™˜ (Return Response) : μ„œλΉ„μŠ€λ‘œλΆ€ν„° 받은 처리 κ²°κ³Όλ₯Ό μ‚¬μš©μžμ—κ²Œ μ μ ˆν•œ ν˜•νƒœλ‘œ(주둜 JSON λ˜λŠ” HTML) λ³€ν™˜ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.

πŸ“ λΉ„μœ  : λ ˆμŠ€ν† λž‘μ˜ β€˜μ›¨μ΄ν„°β€™μ™€ κ°™μŠ΅λ‹ˆλ‹€. μ†λ‹˜(Client)의 μ£Όλ¬Έ(Request)을 λ°›μ•„ μ£Όλ°©(Service)에 μ „λ‹¬ν•˜κ³ , μ™„μ„±λœ μš”λ¦¬(Data)λ₯Ό μ†λ‹˜μ—κ²Œ λ‹€μ‹œ μ„œλΉ™(Response)ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
웨이터가 직접 μš”λ¦¬ν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ, Controller도 직접 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

βœ… ControllerλŠ” μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

웹을 톡해 μ™ΈλΆ€μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŠΉμ • κΈ°λŠ₯에 μ ‘κ·Όν•΄μ•Ό ν•  λ•Œ 항상 μ‚¬μš©ν•©λ‹ˆλ‹€.

  • μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ—μ„œ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ±°λ‚˜ νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•  λ•Œ
  • λͺ¨λ°”일 μ•±μ—μ„œ μ„œλ²„μ˜ 데이터λ₯Ό λΆˆλŸ¬μ˜€κ±°λ‚˜ μ €μž₯ν•  λ•Œ
  • λ‹€λ₯Έ μ„œλ²„(μ‹œμŠ€ν…œ)κ°€ 우리 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ APIλ₯Ό ν˜ΈμΆœν•  λ•Œ

즉, ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €, μ•± λ“±)와 μ„œλ²„μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ—°κ²°ν•˜λŠ” λͺ¨λ“  μ ‘μ μ—μ„œ Controllerκ°€ μ‚¬μš©λ©λ‹ˆλ‹€.

βœ… ControllerλŠ” μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ‚˜μš”?

주둜 μ–΄λ…Έν…Œμ΄μ…˜(@)을 μ‚¬μš©ν•˜μ—¬ ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œμ˜ 역할을 μ§€μ •ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

μ•„λž˜λŠ” κ°„λ‹¨ν•œ μ‚¬μš©μž 정보 쑰회 API의 Controller μ˜ˆμ‹œ μ½”λ“œμž…λ‹ˆλ‹€.

// 이 ν΄λž˜μŠ€κ°€ API μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” Controllerμž„μ„ μ„ μ–Έν•©λ‹ˆλ‹€.
// @RestControllerλŠ” 각 λ©”μ„œλ“œμ˜ λ°˜ν™˜ 값을 μžλ™μœΌλ‘œ JSON ν˜•νƒœλ‘œ λ³€ν™˜ν•΄μ€λ‹ˆλ‹€.
@RestController
public class UserController {
    
    // λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•  UserServiceλ₯Ό μ—°κ²°ν•©λ‹ˆλ‹€. (μ˜μ‘΄μ„± μ£Όμž…)
    private final UserService userService;
    
    public UserController(UserService userService) {
        this.userService = userService;
    }
    
    /**
     * λͺ¨λ“  μ‚¬μš©μž λͺ©λ‘μ„ μ‘°νšŒν•˜λŠ” API
     * HTTPGET μš”μ²­ & URL "/api/users"에 λ§€ν•‘λ©λ‹ˆλ‹€.
     */
    @GetMapping("/api/users")
    public List<User> getAllUsers() {
        // μ‹€μ œ 데이터 μ‘°νšŒλŠ” Serviceμ—κ²Œ μœ„μž„ν•©λ‹ˆλ‹€.
        return userService.findAllUsers();
    }
    
    /**
     * νŠΉμ • ID의 μ‚¬μš©μž ν•œ λͺ…을 μ‘°νšŒν•˜λŠ” API
     * URL 경둜의 {id} 뢀뢄을 νŒŒλΌλ―Έν„°λ‘œ λ°›μŠ΅λ‹ˆλ‹€.
     * 예: /api/users/1 -> id λ³€μˆ˜μ— 1이 λ‹΄κΉλ‹ˆλ‹€.
     */
    @GetMapping("/api/users/{id}")
    public User getUserById(@PathVariable Long id) {
        // Serviceμ—κ²Œ idλ₯Ό μ „λ‹¬ν•˜μ—¬ 데이터 쑰회λ₯Ό μœ„μž„ν•©λ‹ˆλ‹€.
        return userService.findUserById(id);
    }
}

μ½”λ“œ μ‚¬μš©λ²• μš”μ•½:

  1. 클래슀 μœ„μ— @RestController λ₯Ό λΆ™μ—¬ Controllerμž„μ„ λͺ…μ‹œν•©λ‹ˆλ‹€.
  2. μš”μ²­μ„ μ²˜λ¦¬ν•  λ©”μ„œλ“œ μœ„μ— @GetMapping, @PostMapping λ“±μœΌλ‘œ μ–΄λ–€ HTTP μš”μ²­κ³Ό URL에 응닡할지 μ§€μ •ν•©λ‹ˆλ‹€.
  3. URL에 ν¬ν•¨λœ 값은 @PathVariable 둜, μš”μ²­ 본문에 λ‹΄κΈ΄ λ°μ΄ν„°λŠ” @RequestBody 둜 λ°›μŠ΅λ‹ˆλ‹€.
  4. μ²˜λ¦¬ν•  λ‘œμ§μ€ Service 객체의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μœ„μž„ν•©λ‹ˆλ‹€.
  5. λ©”μ„œλ“œμ˜ λ°˜ν™˜ 값은 Spring이 μžλ™μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 보낼 응닡 데이터(주둜 JSON)둜 λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€.

βœ… Controller와 RestController의 차이점은?

@RestControllerλŠ” @Controller에 @ResponseBodyκ°€ μΆ”κ°€λœ κ²ƒμœΌλ‘œ, APIλ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

@Controller와 @RestController의 κ°€μž₯ 큰 차이점은 λ°˜ν™˜ν•˜λŠ” κ°’μ˜ μ’…λ₯˜μ— μžˆμŠ΅λ‹ˆλ‹€.

  • @Controller : 주둜 View(HTML νŽ˜μ΄μ§€) λ₯Ό λ°˜ν™˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • λ©”μ„œλ“œκ°€ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜λ©΄, Spring은 κ·Έ λ¬Έμžμ—΄μ„ View의 μ΄λ¦„μœΌλ‘œ ν•΄μ„ν•˜μ—¬ ν•΄λ‹Ή 화면을 λ Œλ”λ§ν•©λ‹ˆλ‹€.
    • λ§Œμ•½ @Controllerμ—μ„œ JSON 같은 데이터λ₯Ό λ°˜ν™˜ν•˜λ €λ©΄, λ©”μ„œλ“œμ— @ResponseBody μ–΄λ…Έν…Œμ΄μ…˜μ„ λ³„λ„λ‘œ λΆ™μ—¬μ€˜μ•Ό ν•©λ‹ˆλ‹€.
  • @RestController : 데이터(주둜 JSON, XML) λ₯Ό λ°˜ν™˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • 이 μ–΄λ…Έν…Œμ΄μ…˜μ€ @Controller + @ResponseBody λ₯Ό 합쳐 놓은 것 μž…λ‹ˆλ‹€.
    • ν΄λž˜μŠ€μ— @RestControllerλ₯Ό 뢙이면, κ·Έ μ•ˆμ˜ λͺ¨λ“  λ©”μ„œλ“œλŠ” Viewκ°€ μ•„λ‹Œ 데이터 자체λ₯Ό λ°˜ν™˜ν•˜λŠ” 것이 κΈ°λ³Έ λ™μž‘μ΄ λ©λ‹ˆλ‹€. RESTful APIλ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

ꡬ뢄 @Controller @RestController
μ£Όμš” λͺ©μ  MVC νŒ¨ν„΄μ˜ View(ν™”λ©΄) λ°˜ν™˜ REST API의 데이터(JSON λ“±) λ°˜ν™˜
λ©”μ„œλ“œ λ°˜ν™˜ κ°’ View 이름 (String) 객체, 데이터 (μžλ™μœΌλ‘œ JSON으둜 λ³€ν™˜)
@ResponseBody 데이터 λ°˜ν™˜ μ‹œ, λ©”μ„œλ“œμ— 별도 μΆ”κ°€ ν•„μš” ν΄λž˜μŠ€μ— μžλ™μœΌλ‘œ ν¬ν•¨λ˜μ–΄ μžˆμ–΄ λΆˆν•„μš”
μ‚¬μš© 사둀 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ (JSP, Thymeleaf) μ›Ή νŽ˜μ΄μ§€ 개발 λͺ¨λ°”일 μ•±, ν”„λ‘ νŠΈμ—”λ“œ(React, Vue)와 μ—°λ™ν•˜λŠ” API 개발

βœ… κ·Έ μ™Έ Presentation Layer의 μ»΄ν¬λ„ŒνŠΈ

Controller 외에도 Presentation Layerμ—μ„œλŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  μ˜ˆμ™Έλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  • @ControllerAdvice / @RestControllerAdvice : μ „μ—­ μ˜ˆμ™Έ 처리λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€. μ—¬λŸ¬ Controllerμ—μ„œ λ°œμƒν•˜λŠ” νŠΉμ • μ˜ˆμ™Έ(Exception)듀을 ν•œ κ³³μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ²˜λ¦¬ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. μ½”λ“œ 쀑볡을 쀄이고 μ˜ˆμ™Έ 관리λ₯Ό μ€‘μ•™ν™”ν•˜λŠ” 데 ν•„μˆ˜μ μž…λ‹ˆλ‹€.
  • @ExceptionHandler : @Controllerλ‚˜ @ControllerAdvice 클래슀 λ‚΄μ—μ„œ νŠΉμ • μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ λ•Œ 싀행될 λ©”μ„œλ“œλ₯Ό μ§€μ •ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, NullPointException이 λ°œμƒν•˜λ©΄ νŠΉμ • μ—λŸ¬ νŽ˜μ΄μ§€λ‚˜ JSON 응닡을 보내도둝 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • Filter / Interceptor : Controller에 μš”μ²­μ΄ λ„λ‹¬ν•˜κΈ° 전후에 κ³΅ν†΅λœ μž‘μ—…μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
    • Filter: μ‚¬μš©μžμ˜ μš”μ²­/응닡 λ‚΄μš©μ„ λ³€κ²½ν•˜κ±°λ‚˜, 인코딩 λ³€ν™˜, 인코딩 λ³€ν™˜, λ³΄μ•ˆ 검사 등을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. Spring ν”„λ ˆμž„μ›Œν¬ λ°”κΉ₯인 Servlet λ‹¨κ³„μ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€.
    • Interceptor: Filter와 μœ μ‚¬ν•˜μ§€λ§Œ Spring MVC의 μΌλΆ€μž…λ‹ˆλ‹€. μ‚¬μš©μž 인증(둜그인) μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ±°λ‚˜, Controller둜 λ„˜μ–΄κ°€λŠ” 데이터에 μΆ”κ°€ 정보λ₯Ό λ”ν•˜λŠ” λ“± λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— 더 κ°€κΉŒμš΄ μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.