티스토리 뷰

Web

Restful API 서버 구현과 JSON

nooblette 2021. 4. 15. 00:15
반응형

Development Restful Web Server

학부 졸업 프로젝트로 모바일 어플리케이션제작을 진행하고 있는데, 그 중 Spring Boot Framework를 통한 서버 개발을 하는 중이다.

(Spring Boot는 Spring의 러닝커브를 줄이고자 어느정도의 환경을 설정해주고 여러 스프링의 기능들을 응용하기 쉽게 도와주는 프레임워크이다.

원래 Spring으로 서버 개발을 하려고 했으나, 익숙치않고 너무 어려워서 Spring Boot로 노선을 바꾸게 되었다.)

 

처음엔 관심있는 분야가 웹 서버 개발이였고 모바일 앱을 구현하기로 했을때, 구조가 다를거라 생각해서 조금 걱정되었지만 크게 다를 바 없었다.

 

Web Application Architecture

단지 이 웹 어플리케이션 구조에서 Client가 안드로이드(Java/Kotlin) 혹은 iOS(Swift) 혹은 크로스 플랫폼(React-Native등)과 같은 모바일 UI로 구성될 뿐이었다. (우리는 앱 UI를 React-Navtive를 이용하여 구현하기로 했다)

 

구조는 어느정도 이해가 되었지만, 앱 개발은 물론 프로젝트 경험이 전무해서 프론트에서 서버와 통신할 방법을 몰라 애를 먹었다.

웹 서버로 개발하여 웹 뷰(Web View)를 이용하여 크로스 플랫폼앱을 제작하는 방법도 있었으나, 다양한 오픈 API를 활용하지 못한다는 웹 뷰의 기술적 단점이 치명적이라 다른 방법을 찾게 되었다.

 

React-Native (Java Script)와 Spring Boot (JAVA) 와 같이 언어가 다른 경우 뿐만아니라, 통상 모바일 앱 개발을 할때는 웹 서버가 Restful Service를 제공하여 프론트엔드 부에서 요구하는 Data를 JSON형식으로 전달하는 식으로 모바일 어플리케이션이 서비스가 동작한다는 것을 알게 되었고, Spring boot를 이용하여 Rest api를 제공하는(Restful한) Web Server를 구현하기로 결정했다.

 

덧붙여서, 찾아보니 최근의 웹 서버는 

  • 애플리케이션 분리 및 통합
  • 다양한 클라이언트의 등장
  • 다양한 브라우저와 안드로이드, 아이폰과같은 모바일 디바이스와의 통신기술 요구

등의 이유로 Restful Service에 대한 요구사항이 커지고 있다고 한다.

 

(출처 : gmlwjd9405.github.io/2018/09/21/rest-and-restful.html )

 

본격적으로 구현하기에 앞서,

RestAPI, Restful, JSON의 개념이 전혀 없는 상태라 우선 각 서비스의 구조, 역할, 기능을 알아보았다.

 


REST 

자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 것.

기본적으로 HTTP 프로토콜을 통해 통신한다.

웹 사이트의 이미지, 텍스트, 데이터베이스의 내용등에 고유한 ID인 http URI을 부여하여 데이터를 송수신한다.

 

구성요소

자원 : URI을 의미, 모든 자원엔 고유한 ID가 존재하며, 이 자원이 Server에 존재한다.

행위 : http method(GET, PUT, POST, DELETE)를 지원한다,

http method - 네트워크 요청을 만들때 사용

표현 : JSON, XML, TEXT, RSS 등(대게 JSON이나 XML으로 송수신한다)

 

특징

Server - Client 구조

- 자원이 있는쪽이 Server, 자원을 요구하는쪽이 Client가 된다.

- Rest Server가 API를 제공하고 로직 처리 및 저장을 책임진다.

- Client가 사용자 인증

 

Stateless

- http protocol을 사용하기 때문에 http protocol의 특징인 Stateless(무상태성)를 그대로 가져온다

- Clinet의 context를 Server에 저장하지 않는다.

즉, 세션과 쿠키와 같은 정보를 신경쓰지 않고 서버를 구현해도 된다.

- Server는 각 Client의 요청을 별개의 것으로 인식하고 (단순)처리한다. 

즉, 이전의 요청이 다음 요청에 영향을 끼치면 안된다.

(이전 요청이 DB를 수정하고 DB에 의해 다음 요청이 바뀌는 것은 허용)

 

캐시 처리 가능

- http 프로토콜이 제공하는 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다.

http의 대표적인 특징인 캐시기능을 적용할 수 있다.(Last-Modified 태그나 E-tag를 이용하여 캐싱 구현)

 

