본문 바로가기
Develop/Spring

[Spring] Spring MVC 로 RESTFul 서비스 개발하기 (1)

by 코딩의성지 2020. 3. 21.

하이 ~~ 

 

요즘 날씨가 거의 봄이다 봄 ㅎㅎ 어디 놀러나가고 싶지만 ... 코로나때문에 나가지도 못하고 ㅜㅡㅜ 

 

봄 날씨인 만큼 Spring(?) 공부나 같이 열심히 하자.

 

지난번에 내가 Spring Boot 환경 설정을 하고, 간단한 프로젝트 하나를 실행시켰었다. 다들 기억하죠?

 

기억안나는 사람 손 !! 아래링크로 가서 다시 한번 쭉 보고 오자.

https://devkingdom.tistory.com/103

 

[Spring] Spring Boot 환경 설정

하이 ~~ 오늘은 Spring Boot 환경 설정을 할거다. 자세히 말하면 스프링 부트 2.0 이다. 스프링 5.0 (스프링부트 2.0) 사용하기 위해서는 JDK 8 이상의 버전이 필요하다. 참고로 스프링 4.0은 JDK 6이상이다. 먼저..

devkingdom.tistory.com

 

자! 오늘은 본격적으로 Spring MVC를 이용해서 RESTFul 서비스를 구현해볼거다.

 

RESTFul

 

지난번 부터 계속 얘기했지만, 다시 한번 얘기하고 넘어가자.

 

API 서비스를 만들어 낼때, RESTFul 하다는 의미는 무엇인가 ? RESTFul 하드는 의미는

 

API 의 엔드포인트가 단 하나이고,

요청과 응답에 대한 메타데이터는 HTTP 프로토콜을 사용해서 전달해야하며,

요청 메서드는 POST ( CREATE ) , GET ( READ ), PUT ( UPDATE) , DELETE ( DELETE) 를 사용하고,

요청 URL에는 동사를 사용하지 않아야 한다.

 

 

Layered Architecture 

 

Spring으로 프로젝트를 하기전에 꼭 ! 꼭 ! 알아야할 개념이 바로 Spring이  Layered Architecture 라는 것이다.

 

Layered Architecture 는 효율적인 개발 및 유지보수를 위해 계층화된 레이어로 개발을 한다는 것이다. 대부분 규모가 꽤 큰 프로젝트에서 이러한 방식으로 개발하는데, 각 계층은 독립된 R & R을 가진다.

 

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

 

 

 

프레젠테이션 영역의 경우 클라이언트와의 상호작용을 바로하는 부분이다. 실제 사용자의 요청을 받아서 비지니스 영역에 전달하는 역할을 한다. Spring 에서는 Controller가 이 역할을 한다.

 

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

Spring 에서는 Service라고 한다.

 

데이터 영역은 DB에 데이터의 저장하고 값을 조회하는 역할을 담당한다. 비지니스 영역으로 부터 요청을 받아와서 db에 CRUD 작업을 한다. 이를 Spring 에서는 DAO 라고 하고 데이터들은 VO 나 DTO 패턴으로 처리된다.

 

 

RESTFul 서비스 개발

 

서두가 굉장히 길었다.. ㅎㅎ 간단하게 이제 구현을 해보자.

 

일단 Controller를 만들 패키지 하나를 만들어주자.

 

 

 

그리고 그안에 HomeController를 만들자. 보통 스프링 웹 프로젝트에서 HomeControlller는 root url을 처리하는 컨트롤러이다.

 

 

그리고 @RestController 어노테이션을 이용해서 컨트롤러의 역할을 할 수 있도록 만들고, @RequestMapping, @GetMapping 어노테이션을 이용해서 URL 콜을할수 있는 메서드를 하나 만들자

아 여기서 스프링 4.3 이전에 스프링을 해보신분들이라면 좀 이상할 수도 있다.

 

 

 

 

 

 

스프링 4.3 이전에는 @Controller 와 @ResponseBody를 함께 썼어야 했는데, 4.3 이후부터는 RestController하나로 가능해졌다. RestController를 사용하면 자바 오브젝트를 자동으로 JSON으로 변환해서 리턴해준다. 굉장히 효율적이고 편리해졌다.

 

 

 

그리고 또 URL을 매핑시켜주는것도 쉬워졌다.

 

@RequestMapping 안에 url과 메서드 방식을 다 정해줘야 했는데 이제 @GetMapping 이렇게만 해주면된다.

참 편하지? 뭐 POST, PUT , DELETE 도 마찬가지이다. 이렇게 하는 방식을 X-mapping (GetMapping, PostMapping, PutMapping, DeleteMapping) 이라고 한다. 

 

자 오늘은 구현 첫번째 시간이니 이렇게 해놓고 스프링 프로젝트를 한번 실행해보자 ! 아 !! 맞다 스프링 부트로 말고 그냥 스프링 웹 프로젝트를 만들었으면 톰캣도 설치해야하고 ... 프로젝트로 WAR로 만들어서 그 톰캣 위에다 올려주고 해야하는 번거로운게 많았는데 , 스프링 부트로 만들면 톰캣이 이미 내장되어 있으니 그냥 JAR로 만들고 실행시키면된다.

 

JAR로 만들려면 다음과 같이 해주면 된다.  Intellij IDEA 상단에 View > Window Tools > Maven 을 선택하면 우측에 아래와 같이 나오느데 거기서 Lifecycle > package를 눌려주자. 

 

 

혹은 Cmd 에서 바로 해줄 수도 있다.

 

 

프로젝트의 경로로 가서 mvn package를 입력해주자. mvn은 maven 전용 명령어이다.

 

 

자 .... 잠시 기다리면 ...!

오 BULID SUCCESS 가 나온다..! ㅎㅎㅎ 그럼 BULID가 끝난거다.

 

 

말아진 jar는 프로젝트 경로 아래 target 디렉토리에 있다.

 

 

이제 이걸 돌려보자!

 

 

잉 ...? 안된다.. 엇 이미 8080 포트를 쏘고 있다고 한다.

 

이전에 내가 .. Spring 프로젝트를 할때 이미 톰캣을 설치하고 포트를 사용하고 있어서 그렇다. 뭐 그렇다면 바꿔주면 되지 ~~ ㅎㅎㅎ 

 

 

 

resources 아래의 application.properties로 가서 포트를 아래와 같이 입력해주고.. 

 

 

다시 프로젝트를 빌드하고 돌려보자 !!

 

 

그러고 나서 브라우저에서 콜 해보면 !!

 

 

이렇게 결과를 확인할 수 있다. ㅎㅎㅎ

 

오늘은 이렇게 까지만 해보고 다음 포스팅에서는 Service나 DAO 도 만들어 보도록 하자 !! 그럼 오늘도 열공하자 !!

반응형

댓글