본문 바로가기
자바과정/REST

REST API 실습(Spring MVC) - 1

by Parkej 2021. 9. 13.
더보기

본 글은 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을 가진다.

각 계층은 프레젠테이션, 비즈니스, 데이터 영역으로 나뉜다

 

스프링 Layer 구조

 

Presentation Layer : 클라이언트와의 상호작용을 바로하는 부분이다. 실제 사용자의 요청을 받아 비즈니스 영역에 전달하는 역할을 한다. Spring 에서는 Controller가 이 역할을 한다.

 

Business Layer : 실제 비즈니스 로직을 처리하는 곳이다. 컨트롤러로부터 요청을 받아서 데이터 계층으로 요청을 전달하고 원하는 데이터를 받아와 특정한 기능이나 트랜잭션이 수행된 뒤 다시 프레젠테이션 계층으로 전달한다.

Spring에서는 Service가 이 역할을 담당한다.

 

Data Layer : DB에 데이터를 저장하고 값을 조회하는 역할을 담당한다. 비즈니스 영역으로부터 요청을 받아와 DBDRUD 작업을 한다. 이는 DAO라고 하고 데이터들은 VO 또는 DTO 패턴으로 처리된다.

 

 


 

REST ful 서비스 실습

0. 프로젝트 생성

 - Project -> New -> Other -> 스프링 레거시 프로젝트 생성하기

프로젝트 생성1

 

- 프로젝트 이름과 Spring MVC Project로 생성

프로젝트 생성2

 

 - 패키지 이름 입력 OOO. OOO. OOO 으로 하자

기본 패키지 생성이름 정하기

 

1. 실습 전 환경 세팅을 해야하는데 별건없고 톰캣만 연결시키면 된다.

 - 이클립스 내의 톰캣 서버 연결

저는 9.0 사용했습니다. 

 

2. Controller를 만들 패키지를 생성하기

 

프로젝트 구조

 - com.test.study.controller 패키지 생성

 - com.test.study는 기본으로 생성된 패키지와 컨트롤러이다 (main)

 

3. 컨트롤러 클래스 생성하기 (보통 HomeController가 생성되는데 이는 root url을 처리하는 컨트롤러이다.)

생성된 패키지와 컨트롤러 클래스

 - 패키지명 : com.test.study.controller

 - 클래스명 : ResttestController

* 생성안하고 그냥 HomeController로 해도 무방하다.

 

4. RestController 어노테이션을 이용해 컨트롤러의 역할을 할 수 있도록 만들고 RequestMappingGetMapping으로 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을 들어가보자 

http://localhost:7070/api/test

- 이렇게 아주 잘 나오는 것을 확인 할 수 있다. 

 

 

 

따로 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

댓글