Layered System

- 클라이언트는 REST API Server만 호출한다.

- REST Server는 다중 계층으로 구성 될 수 있다.

(사용자 인증 - 암호화 - 로드밸런싱 - 보안 -순수 비즈니스 로직)

- Proxy, Gateway와 같은 네트워크 기반의 중간 매체를 사용할 수 있다.

 

Uniform Interface

- URI로 지정한 자원에 대한 조작을 통일하고 한정적인 인터페이스로 수행한다.


REST API 

Rest를 기반으로 서비스 API를 구현한 것

Rest를 기반으로 시스템을 분산하여 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 도와준다.http를 지원하는 프로그램 언어(자바, C#, Web 등)로 클라이언트, 서버를 구현 할 수 있다.

 

설계 규칙

Document : 객체 인스턴스나 데이터베이스 레코드와 유사한 개념
Collection : 서버에서 관리하는 Directory
Store : 클라이언트에서 관리하는 Resource 저장소

 

1. URI는 정보의 자원을 표현해야 한다.

2. 자원에 대한 행위는 http method(GET, PUT, POST, DELETE 등)로 표현한다. 

3. '/' 는 계층 관계를 나타네는데 사용한다.

4. URI 마지막문자로 '/'를 표함하지 않는다.

5. URI 경로가 길다면 하이픈(-)을 통해 가독성을 높인다.

6. 파일 확장자는 URI에 포함하지 않는다.

7. 리소소 간에 연관관계가 있는경우 /리소스명/리소스 ID/관계가 있는 다른 리소스명 으로 표기

 

출처 : [Network] REST란? REST API란? RESTful이란? - Heee's Development Blog (gmlwjd9405.github.io)

위 블로그에 구체적인 예제도 나와있다.

 


RESTful

REST라는 아키텍쳐로 구현하는 웹 서비스를 일컫는다.

쉽게말해 REST API를 제공하는 웹 서비스를 RESTful하다고 한다.

 

RESTful API를 구현하는 근본적인 목적은 성능 향상이라기보다는

일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것.

 


JSON

JavaScript Object Notation(JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷

단순히 말하자면, 데이터를 표시하는 방법

 

웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용(서버와 클라이언트가 데이터를 송수신할때 사용)

 

Json의 구조


  1. Object(객체)
     - name/value 의 순서쌍으로 set이다.
     - {} 로 정의된다. ex) { "이름" : "홍길동" }
  2. Array(배열)
     -  [ 10, "array", 32 ]

JSon의 예


{
"이름" : "홍길동",
"나이" : 22,
"특기" : ["배구", "야구"]
}

 

{

"name" : "value"

"name" : "value"

"name" : "array value"

}

 

Json Parsing

json 파일에 담긴 정보중 필요한 data만 추출해 내는 것.

 

출처 : json 파일이 도대체 뭐죠??? : 네이버 블로그 (naver.com)

 

json 파일이 도대체 뭐죠???

새로운 언어나 라이브러리로 코딩 좀 해볼라하면 플렛폼을 먼저 설정해야 하고, 플렛폼 설정 좀 해볼라하면...

blog.naver.com

 

JSON으로 작업하기 예제)

1. 요청한 API로부터 받은 JSON file을 통해

2. JavaScript Object를 사용하여 필요한 Data를 추출하고

3. 추출한 Data로 html을 제작하여 화면에 출력해보기

 

JSON으로 작업하기 - Web 개발 학습하기 | MDN (mozilla.org)

 

JSON으로 작업하기 - Web 개발 학습하기 | MDN

JSON으로 작업하기 JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사

developer.mozilla.org

(여유가 있을 때나 졸업프로젝트에 온전히 집중 할 수 있을 때 위 사이트를 통해 JSON 사용 실습을 해봐야겠다)

 

 

 

 출처
 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

 

 

json 파일이 도대체 뭐죠???

새로운 언어나 라이브러리로 코딩 좀 해볼라하면 플렛폼을 먼저 설정해야 하고, 플렛폼 설정 좀 해볼라하면...

blog.naver.com

 

 

JSON으로 작업하기 - Web 개발 학습하기 | MDN

JSON으로 작업하기 JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사

developer.mozilla.org

 

반응형

'Web' 카테고리의 다른 글

URL과 URI의 차이  (0) 2021.07.26
HTTP 프로토콜  (0) 2021.07.21
[Django] MVC 패턴과 MTV 패턴  (0) 2021.07.14
MVC 패턴과 데이터 접근  (0) 2021.07.14
Web Service - MVC 패턴  (0) 2021.07.14
Comments