SlideShare ist ein Scribd-Unternehmen logo
1 von 84
Downloaden Sie, um offline zu lesen
RESTful API 디자인
막 쓰지 말고 제대로 써보자!
병장 조성수
목차 1. REST API
1-1 요약하면!
2. REST API 특징
2-1 Client-Server
2-2 Stateless Server
2-3 Cache
2-4 uniform Interface
2-5 Layered System
2-6 Code on Demand
3. REST API 디자인
3-1 REST API 디자인 규칙
4. 실제로 써보니
1
REST API :
요약하자면!
1 REST 란?
REpresentational
State
Transfer
2000년 Roy Fielding의 박사 학위 논문에서 처음 제안
대규모 네트워크 시스템을 위한 아키텍쳐
1
REST API :
요약하자면!
1 REST 란?
HTTP URI HTTP METHOD
1
REST API :
요약하자면!
1 REST 란?
HTTP URI HTTP METHOD
1
REST API :
요약하자면!
1 REST 란?
HTTP URI HTTP METHOD
http://hostname/agent.jsp?id=1
∙기존의 웹서비스
1
REST API :
요약하자면!
1 REST 란?
HTTP URI HTTP METHOD
http://hostname/agent.jsp?id=1
∙기존의 웹서비스
1
REST API :
요약하자면!
1 REST 란?
HTTP URI HTTP METHOD
http://hostname/agent.jsp?id=1
∙기존의 웹서비스
http://hostname/agent/1 - GET
∙REST 개념 적용
1
REST API :
요약하자면!
1 REST 란?
HTTP URI HTTP METHOD
http://hostname/agent.jsp?id=1
∙기존의 웹서비스
http://hostname/agent/1 - GET
∙REST 개념 적용
2
REST API 특징 2-1 Client-Server
2
REST API 특징 2-1 Client-Server
Client
2
REST API 특징 2-1 Client-Server
Client Server
2
REST API 특징 2-1 Client-Server
Client Server
REQUEST
2
REST API 특징 2-1 Client-Server
Client Server
REQUEST
RESPONSE
2
REST API 특징 2-1 Client-Server
Client Server
REQUEST
RESPONSE
HTTP
2
REST API 특징 2-1 Client-Server
Client Server
REQUEST
2
REST API 특징 2-1 Client-Server
Client Server
REQUEST
2
REST API 특징 2-1 Client-Server
Client Server
REQUEST
RESPONSE
(HTML)
2
REST API 특징 2-1 Client-Server
Client
Server
유저 인터페이스
데이터 스토리지
2
REST API 특징 2-1 Client-Server
2
REST API 특징 2-1 Client-Server
2
REST API 특징 2-1 Client-Server
2
REST API 특징 2-2 Stateless Server
* 서버가 어플리케이션의 상태를 관리하지 않음
2
REST API 특징 2-2 Stateless Server
NO SESSION
2
REST API 특징 2-3 Cache
* Client에서 캐시할 수 있도록 함축적/명시적이든
캐시가 가능한 응답은 캐시할 수 있게 제공
* 물론 서버에서도 가능하면 캐시를 해야함
* 네트워크 효율 향상
2
REST API 특징 2-4 Uniform Interface
Content-Type : Application/JSON
GET http://domain/resource/1
* 통일된 URI 접근과 제한된 메소드 인터페이스로 통신
* 인터페이스의 유연성에 제약을 가함으로써 전체적인 아
키텍쳐가 간결해짐
2
REST API 특징 2-4-1 Identification of Resource
http://domain/resource/1
* REST에서 정보는 Resource고,
resource는 반드시 유일한 URI를 가져야함
* 웹 기반 REST에서는 resource 접근에 URL 사용
2
REST API 특징 2-4-2 Manipulation of Resources
through representations
Content-Type : Application/JSON
GET http://domain/resource/1
* Resources 와 Presentations 는 구분되어야함
* Resource는 다양한 형태(XML,JSON, HTML, PNG 등)
로 표현될 수 있다.
2
REST API 특징 2-4-3 Self-Descriptive Message
Content-Type : Application/JSON
GET http://domain/resource/1
* 각 메세지는 반드시 작업을 완료하는데 충분한 정보를
가지고 있어야한다.
* 웹 기반 REST에서는 Method 와 Header를 활용
3
REST API 디자인 3. REST API 디자인
3
REST API 디자인 3. REST API 디자인
3
REST API 디자인 3. REST API 디자인
⦁⦁⦁
/getALLPigs
/foodNeeded
/createNewPig
/getPig
/massPigParty
/getWhitePig
/healthCheck
/locationVerify
/getWeakPig
/killPig
/eatPig
⦁⦁⦁
3
REST API 디자인 3. REST API 디자인
돼지의 세계는 매우 큽니다.
3
REST API 디자인 3. REST API 디자인
돼지의 세계는 매우 큽니다.
우리는 단순한 것을 좋아합니다.
3
REST API 디자인 3. REST API 디자인
리소스당 2개의 기본 URL을 쓰도록 하겠습니다.
3
REST API 디자인 3-1 Collections
3
REST API 디자인 3-1 Collections
/pigs
3
REST API 디자인 3-2 Element
3
REST API 디자인 3-2 Element
/pigs/1234
3
REST API 디자인 3-3 HTTP Method
3
REST API 디자인 3-3 HTTP Method
POST
GET
PUT
DELETE
3
REST API 디자인 3-3 HTTP Method
POST
GET
PUT
DELETE
CREATE
READ
UPDATE
DELETE
3
REST API 디자인 3-4 API
3
REST API 디자인 3-4 API
Resource POST
create
GET
read
PUT
update
DELETE
delete
/pigs 돼지 추가 돼지들 목록보기
새로운 돼지
리스트로 교체
돼지 전체 삭제
/pigs/1234 돼지 추가 Foo 보기
Foo 정보
업데이트
없으면 생성
Foo 삭제
3
REST API 디자인 3-4 API
Resource POST
create
GET
read
PUT
update
DELETE
delete
/pigs 돼지 추가 돼지들 목록보기
새로운 돼지
리스트로 교체
돼지 전체 삭제
/pigs/1234 돼지 추가 Foo 보기
Foo 정보
업데이트
없으면 생성
Foo 삭제
3
REST API 디자인 3-4 API
Resource POST
create
GET
read
PUT
update
DELETE
delete
/pigs 돼지 추가 돼지들 목록보기
돼지들 대량
업데이트
돼지 전체 삭제
/pigs/1234 에러 Foo 보기
Foo 정보
업데이트
없으면 에러
Foo 삭제
3
REST API 디자인 3-5 디자인 규칙 - Naming
동사는 사용하지 않습니다.
-> HTTP Method 를 동사 대용으로 사용합니다.
3
REST API 디자인 3-5 디자인 규칙 - Naming
동사는 사용하지 않습니다.
-> HTTP Method 를 동사 대용으로 사용합니다.
명사를 사용해야합니다.
3
REST API 디자인 3-5 디자인 규칙 - Naming
동사는 사용하지 않습니다.
-> HTTP Method 를 동사 대용으로 사용합니다.
명사를 사용해야합니다.
/savePigs
3
REST API 디자인 3-5 디자인 규칙 - Naming
동사는 사용하지 않습니다.
-> HTTP Method 를 동사 대용으로 사용합니다.
명사를 사용해야합니다.
/savePigs
/pigs - POST
3
REST API 디자인 3-6 디자인 규칙 - 복수? 단수?
3
REST API 디자인 3-6 디자인 규칙 - 복수? 단수?
Foursquare
/chickins
GroupOn
Zappos
/Product
/deals
3
REST API 디자인 3-6 디자인 규칙 - 복수? 단수?
복수를 쓰는 것이 더 좋다.
/pigs
3
REST API 디자인 3-7 디자인 규칙 - 추상적으로? 구체적으로?
3
REST API 디자인 3-7 디자인 규칙 - 추상적으로? 구체적으로?
매우 높은 추상화
/things
높은 추상화
/animals
보통 - 구체적
/pigs
너무 구체적
/whildpig
3
REST API 디자인 3-7 디자인 규칙 - 추상적으로? 구체적으로?
추상적인 것 보다 구체적인 것이 좋다.
/pigs
3
REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게?
3
REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게?
3
REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게?
Facebook [HTTP status Code: 200]
{"type":"OAuthException", "message":"(#803 Some of the aliases you
requested do not exist: foo.bar"}
Twilio [HTTP status Code: 401]
{"status":401,"message":"Authentication", "code":20003,
"more_info":"http://www.twilio.com/docs/errors/20003"}
SimpleGEO [HTTP status Code: 401]
{"code":401, "message":"Authentication Required"}
3
REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게?
Code for code
200 - OK
401 - Unauthorized
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Message for People
{"message":"사람들이 알아들을 수 있도록 평범한 설명과 어떻게 해결하는지에 대
해 기술한다",
"more_info":"더 자세한 설명은 URL로 알려준다"}
3
REST API 디자인 3-9 디자인 규칙 - 검색
3
REST API 디자인 3-9 디자인 규칙 - 검색
전체 검색
/search?q=jeju
범위 검색
/region/jeju/pigs/search?q=ddong
검색 결과 형식 지정
/search.json?q=jeju
3
REST API 디자인 3-10 디자인 규칙 - API URL
Facebook
* graph.facebook.com
* api.facebook.com
* developers.facebook.com
Twitter
* api.twitter.com
* search.twitter.com
* stream.twitter.com
* dev.twitter.com
4
실제로 써보니 4. 실제로 써보니
4
실제로 써보니 4. 실제로 써보니
* 서버 / 클라이언트(웹) 분업이 편해진다.
* 클라이언트는 서버가 완료될 때 까지 기다릴 필요가 없다.
* 개발 속도가 빠르다.
* 새로운 기능이 생겨도 쉽게 API를 만들고 적용할 수 있다.
* 테스트가 매우 쉽다.
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
예시) 기능 : 사용자 그룹을 구성하라.
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
예시) 기능 : 사용자 그룹을 구성하라.
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
예시) 기능 : 사용자 그룹을 구성하라.
- 학교
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
예시) 기능 : 사용자 그룹을 구성하라.
- 학교
⌎ 1학년
⌎ 2학년
⌎ 3학년
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
예시) 기능 : 사용자 그룹을 구성하라.
- 학교
⌎ 1학년
⌎ 기초생활 수급자
⌎ 불량학생
⌎또 다른 그룹
⌎ 2학년
⌎ 3학년
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
예시) 기능 : 사용자 그룹을 구성하라.
- 학교
⌎ 1학년
⌎ 기초생활 수급자
⌎ 불량학생
⌎또 다른 그룹
⌎ 2학년
⌎ 3학년
요구 사항 :
- 각 그룹마다 학생들(item)이 n개가 추가된다.
- 그룹은 트리 형태로 표시되며 단계별로 내려간다.
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
- 그룹 경로 구성을 먼저 하자.
- 학교
⌎ 1학년
⌎ 기초생활 수급자
⌎ 불량학생
⌎또 다른 그룹
⌎ 2학년
⌎ 3학년
4
실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
- 그룹 경로 구성을 먼저 하자.
- 학교
⌎ 1학년
⌎ 기초생활 수급자
⌎ 불량학생
⌎또 다른 그룹
⌎ 2학년
⌎ 3학년
- 그룹 구성
/
/학교
/학교/1학년
/학교/1학년/불량학생
/학교/1학년/또 다른 그룹
4
실제로 써보니 4. 그래서 나온 API
Resource POST
create
GET
read
PUT
update
DELETE
delete
/group/ 새로운 그룹 추가
최상위 그룹 리스트
조회
없음 없음
/group/{path} 없음
{path}에 해당하는
그룹 정보 조회
{path}에 해당하는
그룹 정보 업데이트
{path}에 해당하는
그룹 삭제
(하위 그룹 포함)
4
실제로 써보니 4. 그래서 나온 API
Resource POST
create
GET
read
PUT
update
DELETE
delete
/group/ 새로운 그룹 추가
최상위 그룹 리스트
조회
없음 없음
/group/{path} 없음
{path}에 해당하는
그룹 정보 조회
{path}에 해당하는
그룹 정보 업데이트
{path}에 해당하는
그룹 삭제
(하위 그룹 포함)
* 각 그룹에 학생들은 어떻게 추가시키지??
* 하위 그룹들은 어떻게 가져오지?
4
실제로 써보니
4
실제로 써보니 4. 요구사항 반영한 API
Resource POST
create
GET
read
PUT
update
DELETE
delete
/group/ 새로운 그룹 추가
최상위 그룹 리스트
조회
없음 없음
/group/{path} 없음
{path}에 해당하는
그룹 정보 조회
{path}에 해당하는
그룹 정보 업데이트
{path}에 해당하는
그룹 삭제
(하위 그룹 포함)
/group/{path}/item 새로운 학생 추가 없음 없음
학생 삭제
(학생 정보는
JSON으로 받음)
/group/{path}/childs 없음
자식 그룹 리스트
조회
없음 없음
4
실제로 써보니 4. 요구사항 반영한 API
Resource POST
create
GET
read
PUT
update
DELETE
delete
/group/ 새로운 그룹 추가
최상위 그룹 리스트
조회
없음 없음
/group/{path} 없음
{path}에 해당하는
그룹 정보 조회
{path}에 해당하는
그룹 정보 업데이트
{path}에 해당하는
그룹 삭제
(하위 그룹 포함)
/group/{path}/item 새로운 학생 추가 없음 없음
학생 삭제
(학생 정보는
JSON으로 받음)
/group/{path}/childs 없음
자식 그룹 리스트
조회
없음 없음
4
실제로 써보니 4. 어렵다.
* REST API 원리와 구성은 쉽지만 디자인 원칙에 맞춰서 디
자인 하려니 힘든 점이 있었다.
4
실제로 써보니 4. 어렵다.
* REST API 원리와 구성은 쉽지만 디자인 원칙에 맞춰서 디
자인 하려니 힘든 점이 있었다.
* 그래도 디자인 원칙은 지키면서 개발자하자.
4
실제로 써보니 4. 어렵다.
* REST API 원리와 구성은 쉽지만 디자인 원칙에 맞춰서 디
자인 하려니 힘든 점이 있었다.
* 그래도 디자인 원칙은 지키면서 개발자하자.
* 왜? 우린 단순 코더가 아닌 개발자니까.
그냥 막 짜도 기능은 동작합니다.
하지만 막 짜면 기능도 막 동작합니다.
코드도 개발도 디자인이 필요합니다..
우리 코드 푸르게 푸르게.

