스프링(Spring)

@Controller, HTTP 파라미터 처리, RESTful API

개발학생 2022. 10. 5. 19:32
반응형

*22년 4월 한 달간 한국이러닝협회의 '실전 개발자를 위한 Spring Framework'를 수강하고 정리한 내용입니다

 

 

1. @Controller

(1) Controller

1) 사용자 요청(URL 기반)에 해당하는 Controller의 특정 메소드가 호출됨

2) Controller는 요청의 파라미터가 있으면 처리

3) 비즈니스 처리를 위해서 서비스 컴포넌트를 주입받아 실행

4) 실행된 결과를 전달받아(화면에 대한 정보와 함께) DispatcherServlet에게 반환

 

*DispatcherServlet

: 웹 어플리케이션 최전방에서 사용자 요청 접수 -> URL 기준으로 요청을 처리할 Controller 찾음 -> 해당 Controller 호출 및 실행

 

*사용되는 Annotation
: @Controller, @RequestMapping, @Autowired

 

(2) Controller 기능 1: @RequestMapping

*Class Level Mapping VS Method Level Mapping

*Spring4.3 이후 요청 방식 선택(=HTTP Method): @GetMapping, @PostMapping, @PutMapping, @DeleteMapping  

 

*@PathVariable: 요청 URL을 파라미터로 사용(경로변수)

- 예) http://cafe.daum.net/sq99/2hq/68443 에서, 요청 url: /bbs/{articleId} / 파라미터로 처리: @PathVariable("articleId") String articleId

 

(3) Controller 기능 2: ModelAndView를 사용한 모델/뷰 처리

- 응답으로 View(JSP)와 Model(Domain Object, VO)을 함께 처리할 때 사용

- 서비스로부터 받아온 데이터를 뷰로 전달해주는 역할

 

- View 작성

* 데이터 바인딩: ${ modelName } 으로 표현

 

(4) Controller 기능 3: Redirect & Forward 처리

- 컨트롤러에서 클라이언트의 요청을 처리한 후에 다른 페이지로 리다이렉트 하고 싶을 때

   return "redirect:/bbs/list";

   cf) forward: return "forward:/bbs/list";

- 경로 부분이 "/"로 시작하면 웹 어플리케이션 내에서의 절대 경로로 리다이렉트

- "/"로 시작하지 않으면 @RequestMapping 어노테이션의 경로를 기준으로 상대 경로로 리다이렉트

 

 

2. HTTP 파라미터 처리

(1) 파라미터 전송받기: @RequestParam

- @RequestParam 어노테이션을 이용한 요청 파라미터 구하기

 

* get / post로 요청을 넘겨 받음

 

* require = false는 요청 값이 없을 때 에러를 보내지 않고 null을 리턴

 

(2) 예시) Command 객체를 이용해 폼 전송 처리하기: Command 객체 사용 전

<form method="post">
	이메일: <input type="text" name="email" /><br/>
    이름: <input type="text" name="name" /><br/>
    암호: <input type="password" name="password" /><br/>
    암호확인: <input type="password" name="confirmPassword" /><br/>
	<input type="submit" value="가입" />
</form>
@RequestMapping(value="/join", method=RequestMethod.POST)
public ModelAndView test9(
		@RequestParam("email") String email,
        @RequestParam("name") String name,
        @RequestParam("password" String password,  .
       ){
       ...
}

 

(3) 예시) Command 객체를 이용해 폼 전송 처리하기: Command 객체 사용

- 파라미터의 이름과 동일한 프로퍼티를 가진 클래스 작성

public class Member {
	
    private String email;
    private String name;
    private String password;
    private String confirmPassword;
    
    public String getEmail() {
    		return email;
    }
    	...Getter / Setter...
}

 

- HTTP Form 데이터가 자동으로 Member 객체에 저장됨

@RequestMapping(value="/join", method=RequestMethod.POST)
public ModelAndView test9(Member member) {
		// 서비스 호출 및 데이터 확보
        
        return new ModelAndView("bbs/join")
        	.addObject("member", member);
}

 

* Command 객체는 자동으로 View의 Model로 바로 등록

  -> view.addObject("member", member); 코드가 필요 없음

* 커맨드 객체를 Jsp에서 사용할 때는 객체명 중 첫 글자만 소문자로 바꾸어 사용

* 타입 자동 변환 기능 있음
  -> 숫자는 int(long), double 타입으로 사용 가능

  -> true, false는 boolean 타입으로 사용 가능

 

(4) 예시) Command 객체를 이용해 폼 전송 처리하기: Collection 처리

