※본 게시글은 점프 투 스프링부트 교재를 기반으로 작성되었음.

 

로컬서버를 구동하고, localhost:8080/hello 페이지를 요청했을 때,

이렇게 나오는 경우가 있다. 이 오류의 원인은 스프링부트 서버가 http://localhost:8080/hello 라는 요청을 해석할 수 없기 때문이다. 이 오류를 해결하기 위해서는, 컨트롤러를 작성하고 hello/ URL에 대한 매핑을 추가하면 된다. 페이지 요청이 발생하면 스프링부트는 가장 먼저 컨트롤러에 요청된 페이지의 URL 매핑이 있는지를 조사한다.

위와 같이, HelloController 클래스에 @Controller 애너테이션을 적용하면 HelloController 클래스는 스프링부트의 컨트롤러가 된다. 그리고 메서드의 @GetMapping 애너테이션은 요청된 URL과의 매핑을 담당한다. 서버에 요청이 발생하면 스프링부트는 요청 페이지와 매핑되는 메서드를 컨트롤러를 대상으로 찾는다. 즉, 스프링부트는 http://localhost:8080/hello 요청이 발생하면 /hello URL과 매핑되는 index 메서드를 HelloController 클래스에서 찾아 실행한다.

@GetMapping http://localhost:8080 과 같은 도메인명과 포트는 적지 않는다. 왜냐하면 도메인명과 포트는 서버 설정에 따라 변하기 때문이다. /~~ 부분만 적으면 된다.

 

GetMapping을 적용해도 위 노란색 표시가 되어 있는 코드가 입력되지 않으면 404가 아닌 500으로 새로운 오류가 나타나게 된다. URL과 매핑된 함수는 결괏값을 리턴해야 하는데 아무런 값도 리턴하지 않기 때문에 오류가 발생한 것이다. 오류를 해결하려면 클라이언트(브라우저)로 응답을 리턴해야 한다. 그 역할을 하는 것이 @ResponseBody 애너테이션이다.

@ResponseBody 애너테이션은 URL 요청에 대한 응답으로 문자열을 리턴하라는 의미이다.

필자는 이런식으로 코드를 작성하였고, 로컬 서버 구동 후 페이지를 다시 호출하면.

 

위와 같이 올바르게 출력된 것을 확인할 수 있다!

 

요약을 해 보면,

@Controller -> JSP, HTML과 같은 View를 전달할 때 주로 쓰임 

@RestController = @ResponseBody + @Controller -> Data를 전송할 때 (JSON형식으로 프론트에게 API 제공)

 

추가적으로, 매핑의 종류에는 다음과 같은 것들이 있다.

@RequestMapping(value = ”url”, method = RequestMethod.GET)

@GetMapping(“url”)

@PostMapping

@DeleteMapping

@PutMapping

매핑을 도식화한 그림이다. 참고가 되었으면 한다.

'백엔드 > Springboot' 카테고리의 다른 글

엔티티(Entity) -1-  (0) 2023.09.17
JPA 환경설정  (0) 2023.09.17
JPA  (1) 2023.09.17
ORM(Object Relational Mapping)  (0) 2023.09.17
스프링부트 프로젝트의 구조  (0) 2023.09.16

+ Recent posts