본 글은 https://devkingdom.tistory.com/108 블로그의 글을 참고하여 작성하였습니다.
- 설명과 이미지 몇개의 출처는 명시해놓은 블로그입니다.
- 코드 실습 내용은 제가 직접한 코드로 첨부합니다.
개발환경
- OS : Windows 10
- IDE : Eclipse 2021.03
- WAS : Tomcat 9.0
- JAVA : JDK 11
- Framework : 스프링 프레임워크 (스프링 부트 X)
- 프로젝트 설정 : Spring Lagacy Project -> Spring MVC Project
- Spring Version : 4.3.3.RELEASE (pom.xml에서 변경)
REST API란
API 서비스를 만들어 날 때, RESTful 하다는 의미는 무엇일까
API의 엔드 포인트가 단 하나이고
요청과 응답에 대한 메타데이터는 HTTP 프로토콜을 사용해서 전달해야하며,
요청 메서드는 POST, GET, PUT, DELETE를 사용하고
요청 URL에는 동사를 사용하지 않아야 한다.
Layered Architecture
- spring으로 프로젝트를 하기전에 알아야할 개념이 바로 이것이다. 바로 스프링은 Layered Architecture라는 것이다.
이것은 효율적인 개발 및 유지보수를 위해 계층화된 레이어로 개발을 한다는 것이다. 대부분 규모가 꽤 큰 프로젝트에서 이러한 방식으로 개발하는데 각 계층은 독립된 R & R을 가진다.
각 계층은 프레젠테이션, 비즈니스, 데이터 영역으로 나뉜다
Presentation Layer : 클라이언트와의 상호작용을 바로하는 부분이다. 실제 사용자의 요청을 받아 비즈니스 영역에 전달하는 역할을 한다. Spring 에서는 Controller가 이 역할을 한다.
Business Layer : 실제 비즈니스 로직을 처리하는 곳이다. 컨트롤러로부터 요청을 받아서 데이터 계층으로 요청을 전달하고 원하는 데이터를 받아와 특정한 기능이나 트랜잭션이 수행된 뒤 다시 프레젠테이션 계층으로 전달한다.
Spring에서는 Service가 이 역할을 담당한다.
Data Layer : DB에 데이터를 저장하고 값을 조회하는 역할을 담당한다. 비즈니스 영역으로부터 요청을 받아와 DB에 DRUD 작업을 한다. 이는 DAO라고 하고 데이터들은 VO 또는 DTO 패턴으로 처리된다.
REST ful 서비스 실습
0. 프로젝트 생성
- Project -> New -> Other -> 스프링 레거시 프로젝트 생성하기
- 프로젝트 이름과 Spring MVC Project로 생성
- 패키지 이름 입력 OOO. OOO. OOO 으로 하자
1. 실습 전 환경 세팅을 해야하는데 별건없고 톰캣만 연결시키면 된다.
- 이클립스 내의 톰캣 서버 연결
2. Controller를 만들 패키지를 생성하기
- com.test.study.controller 패키지 생성
- com.test.study는 기본으로 생성된 패키지와 컨트롤러이다 (main)
3. 컨트롤러 클래스 생성하기 (보통 HomeController가 생성되는데 이는 root url을 처리하는 컨트롤러이다.)
- 패키지명 : com.test.study.controller
- 클래스명 : ResttestController
* 생성안하고 그냥 HomeController로 해도 무방하다.
4. RestController 어노테이션을 이용해 컨트롤러의 역할을 할 수 있도록 만들고 RequestMapping과 GetMapping으로 URL을 인식할 수 있는 메서드를 만들어 보자.
package com.test.study.controller;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("api") // localhost:0000/api 로 매핑된다.
public class ResttestController {
// Log 확인용
private final Logger log = LoggerFactory.getLogger(ResttestController.class);
@GetMapping("test")
public String test(HttpServletRequest request) {
// HttpServletRequest는 url과 uri를 확인하기 위한 파라미터 안써도 된다.
log.info("URL TEST : '{}'",request.getRequestURL());
log.info("URI TEST : '{}'",request.getRequestURI()); // 컨트롤러로 들어오는 매핑된 URI 로그
log.info("JAVA CLASS PATH : '" + this.getClass().getName()+"'"); // 해당 클래스 경로가 어디인지 출력
return "root url call";
}
}
- Logger 객체는 내가 로그 정보로 uri, url을 확인하기 위해 적어놓은 것이다 안해도 무방하다.
- 처음 매핑 url은 “/”해도 무방한데 나는 api라는 것을 명시하고 싶어 했다.
- 기본형태는 이렇다.
실행준비 완료
*** 정보
- 스프링 4.3이전 버전에는 @Controller와 @ResponseBody를 같이 썼어야 했는데 4.3이후부터는 RestController라는 어노테이션 하나로 가능해졌다고 한다. 이 어노테이션을 사용하면 자바 오브젝트를 자동으로 JSON 형태로 변환시켜 리턴해준다.
- 또한 URL 매핑해주는것도 쉬워졌다.
- 기존에는 @RequestMapping(value=“매핑값”, method=RequestMethod.타입) 이렇게 지정을 해주어야 했는데 이것을 메소드 타입에 따라 @GetMapping, @PostMapping으로 가능해진 것이다.
- POST, PUT, DELETE도 마찬가지 이다.
- 이렇게 하는 방식을 X-mapping(GetMapping, PostMapping, PutMapping, DeleteMapping) 이라고 한다.
5. 이제 실행을 할 것인데 스프링 부트로는 그냥 JAR, WAR로 간편하게 설정해서 실행시키면 된다. 왜냐 내장 톰캣이 있기 때문이다. 하지만 본 포스팅은 스프링 프레임워크로 진행해서 톰캣을 깔고 IDE와 연결을 시켜야 돌아간다.
이점 꼭 인지하고 진행하도록 하자.
이제 ctrl + F11 이나 직접 프로젝트 우클릭 -> Run As -> Run on Server 를 클릭해 실행시키자
- 이클립스 내에서 톰캣이 돌아가고 처음 메인페이지 매핑된 url을 치고 들어가면 기본 페이지가 나오게 된다.
*** 별다른 설정 없이 나의 url은 "localhost:7070/study/" 였지만 톰캣 서버에서 url주소를 수정해주어 /study/라는 패키지명을 생략할 수 있는 것이다. 이점 착오없길 바란다.
- 이제 우리가 매핑해준 url을 들어가보자
- 이렇게 아주 잘 나오는 것을 확인 할 수 있다.
따로 Logger 객체를 이용해 표시되는 log정보
'자바과정 > REST' 카테고리의 다른 글
REST API CRUD 따라하기(Spring) (0) | 2021.09.17 |
---|---|
REST API 실습(Spring MVC) - 2 (4) | 2021.09.13 |
REST API (0) | 2021.09.10 |
댓글