Weitere ähnliche Inhalte

Was ist angesagt?

What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaEdureka!
 
Understanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple StepsUnderstanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple StepsTessa Mero
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기Juwon Kim
 
REST-API overview / concepts
REST-API overview / conceptsREST-API overview / concepts
REST-API overview / conceptsPatrick Savalle
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architectureThe Software House
 
Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - APIChetan Gadodia
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding RESTNitin Pande
 
Microservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaMicroservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaEdureka!
 
The Apollo and GraphQL Stack
The Apollo and GraphQL StackThe Apollo and GraphQL Stack
The Apollo and GraphQL StackSashko Stubailo
 
Learn REST in 18 Slides
Learn REST in 18 SlidesLearn REST in 18 Slides
Learn REST in 18 SlidesSuraj Gupta
 
SHACL: Shaping the Big Ball of Data Mud
SHACL: Shaping the Big Ball of Data MudSHACL: Shaping the Big Ball of Data Mud
SHACL: Shaping the Big Ball of Data MudRichard Cyganiak
 

Was ist angesagt? (20)

What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | Edureka
 
Rest api and-crud-api
Rest api and-crud-apiRest api and-crud-api
Rest api and-crud-api
 
Understanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple StepsUnderstanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple Steps
 
REST API
REST APIREST API
REST API
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기
 
