ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컨트롤러: 웹 서비스의 친절한 안내자 ( Controller 클래스 Java 개발 )
    ☕Java 2024. 12. 29. 19:46
    728x90

    웹 서비스의 세계로 초대합니다!

    인터넷 세상에는 수많은 웹 서비스들이 존재합니다. 우리

    가 매일 사용하는 네이버, 유튜브, 쇼핑몰 등이 모두 웹 서비스의 예시죠. 이러한 웹 서비스들은 사용자의 요청을 받아 정보를 제공하거나, 기능을 실행하는 역할을 합니다. 마치 레스토랑에서 손님이 주문을 하면, 요리사가 음식을 만들어 제공하는 것과 같은 원리입니다.

     

    컨트롤러 등장!

    웹 서비스에서 컨트롤러는 바로 이 요리사와 같은 역할을 수행합니다. 사용자의 요청을 받아 어떤 작업을 수행해야 할지 결정하고, 필요한 데이터를 처리하여 결과를 응답으로 반환하는 것이죠. 컨트롤러는 웹 서비스의 핵심 구성 요소 중 하나이며, 사용자와 웹 서비스 사이의 다리 역할을 담당합니다.

     

    컨트롤러는 어떻게 작동할까요?

    컨트롤러의 작동 방식을 이해하기 위해 레스토랑을 다시 한번 떠올려 봅시다.

    1. 손님(클라이언트)이 메뉴판을 보고 원하는 음식을 주문합니다. (예: "김치찌개 주세요!")
    2. 웨이터(컨트롤러)는 주문을 받아 요리사에게 전달합니다.
    3. 요리사는 주문에 따라 음식을 준비합니다.
    4. 웨이터는 준비된 음식을 손님에게 제공합니다.

    웹 서비스에서도 이와 비슷한 과정을 거칩니다.

    1. 사용자(클라이언트)가 웹 브라우저 또는 앱을 통해 특정 기능을 요청합니다. (예: "/users" 페이지에 접속하여 사용자 목록 보기)
    2. 컨트롤러는 요청을 받아 어떤 기능을 실행해야 할지 결정합니다. ("/users" 페이지 요청은 사용자 목록을 보여주는 기능을 실행해야 함)
    3. 컨트롤러는 필요한 데이터를 가져오거나 처리합니다. (데이터베이스에서 사용자 목록을 가져옴)
    4. 컨트롤러는 처리된 데이터를 사용자에게 응답으로 반환합니다. (웹 브라우저에 사용자 목록을 표시)

    컨트롤러의 역할

    컨트롤러는 웹 서비스에서 다음과 같은 다양한 역할을 수행합니다.

    • 요청 처리: 사용자의 요청을 받아들이고, 요청에 따라 적절한 작업을 수행합니다.
    • 데이터 처리: 요청에 필요한 데이터를 가져오거나, 처리하여 응답에 포함시킵니다.
    • 응답 생성: 사용자에게 보여줄 응답을 생성합니다. HTML 페이지, JSON 데이터 등 다양한 형식의 응답을 생성할 수 있습니다.
    • 뷰 선택: 웹 페이지를 보여줄 때, 어떤 뷰(HTML 템플릿)를 사용할지 결정합니다.
    • 리다이렉션: 필요에 따라 사용자를 다른 페이지로 리다이렉션합니다. (예: 로그인 성공 후 메인 페이지로 이동)
    • 예외 처리: 예상치 못한 오류 발생 시, 적절한 처리를 수행합니다. (예: 오류 메시지 표시, 로그 기록)

    Spring Framework에서 컨트롤러

    Java 웹 개발에서 많이 사용되는 Spring Framework에서는 @Controller 어노테이션을 사용하여 컨트롤러 클래스를 정의합니다.

     

    @Controller
    public class UserController {
    
        @GetMapping("/users")
        public String getUsers(Model model) {
            // ... 사용자 목록을 가져오는 로직 ...
            model.addAttribute("users", users);
            return "users"; // users.html 뷰를 사용하여 사용자 목록을 표시
        }
    }

    @GetMapping 어노테이션은 /users 페이지에 대한 GET 요청을 처리하는 메서드를 지정합니다. 이 메서드는 데이터베이스에서 사용자 목록을 가져와 model 객체에 추가하고, users라는 이름의 뷰를 반환합니다.

     

     

    REST API에서 컨트롤러

    REST API는 웹 서비스들이 서로 데이터를 주고받기 위한 인터페이스입니다. REST API에서 컨트롤러는 JSON 또는 XML 형식의 데이터를 주고받는 역할을 합니다. Spring Framework에서는 @RestController 어노테이션을 사용하여 REST 컨트롤러를 정의합니다.

     

    Controller

    • 역할: 사용자의 요청을 받아 처리하고, 그 결과를 응답으로 반환하는 역할을 합니다.
    • 주요 기능:
      • HTTP 요청 수신 및 처리 (GET, POST, PUT, DELETE 등)
      • 요청 파라미터 분석 및 검증
      • 비즈니스 로직 호출 (Service 계층)
      • 응답 데이터 생성 및 반환 (DTO 사용)
      • 예외 처리
    • 인텔리제이 활용:
      • @Controller 또는 @RestController 어노테이션을 사용하여 컨트롤러 클래스를 정의합니다.
      • @RequestMapping, @GetMapping, @PostMapping 등의 어노테이션을 사용하여 HTTP 요청을 매핑합니다.
      • 인텔리제이의 코드 자동 완성, 디버깅 기능 등을 활용하여 컨트롤러 코드를 작성하고 테스트합니다.

    인텔리제이를 활용하여 실습을 진행하며, 많이 사용하는 어노테이션

    1. 컨트롤러 클래스를 정의하는 어노테이션

    • @Controller: 해당 클래스를 Spring MVC 컨트롤러로 지정합니다. 주로 뷰를 반환하는 웹 페이지 컨트롤러에 사용됩니다.
    • @RestController: @Controller와 @ResponseBody를 결합한 어노테이션입니다. REST API 컨트롤러를 정의할 때 사용하며, 메서드의 반환 값이 HTTP 응답 본문에 직접 포함됩니다.

    2. 요청 매핑을 위한 어노테이션

    • @RequestMapping: 클래스 또는 메서드 레벨에서 요청 URL을 지정합니다.
      • value 속성: URL 경로를 지정합니다. (예: @RequestMapping(value = "/users"))
      • method 속성: HTTP 메서드를 지정합니다. (예: @RequestMapping(value = "/users", method = RequestMethod.GET))
    • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping: @RequestMapping의 축약형 어노테이션으로, 각각 GET, POST, PUT, DELETE, PATCH 요청에 대한 매핑을 간편하게 지정할 수 있습니다. (예: @GetMapping("/users"))

    3. 요청 파라미터 처리를 위한 어노테이션

    • @PathVariable: URL 경로에 포함된 변수 값을 메서드 파라미터에 매핑합니다. (예: @GetMapping("/users/{id}")에서 {id} 값을 @PathVariable Long id로 받아옵니다.)
    • @RequestParam: 쿼리 파라미터 값을 메서드 파라미터에 매핑합니다. (예: /users?name=john에서 name 값을 @RequestParam String name으로 받아옵니다.)
    • @RequestBody: HTTP 요청 본문에 포함된 JSON 또는 XML 데이터를 객체에 매핑합니다. 주로 POST, PUT 요청에서 사용됩니다.
    • @RequestHeader: HTTP 요청 헤더 값을 메서드 파라미터에 매핑합니다.
    • @CookieValue: 쿠키 값을 메서드 파라미터에 매핑합니다.
    • @ModelAttribute: 모델 객체에 속성 값을 추가하거나, 기존 모델 속성을 가져옵니다.

    4. 응답 처리를 위한 어노테이션

    • @ResponseBody: 메서드의 반환 값을 HTTP 응답 본문에 직접 포함시킵니다. @RestController를 사용하면 모든 메서드에 @ResponseBody가 적용됩니다.
    • @ResponseStatus: HTTP 응답 상태 코드를 지정합니다. (예: @ResponseStatus(HttpStatus.CREATED))

    5. 기타 어노테이션

    • @CrossOrigin: Cross-Origin Resource Sharing (CORS)을 설정합니다. 다른 도메인에서 API를 호출할 수 있도록 허용합니다.
    • @ControllerAdvice: 컨트롤러 전반에 걸쳐 예외 처리, 바인딩 설정 등을 적용합니다.
    • @InitBinder: 요청 파라미터를 객체에 바인딩할 때 사용할 커스텀 에디터를 등록합니다.

     

    728x90
Designed by Tistory.