Controller계층 MVC 패턴에서 컨트롤러가 모여있는 곳을 말한다. 컨트롤러는 서비스 계층을 호출하고 그에 따른 결과를 뷰(JSP)에 전달하는 역할을 한다. 쉽게 말하자면 서비스와 뷰를 잇는 다리역할을 하는 것이다.
※JPS란?
JavaServer Pages의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적 웹페이지를 생성하는 웹 어플리케이션 도구이다.
@Controller : 해당 클래스가 웹 어플리케이션의 컨트롤러임을 나타낸다. 컴포넌트 스캔(Component-Scan)에 의해 스프링 빈으로 등록되며, 들어온 요청을 해당 컨트롤러에 매핑하여 처리한다.
@RequestMapping : 특정 url로 요청(Request)를 보내면 Controller에서 어떠한 방식으로 처리할지 정의하게 되는데, 이 때 들어온 특정 method와 매핑하기 위해 사용되는 어노테이션이다.
이 어노테이션은 클래스에 붙느냐 메소드에 붙느냐에 따라 의미가 달라지는데, 클래스에 붙게 되면 하위 모든 메소드의 공통 주소를 뜻하게 되고 클래스에 붙은 상태에서 메소드에 붙으면 공통주소 이외의 나머지 하위 주소를 뜻한다. 스프링 최신 버전에서는 @GetMapping, @PostMapping 등이 추가되어 @RequestMapping은 클래스 단위에서만 사용되고 메소드 단위에서는 @GetMapping, @PostMapping 등을 사용하는 것을 선호한다.
컨트롤러에서 서비스 계층을 호출할 수 있게 하기 위해 서비스에 대한 의존성을 추가해 주었다. 이 또한 서비스 단을 재할당할 필요가 없기에 final로 설정했다.
@Get/PostMapping : 해당 어노테이션들에 대해 이해하려면 Get메소드와 Post메소드에 대해 이해할 필요가 있다.
Get은 클라이언트에서 서버로 리소스로부터 정보를 요청하기 위해 사용되는 메소드이다. Get메소드는 다음과 같은 특징이 있다.
- 캐시가 가능하다.
- 브라우저 히스토리에 남는다.
- 파라미터에 전부 다 노출되기 때문에 중요한 정보를 넣으면 안된다.(예 : www.example.com/board?id=1)
Post는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메소드이다. Post메소드는 다음과 같은 특징이 있다.
- Get과는 다르게 캐시되지 않는다.
- 브라우저 히스토리에 남지 않는다.
- Get처럼 데이터가 노출되지 않아 보안성이 좋다.
@Get/PostMapping은 위의 Get/Post메소드로 RequestMapping이 쉽게 되도록 하게 해 주는 어노테이션이다.
@PathVariable : 경로변수를 표시하기 위해 사용되는 어노테이션으로 URL경로에서 변수값을 추출하여 매개변수에 할당한다. 코드 내에서 보면 Mapping 내부의 대괄호에 해당하는 부분이다. 이 때 Pathvariable에 적힌 이름과 Mapping 내에 적힌 이름을 일치시켜 줘야하며, null값을 가질 수 없다.(반드시 값을 가져야 한다.)
@RequestParam : 이 어노테이션을 사용하면 Servlet 요청 파라미터를 컨트롤러 메소드의 인자로 바인딩할 수 있다. 파라미터로 전달되는 name("id")와 매개변수의 이름(id)을 일치시키면 자동으로 데이터를 파싱해서 동일한 이름의 변수에 저장시킨다. 위의 코드에서는 해당 id값 데이터를 자동으로 파싱해서 변수에 저장하고 그 저장된 데이터를 Service의 deleteBoard메소드에 넣어 실행시킴으로서 게시물 삭제가 이루어 지는 것이다.
이로써 컨트롤러의 개발도 끝이 났다. 다음은 Application을 실행시켜서 웹에서 제대로 동작하는지 확인해 보고 부족한 것을 짚고 넘어가며 개발을 마칠 것이다.
'Spring MVC' 카테고리의 다른 글
@PathVariable과 @RequestParam의 차이에 대한 공부 (0) | 2025.02.20 |
---|---|
Spring MVC)게시판 만들기 - 웹어플리케이션 실행 및 부족한 점 고찰 (0) | 2025.02.07 |
Spring MVC)게시판 만들기 - Service 생성 (0) | 2025.02.06 |
Spring MVC)게시판 만들기 - Repository 생성 (0) | 2025.02.05 |
Spring MVC)게시판 만들기 - Entity 생성 (0) | 2025.02.05 |