REST-API overview / concepts
REST-API overview / conceptsREST-API overview / concepts
REST-API overview / concepts
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
 
Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - API
 
Web api
Web apiWeb api
Web api
 
Why HATEOAS
Why HATEOASWhy HATEOAS
Why HATEOAS
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding REST
 
REST & RESTful Web Services
REST & RESTful Web ServicesREST & RESTful Web Services
REST & RESTful Web Services
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
Microservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaMicroservices Design Patterns | Edureka
Microservices Design Patterns | Edureka
 
Rest api-basic
Rest api-basicRest api-basic
Rest api-basic
 
The Apollo and GraphQL Stack
The Apollo and GraphQL StackThe Apollo and GraphQL Stack
The Apollo and GraphQL Stack
 
API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 
Learn REST in 18 Slides
Learn REST in 18 SlidesLearn REST in 18 Slides
Learn REST in 18 Slides
 
SHACL: Shaping the Big Ball of Data Mud
SHACL: Shaping the Big Ball of Data MudSHACL: Shaping the Big Ball of Data Mud
SHACL: Shaping the Big Ball of Data Mud
 
GraphQL
GraphQLGraphQL
GraphQL
 

Ähnlich wie REST API 디자인 개요

제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처dgmit2009
 
2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCampJeikei Park
 