- Collection 처리: HTML에서 같은 이름의 input 엘리먼트가 구성

- Command 객체를 사용하여 List로 처리

 

 

3. Restful API

(1) Open API란?

- 프로그래밍에서 사용할 수 있는 개방되어 있는 상태의 인터페이스(API: 응용 프로그램을 개발할 때 사용하는 인터페이스)

- Daum, Naver 등의 포털 사이트나 통계청, 기상청 등과 같은 관공서에서도,

  가지고 있는 데이터를 외부 응용 프로그램에서 사용할 수 있도록 Open API를 제공하고 있음

- Open API와 함께 자주 거론되는 기술이 REST이며, 대부분의 Open API는 REST 방식으로 지원되고 있음

 

(2) REST(REpresentational Safe Transferful) API란?

HTTP URI + HTTP Method

 

- HTTP URI를 통해 제어할 자원(Resource)을 명시하고,

  HTTP Method (GET, POST, PUT, DELETE)를 통해 해당 자원(Resource)을 제어하는 명령을 내리는 방식의 아키텍처

 

- HTTP 프로토콜에 정의된 4개의 메서드들이 자원(Resource)에 대한 CRUD Operation을 정의

 

(3) RESTful API란?

- HTTP와 URI 기반으로 자원에 접근할 수 있도록 제공하는 애플리케이션 개발 인터페이스

  (REST의 원리를 따르는 시스템은 RESTful이란 용어로 지칭)

 

*기존의 웹 접근 방식과 RESTful API 방식과의 차이점

  기존 게시판 RESTful API를 지원하는 게시판
글목록 GET /bbs/list GET /bbs
글읽기 GET /bbs/list/{articleId} GET /bbs/{articleId}
글등록 POST /bbs/regist POST /bbs
글삭제 GET /bbs/remove/{articleId} DELETE /bbs/{articleId}
글수정 POST /bbs/modify/{articleId} PUT /bbs/{articleId}

    -> 기존의 게시판은 GET와 POST만으로 자원에 대한 CRUD를 처리하며, URI는 액션을 나타낸다.

    -> RESTful 게시판은 4가지 메서드를 모두 사용하여 CRUD를 처리하며, URI는 제어하려는 자원을 나타낸다.

 

(4) RESTful 웹서비스와 JSON/XML

 

(5) JSON(JavaScript Object Notation)이란?

- http://www.json.org 

- 경량의 DATA-교환 형식

- Javascript에서 객체를 만들 때 사용하는 표현식

- JSON 표현식은 사람과 기계 모두 이해하기 쉬우며 용량이 작아서, 최근에는 JSON이 XML을 대체해서 데이터 전송 등에 많이 사용

- 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링 할 수 있는 라이브러리를 제공

 

*JSON 형식

 

(6) 스프링 JSON 라이브러리: Jackson

- http://jackson.codehaus.org  

- High-Performance JSON Processor!

- JSON 형태를 Java 객체로, Java 객체를 JSON 형태로 변환해주는 Java용 JSON 라이브러리

- 가장 많이 사용하는 JSON 라이브러리

 

(7) RESTful 서비스 구현

(1) Spring MVC 기반 RESTful 웹서비스 구현 절차

1) RESTful 웹서비스를 처리할 RestfulController 클래스 작성 및 Spring Bean으로 등록

2) 요청을 처리할 메서드에 @RequestMapping @RequestBody와 @ResponseBody 어노테이션 선언

3) REST Client Tool(Postman)을 사용하여 각각의 메서드 테스트

4) Ajax 통신을 하여 RESTful 웹서비스를 호출하는 HTML 페이지 작성

 

(2) RESTful API 설계 사례

- 사용자 관리 RESTful 웹서비스 URI와 Method

Action Resource URI HTTP Method
사용자 목록 /users GET
사용자 보기 /users/{id} GET
사용자 등록 /users POST
사용자 수정 /users/{id} PUT
사용자 삭제 /users/{id} DELETE

 

(3) RESTful Controller를 위한 핵심 어노테이션(Annotation)

- 클라이언트에서 전송한 XML이나 JSON 데이터를 Controller에서 Java 객체로 변환해서 받을 수 있는 기능(수신)을 제공하고 있음

- Java 객체를 XML이나 JSON으로 변환해서 전송할 수 있는 기능(송신)을 제공하고 있음

어노테이션 설명
@RequestBody HTTP Request Body(요청 몸체)를
Java 객체로 전달받을 수 있음
@ResponseBody Java 객체를 HTTP Response Body(응답 몸체)로
전송할 수 있음

 

 

 

 

반응형