[Spring] Controller

thingzoo·2023년 6월 23일
0

Spring

목록 보기
11/54
post-thumbnail
post-custom-banner

Controller의 장점

예시

회원관리를 위해 로그인 페이지, 로그아웃 처리, 회원가입 페이지, 회원가입 처리 API를 만든다고 가정

Servelt Code

  • 만약 Spring MVC에 Front Controller 패턴이 적용되어있지 않았다면
  • 이처럼 단 4개의 API를 처리하기 위해 무려 3개의 클래스를 만들어야 할 것임
@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) {
		// ... 
	}

}

(Front) 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) {
		// ... 
	}
}

@Controller

@Controller는 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줌

@Controller
public class HelloController {...}

@???Mapping

각 HTTP Method에 매핑되는 annotation

@GetMapping

@GetMapping("/api/get")
public String get() {...}

@PostMapping

@PostMapping("/api/post")
public String post() {...}

@PutMapping

@PutMapping("/api/put")
public String put() {...}

@DeleteMapping

@DeleteMapping("/api/delete")
public String delete() {...}

@RequestMapping

중복되는 URL를 단축시켜줌

@Controller
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/get")
    @ResponseBody
    public String get() {
        return "GET Method 요청";
    }

    @PostMapping("/post")
    @ResponseBody
    public String post() {
        return "POST Method 요청";
    }
    ...
}
profile
공부한 내용은 바로바로 기록하자!
post-custom-banner

0개의 댓글