REST Ovewview
REST OvewviewREST Ovewview
REST OvewviewTerry Cho
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우NAVER D2
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
 
220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링DataUs
 
open api seminar
open api seminaropen api seminar
open api seminarNamhoon Kim
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST APIWooyoung Ko
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기KTH, 케이티하이텔
 
RESTful API 손쉽게 사용하기
RESTful API 손쉽게 사용하기RESTful API 손쉽게 사용하기
RESTful API 손쉽게 사용하기JunGi Kim
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
Swc발표자료2 2(restful)
Swc발표자료2 2(restful)Swc발표자료2 2(restful)
Swc발표자료2 2(restful)마경근 마
 
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)r-kor
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발SangHoon Han
 
Booting Spring Data REST
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST경원 이
 

Ähnlich wie REST API 디자인 개요 (20)

제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCamp
 
Restfull api
Restfull apiRestfull api
Restfull api
 
REST Ovewview
REST OvewviewREST Ovewview
REST Ovewview
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링220302 사내세미나_오정민 REST API와 크롤링
220302 사내세미나_오정민 REST API와 크롤링
 
open api seminar
open api seminaropen api seminar
open api seminar
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
Portfolio
PortfolioPortfolio
Portfolio
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
[H3 2012] Open API 와 Ruby on Rails 에 대한 이야기
 
