Controller만들어보기

Jay·2023년 8월 27일

Spring

목록 보기
10/17
  • 프로젝트 준비하기
    1. IntelliJ를 실행합니다.

    2. New Project를 클릭합니다.

      Screen Shot 2023-05-03 at 7.08.37 PM.png

    3. 왼쪽 메뉴에서 "Spring Initializr”를 클릭하고 아래와 같이 설정합니다.

      Screen Shot 2023-05-12 at 5.00.36 PM.png

    4. 🚒[중요] 꼭 다음 사항을 확인해주세요.

      • Name: spring-mvc
      • Language: Java
      • Build system: Gradle - Groovy
      • Group: com.sparta
      • JDK: 17
      • 프로젝트 경로(Location)는 자유롭게 설정하시면 됩니다.
    5. Next를 클릭합니다.

    6. Dependencies를 아래 사진과 같이 추가해주고 Create를 클릭합니다.

      Screen Shot 2023-05-30 at 10.35.52 PM.png

  • Controller의 장점 [예제] 회원 관리 API (1) Servlet Code
    @WebServlet(urlPatterns = "/user/login")
    public class UserLoginServlet extends HttpServlet {
    	@Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    		// ... 
    	}
    }
    @WebServlet(urlPatterns = "/user/logout")
    public class UserLogoutServlet extends HttpServlet {
    	@Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    		// ... 
    	}
    }
    @WebServlet(urlPatterns = "/user/signup")
    public class UserSingUpServlet extends HttpServlet {
    	@Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    		// ... 
    	}
    
    	@Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    		// ... 
    	}
    
    }
    • 만약 Spring MVC에 Front Controller 패턴이 적용되어있지 않았을 경우 위에처럼 4개의 API를 위한 3개의 클래스 생성이 필요

      (2) Controller Code

    • 다행히 Spring MVC는 효율적인 API 처리를 위해 Front Controller 패턴

    • 이제는 API 마다 파일을 만들 필요 없다

      • 보통 하나의 Contoller 에 모든 API를 넣지는 않는다
      • 유사한 성격의 API 를 하나의 Controller 로 관리
    • 메서드 이름도 내 마음대로 설정 가능합니다. (단, 클래스 내의 중복메서드명 불가)

      @Controller
      @RequestMapping("/user")
      public class UserController {
      	@GetMapping("/login")
      	public String login() {
      	    // ...
      	}
      
        @GetMapping("/logout")
        public String logout() {
            // ...
        }
      
      	@GetMapping("/signup")
      	public String signup() { 
      		// ... 
      	}
      	
      	@PostMapping("/signup")
        public String registerUser(SignupRequestDto requestDto) {
      		// ... 
      	}
      }
package com.sparta.springmvc.controller;

import lombok.Getter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/api") // 중복되는 path(URL)부분작성하면 아래에서 그다음부터 작성해도된다
public class HelloCotroller {
    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        return "아....hello좀그만"; // view 정보를 전달해서 반환하라는 부분
    }

    @PostMapping("/ana")
    @ResponseBody
    public String ana(){
        return "아놔....post";
    }

    @PutMapping("/anaput")
    @ResponseBody
    public String anaput(){
        return "아놔....puut....";
    }

    @DeleteMapping("/anadelete")
    @ResponseBody
    public String anadelete(){
        return "아놔....delete....";
    }
}

0개의 댓글