본문 바로가기
IT || 개발공부/Spring

[Spring boot] intelliJ로 Controller 생성 및 실행하기

by saesong 2023. 11. 2.

 

🔶 스프링부트 어플리케이션 기동 후 (Controller만 생성하여) localhost:8080 접속시 "TEST"글자 출력되게 하기
(@RequestMapping, @GetMapping, @Controller, @RestController, 핸들러 이용)

 

 

1. https://start.spring.io/ 접속하여 우측 Add dependencies... 버튼 클릭하여 'Springn Web'  선택 후 하단의 Generate 클릭

Spring Initializr

그 후 다운받은 압축파일을 압축 해제하고 build.gradle 더블클릭후 open as project 버튼 클릭.

 

2. 본인이 이름 지은 파일명+Application.java 파일 실행해보면 (프로젝트명을 'demo'로 했기에 'DemoApplication' 실행)  console창에 아래와 같이 출력된다. 

 

 

3. 웹 브라우저 주소창에 localhost:8080 입력 후 접속하면 이렇게 출력되면 정상임.

 

 

이제 이 화면에 "TEST"라는 글자가 출력되게 해보자.....

앞서 말했듯 @RequestMapping, @GetMapping, @Controller, @RestController, 핸들러를 이용하는 것이다.

나는 상기 명시된 어노테이션들의 의미를 정확히 모르기에, 하나하나 검색해가며 코드를 생성해 볼 것이다.

 

 

 

4.main 폴더 아래 'controller' package 생성 후 'TestController.java' 파일을 생성해주었다.

 

5.

우선 @Controller라는 어노테이션을 기재한다.
@Controller 의 의미는, framework에게 말 그대로 해당 파일 자체를 Controller로 인식하라는 의미이다.
(@Controller 기재했더니 line3에 Controller가 import가 되었다)

 

 

6.

위 코드는 에러 코드입니다...

 

@Controller 작성 후 @RequestMapping 을 기재한다.

@RequestMapping(value = /Test") 는 Servlet 명칭 부여하는 역할. 예를 들어, 주소창에 localhost:8080/Test라고 입력시 그에 맞는 해당 컨트롤러를 탄다.

즉, 특정 URL로 요청(Request)을 보내면 해당 uri에 맞는 Controller에서 특정 메서드와 매핑한다.

보통 @RequestMapping은 해당 controller 안에 공통 url을 쓰는 여러 개의 메서드를 한꺼번에 관리하기 위해 사용한다.

 

 

 

7. 실행해보았다. 그런데...

 

 

자꾸 오류가  발생했는데... 한 시간 삽질 후 알고보니 @RequestMapping에 value값과 method값을 안적어줬던 것이다..

그리고 @Responsbody를 써야 return값이 jsp파일로 가지 않고 return값의 text 그대로 출력가능하다는 것을 알았다...

 

 

실행하였더니

드디어 출력되었다...TEST... (*꒦ິ⌓꒦ີ)

 


 

 

자, 그렇다면 GetMapping을 이용해서 TEST를 출력해보자...

 

우선, @RequestMapping과 @GetMapping의 차이에 대해 예시코드를 가지고 살펴보자.

 

<예시코드 - 과거>

@RestController
public class HelloController {
	
    @RequestMaping(vale = "hello", method = RequestMethod.GET)
    public String helloGet(...) {
    	...
    }
    
    @RequestMaping(vale = "hello", method = RequestMethod.POST)
    public String helloPost(...) {
    	...
    }

 

과거에는 이런식으로 @RequestMapping을 메서드마다 기재해 복잡하게 코드를 썼다면,

현재는 아래 예시코드처럼 @RequestMapping의 하단에 @GetMapping, @PostMapping 등을 사용해 더욱 효율적으로 간결하게 코드를 쓸 수 있게 되었다.

 

<예시코드 - 현재>

@RestController
@RequestMaping(value = "/hello")
public class HelloController {

	@GetMapping()
    public String helloGet(...) {
    	..
    }
    
    @PostMapping()
    public String helloPost(...) {
    	...
    }
}

 

⭐⭐⭐

또한, @RequestMapping은 Class와 Method에 붙일 수 있다.

 

즉, @GetMapping은 "@RequestMapping의 method가 GET방식" 이라고 해석할 수 있다.

 

그리고 여기서 @RestController는 @Controller + @Responsbody 의 역할을 한다.

과거에는 JSP, HTML과 같은 View를 전달해 주었기에 주로 @Controller를 사용했지만,
최근에는 Frontend / Backend을 나누어 개발하는 경우가 많기에 Backend에서 Rest Api를 통해 JSON으로 데이터만 전달하기 때문에 편리성을 위해 @RestController를 사용한다고 한다.

 

보통 조회할때는 GET방식, 등록(생성)시 POST방식, 수정시 PUT방식을 사용한다.
나는 단순 조회기능을 구현하는 것이므로 @GetMapping을 사용했다.
@GetMapping, @PostMapping, @PutMapping 등은 메서드에만 붙일 수 있다.

⭐⭐⭐

 

따라서 코드를 작성해보면..

 

실행해보면

 

 

TEST가 잘 출력된다.

 


개념정리 및 요약

  • @Controller: 해당 파일이 Controller임을 framework에게 알리는 역할
  • @RequestMapping: 특정 uri로 요청을 보내면, 해당 Controller에서 이 요청을 특정 메서드와 매핑하기 위해 사용하는 것.
    => @RequestMapping(value = "/test", method = RequestMethod.GET) 이런방식으로 기재한다.
    참고로, HTTP 주요 메서드로는 다음과 같이 사용된다.
GET - Server의 리소스를 조회하고자 할 때 - (CRUD에서 R(Read) - 읽기)
POST - Server의 리소스를 생성하고자 할 때 - (CRUD에서 C(Create) - 생성)
PUT - Server의 리소스를 수정하고자 할 때 - (CRUD에서 U(Update) - 수정)
PATCH - Server의 리소스를 일부 수정하고자 할 때 - (CRUD에서 U(Update) - 수정)
DELETE - Server의 리소스를 삭제할 때 - (CRUD에서 D(Delete) - 삭제)

 

  • @RestController: @Controller + @Responsbody 의 역할을 하며, JSON 형태의 객체 데이터를 반환한다.
    @Controller는 주로 view를 반환하기 위해 사용한다. 그러나 @RestController는 모든 메서드가 view 대신 객체로 작성(생성)되므로 있는 그대로 객체를 반환한다.
  • @GetMapping: '@RequestMapping의 method가 GET방식' 이라고 해석할 수 있다.
  • Handler: 스프링 MVC에서 웹 요청을 처리하는 객체. Controller도 일종의 핸들러인 셈이다.
    즉, Request로 인해 호출되는 Controller의 메소드를 뜻한다.

 

 


/*여담*/

 

이렇게 하나하나 알아가니 너무 뿌듯했던 과제였다.. 역시 삽질을 좀 해야 성장해나보다...(?)

 


참고: https://backendcode.tistory.com/227, https://mungto.tistory.com/436, IT 늦공 김부장, https://backendcode.tistory.com/213, https://songacoding.tistory.com/3, http://www.mungchung.com/xe/spring/21278

댓글