RESTful API 손쉽게 사용하기
RESTful API 손쉽게 사용하기RESTful API 손쉽게 사용하기
RESTful API 손쉽게 사용하기
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
Swc발표자료2 2(restful)
Swc발표자료2 2(restful)Swc발표자료2 2(restful)
Swc발표자료2 2(restful)
 
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발
 
Booting Spring Data REST
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST
 

Mehr von nexusz99

[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기nexusz99
 
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현nexusz99
 
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스nexusz99
 
파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현
파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현
파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현nexusz99
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?nexusz99
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기nexusz99
 
태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템nexusz99
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종nexusz99
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 

Mehr von nexusz99 (10)

[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
 
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
 
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
 
파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현
파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현
파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
 
태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 

REST API 디자인 개요

  • 1. RESTful API 디자인 막 쓰지 말고 제대로 써보자! 병장 조성수
  • 2. 목차 1. REST API 1-1 요약하면! 2. REST API 특징 2-1 Client-Server 2-2 Stateless Server 2-3 Cache 2-4 uniform Interface 2-5 Layered System 2-6 Code on Demand 3. REST API 디자인 3-1 REST API 디자인 규칙 4. 실제로 써보니
  • 3. 1 REST API : 요약하자면! 1 REST 란? REpresentational State Transfer 2000년 Roy Fielding의 박사 학위 논문에서 처음 제안 대규모 네트워크 시스템을 위한 아키텍쳐
  • 4. 1 REST API : 요약하자면! 1 REST 란? HTTP URI HTTP METHOD
  • 5. 1 REST API : 요약하자면! 1 REST 란? HTTP URI HTTP METHOD
  • 6. 1 REST API : 요약하자면! 1 REST 란? HTTP URI HTTP METHOD http://hostname/agent.jsp?id=1 ∙기존의 웹서비스
  • 7. 1 REST API : 요약하자면! 1 REST 란? HTTP URI HTTP METHOD http://hostname/agent.jsp?id=1 ∙기존의 웹서비스
  • 8. 1 REST API : 요약하자면! 1 REST 란? HTTP URI HTTP METHOD http://hostname/agent.jsp?id=1 ∙기존의 웹서비스 http://hostname/agent/1 - GET ∙REST 개념 적용
  • 9. 1 REST API : 요약하자면! 1 REST 란? HTTP URI HTTP METHOD http://hostname/agent.jsp?id=1 ∙기존의 웹서비스 http://hostname/agent/1 - GET ∙REST 개념 적용
  • 10. 2 REST API 특징 2-1 Client-Server
  • 11. 2 REST API 특징 2-1 Client-Server Client
  • 12. 2 REST API 특징 2-1 Client-Server Client Server
  • 13. 2 REST API 특징 2-1 Client-Server Client Server REQUEST
  • 14. 2 REST API 특징 2-1 Client-Server Client Server REQUEST RESPONSE
  • 15. 2 REST API 특징 2-1 Client-Server Client Server REQUEST RESPONSE HTTP
  • 16. 2 REST API 특징 2-1 Client-Server Client Server REQUEST
  • 17. 2 REST API 특징 2-1 Client-Server Client Server REQUEST
  • 18. 2 REST API 특징 2-1 Client-Server Client Server REQUEST RESPONSE (HTML)
  • 19. 2 REST API 특징 2-1 Client-Server Client Server 유저 인터페이스 데이터 스토리지
  • 20. 2 REST API 특징 2-1 Client-Server
  • 21. 2 REST API 특징 2-1 Client-Server
  • 22. 2 REST API 특징 2-1 Client-Server
  • 23. 2 REST API 특징 2-2 Stateless Server * 서버가 어플리케이션의 상태를 관리하지 않음
  • 24. 2 REST API 특징 2-2 Stateless Server NO SESSION
  • 25. 2 REST API 특징 2-3 Cache * Client에서 캐시할 수 있도록 함축적/명시적이든 캐시가 가능한 응답은 캐시할 수 있게 제공 * 물론 서버에서도 가능하면 캐시를 해야함 * 네트워크 효율 향상
  • 26. 2 REST API 특징 2-4 Uniform Interface Content-Type : Application/JSON GET http://domain/resource/1 * 통일된 URI 접근과 제한된 메소드 인터페이스로 통신 * 인터페이스의 유연성에 제약을 가함으로써 전체적인 아 키텍쳐가 간결해짐
  • 27. 2 REST API 특징 2-4-1 Identification of Resource http://domain/resource/1 * REST에서 정보는 Resource고, resource는 반드시 유일한 URI를 가져야함 * 웹 기반 REST에서는 resource 접근에 URL 사용
  • 28. 2 REST API 특징 2-4-2 Manipulation of Resources through representations Content-Type : Application/JSON GET http://domain/resource/1 * Resources 와 Presentations 는 구분되어야함 * Resource는 다양한 형태(XML,JSON, HTML, PNG 등) 로 표현될 수 있다.
  • 29. 2 REST API 특징 2-4-3 Self-Descriptive Message Content-Type : Application/JSON GET http://domain/resource/1 * 각 메세지는 반드시 작업을 완료하는데 충분한 정보를 가지고 있어야한다. * 웹 기반 REST에서는 Method 와 Header를 활용
  • 30. 3 REST API 디자인 3. REST API 디자인
  • 31. 3 REST API 디자인 3. REST API 디자인
  • 32. 3 REST API 디자인 3. REST API 디자인 ⦁⦁⦁ /getALLPigs /foodNeeded /createNewPig /getPig /massPigParty /getWhitePig /healthCheck /locationVerify /getWeakPig /killPig /eatPig ⦁⦁⦁
  • 33. 3 REST API 디자인 3. REST API 디자인 돼지의 세계는 매우 큽니다.
  • 34. 3 REST API 디자인 3. REST API 디자인 돼지의 세계는 매우 큽니다. 우리는 단순한 것을 좋아합니다.
  • 35. 3 REST API 디자인 3. REST API 디자인 리소스당 2개의 기본 URL을 쓰도록 하겠습니다.
  • 36. 3 REST API 디자인 3-1 Collections
  • 37. 3 REST API 디자인 3-1 Collections /pigs
  • 38. 3 REST API 디자인 3-2 Element
  • 39. 3 REST API 디자인 3-2 Element /pigs/1234
  • 40. 3 REST API 디자인 3-3 HTTP Method
  • 41. 3 REST API 디자인 3-3 HTTP Method POST GET PUT DELETE
  • 42. 3 REST API 디자인 3-3 HTTP Method POST GET PUT DELETE CREATE READ UPDATE DELETE
  • 44. 3 REST API 디자인 3-4 API Resource POST create GET read PUT update DELETE delete /pigs 돼지 추가 돼지들 목록보기 새로운 돼지 리스트로 교체 돼지 전체 삭제 /pigs/1234 돼지 추가 Foo 보기 Foo 정보 업데이트 없으면 생성 Foo 삭제
  • 45. 3 REST API 디자인 3-4 API Resource POST create GET read PUT update DELETE delete /pigs 돼지 추가 돼지들 목록보기 새로운 돼지 리스트로 교체 돼지 전체 삭제 /pigs/1234 돼지 추가 Foo 보기 Foo 정보 업데이트 없으면 생성 Foo 삭제
  • 46. 3 REST API 디자인 3-4 API Resource POST create GET read PUT update DELETE delete /pigs 돼지 추가 돼지들 목록보기 돼지들 대량 업데이트 돼지 전체 삭제 /pigs/1234 에러 Foo 보기 Foo 정보 업데이트 없으면 에러 Foo 삭제
  • 47. 3 REST API 디자인 3-5 디자인 규칙 - Naming 동사는 사용하지 않습니다. -> HTTP Method 를 동사 대용으로 사용합니다.
  • 48. 3 REST API 디자인 3-5 디자인 규칙 - Naming 동사는 사용하지 않습니다. -> HTTP Method 를 동사 대용으로 사용합니다. 명사를 사용해야합니다.
  • 49. 3 REST API 디자인 3-5 디자인 규칙 - Naming 동사는 사용하지 않습니다. -> HTTP Method 를 동사 대용으로 사용합니다. 명사를 사용해야합니다. /savePigs
  • 50. 3 REST API 디자인 3-5 디자인 규칙 - Naming 동사는 사용하지 않습니다. -> HTTP Method 를 동사 대용으로 사용합니다. 명사를 사용해야합니다. /savePigs /pigs - POST
  • 51. 3 REST API 디자인 3-6 디자인 규칙 - 복수? 단수?
  • 52. 3 REST API 디자인 3-6 디자인 규칙 - 복수? 단수? Foursquare /chickins GroupOn Zappos /Product /deals
  • 53. 3 REST API 디자인 3-6 디자인 규칙 - 복수? 단수? 복수를 쓰는 것이 더 좋다. /pigs
  • 54. 3 REST API 디자인 3-7 디자인 규칙 - 추상적으로? 구체적으로?
  • 55. 3 REST API 디자인 3-7 디자인 규칙 - 추상적으로? 구체적으로? 매우 높은 추상화 /things 높은 추상화 /animals 보통 - 구체적 /pigs 너무 구체적 /whildpig
  • 56. 3 REST API 디자인 3-7 디자인 규칙 - 추상적으로? 구체적으로? 추상적인 것 보다 구체적인 것이 좋다. /pigs
  • 57. 3 REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게?
  • 58. 3 REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게?
  • 59. 3 REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게? Facebook [HTTP status Code: 200] {"type":"OAuthException", "message":"(#803 Some of the aliases you requested do not exist: foo.bar"} Twilio [HTTP status Code: 401] {"status":401,"message":"Authentication", "code":20003, "more_info":"http://www.twilio.com/docs/errors/20003"} SimpleGEO [HTTP status Code: 401] {"code":401, "message":"Authentication Required"}
  • 60. 3 REST API 디자인 3-8 디자인 규칙 - 에러는 어떻게? Code for code 200 - OK 401 - Unauthorized http://en.wikipedia.org/wiki/List_of_HTTP_status_codes Message for People {"message":"사람들이 알아들을 수 있도록 평범한 설명과 어떻게 해결하는지에 대 해 기술한다", "more_info":"더 자세한 설명은 URL로 알려준다"}
  • 61. 3 REST API 디자인 3-9 디자인 규칙 - 검색
  • 62. 3 REST API 디자인 3-9 디자인 규칙 - 검색 전체 검색 /search?q=jeju 범위 검색 /region/jeju/pigs/search?q=ddong 검색 결과 형식 지정 /search.json?q=jeju
  • 63. 3 REST API 디자인 3-10 디자인 규칙 - API URL Facebook * graph.facebook.com * api.facebook.com * developers.facebook.com Twitter * api.twitter.com * search.twitter.com * stream.twitter.com * dev.twitter.com
  • 64. 4 실제로 써보니 4. 실제로 써보니
  • 65. 4 실제로 써보니 4. 실제로 써보니 * 서버 / 클라이언트(웹) 분업이 편해진다. * 클라이언트는 서버가 완료될 때 까지 기다릴 필요가 없다. * 개발 속도가 빠르다. * 새로운 기능이 생겨도 쉽게 API를 만들고 적용할 수 있다. * 테스트가 매우 쉽다.
  • 66. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이..
  • 67. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. 예시) 기능 : 사용자 그룹을 구성하라.
  • 68. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. 예시) 기능 : 사용자 그룹을 구성하라.
  • 69. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. 예시) 기능 : 사용자 그룹을 구성하라. - 학교
  • 70. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. 예시) 기능 : 사용자 그룹을 구성하라. - 학교 ⌎ 1학년 ⌎ 2학년 ⌎ 3학년
  • 71. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. 예시) 기능 : 사용자 그룹을 구성하라. - 학교 ⌎ 1학년 ⌎ 기초생활 수급자 ⌎ 불량학생 ⌎또 다른 그룹 ⌎ 2학년 ⌎ 3학년
  • 72. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. 예시) 기능 : 사용자 그룹을 구성하라. - 학교 ⌎ 1학년 ⌎ 기초생활 수급자 ⌎ 불량학생 ⌎또 다른 그룹 ⌎ 2학년 ⌎ 3학년 요구 사항 : - 각 그룹마다 학생들(item)이 n개가 추가된다. - 그룹은 트리 형태로 표시되며 단계별로 내려간다.
  • 73. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. - 그룹 경로 구성을 먼저 하자. - 학교 ⌎ 1학년 ⌎ 기초생활 수급자 ⌎ 불량학생 ⌎또 다른 그룹 ⌎ 2학년 ⌎ 3학년
  • 74. 4 실제로 써보니 4. 실제로 써보니 여러가지 난감한 상황이.. - 그룹 경로 구성을 먼저 하자. - 학교 ⌎ 1학년 ⌎ 기초생활 수급자 ⌎ 불량학생 ⌎또 다른 그룹 ⌎ 2학년 ⌎ 3학년 - 그룹 구성 / /학교 /학교/1학년 /학교/1학년/불량학생 /학교/1학년/또 다른 그룹
  • 75. 4 실제로 써보니 4. 그래서 나온 API Resource POST create GET read PUT update DELETE delete /group/ 새로운 그룹 추가 최상위 그룹 리스트 조회 없음 없음 /group/{path} 없음 {path}에 해당하는 그룹 정보 조회 {path}에 해당하는 그룹 정보 업데이트 {path}에 해당하는 그룹 삭제 (하위 그룹 포함)
  • 76. 4 실제로 써보니 4. 그래서 나온 API Resource POST create GET read PUT update DELETE delete /group/ 새로운 그룹 추가 최상위 그룹 리스트 조회 없음 없음 /group/{path} 없음 {path}에 해당하는 그룹 정보 조회 {path}에 해당하는 그룹 정보 업데이트 {path}에 해당하는 그룹 삭제 (하위 그룹 포함) * 각 그룹에 학생들은 어떻게 추가시키지?? * 하위 그룹들은 어떻게 가져오지?
  • 78. 4 실제로 써보니 4. 요구사항 반영한 API Resource POST create GET read PUT update DELETE delete /group/ 새로운 그룹 추가 최상위 그룹 리스트 조회 없음 없음 /group/{path} 없음 {path}에 해당하는 그룹 정보 조회 {path}에 해당하는 그룹 정보 업데이트 {path}에 해당하는 그룹 삭제 (하위 그룹 포함) /group/{path}/item 새로운 학생 추가 없음 없음 학생 삭제 (학생 정보는 JSON으로 받음) /group/{path}/childs 없음 자식 그룹 리스트 조회 없음 없음
  • 79. 4 실제로 써보니 4. 요구사항 반영한 API Resource POST create GET read PUT update DELETE delete /group/ 새로운 그룹 추가 최상위 그룹 리스트 조회 없음 없음 /group/{path} 없음 {path}에 해당하는 그룹 정보 조회 {path}에 해당하는 그룹 정보 업데이트 {path}에 해당하는 그룹 삭제 (하위 그룹 포함) /group/{path}/item 새로운 학생 추가 없음 없음 학생 삭제 (학생 정보는 JSON으로 받음) /group/{path}/childs 없음 자식 그룹 리스트 조회 없음 없음
  • 80. 4 실제로 써보니 4. 어렵다. * REST API 원리와 구성은 쉽지만 디자인 원칙에 맞춰서 디 자인 하려니 힘든 점이 있었다.
  • 81. 4 실제로 써보니 4. 어렵다. * REST API 원리와 구성은 쉽지만 디자인 원칙에 맞춰서 디 자인 하려니 힘든 점이 있었다. * 그래도 디자인 원칙은 지키면서 개발자하자.
  • 82. 4 실제로 써보니 4. 어렵다. * REST API 원리와 구성은 쉽지만 디자인 원칙에 맞춰서 디 자인 하려니 힘든 점이 있었다. * 그래도 디자인 원칙은 지키면서 개발자하자. * 왜? 우린 단순 코더가 아닌 개발자니까.
  • 83. 그냥 막 짜도 기능은 동작합니다. 하지만 막 짜면 기능도 막 동작합니다. 코드도 개발도 디자인이 필요합니다..