R 로 API 서버를 만드는 4가지 방법(은 삽질기)
https://mrchypark.github.io/apiR
[pdf버전] [문의하기] [의견 및 오류 신고]
박찬엽
2017년 10월 28일
박찬엽
서울도시가스 선행연구팀 연구원
챗봇 엔진 개발 및 서버 구축
패스트 캠퍼스 데이터 분석 R 강의
데이터 분석을 위한 중급 R 프로그래밍
R 네이버 뉴스 크롤러 N2H4 관리자
ForkonLP 프로젝트
KAKAO@알코홀릭 R 질문방
FACEBOOK@mrchypark
GITHUB@mrchypark
발표자 소개
R 로 API 서버를 만드는 4가지 방법(은 삽질기)
자매품
R로웹데이터를가져오는4가지방법(은크롤링)
의사 결정을 위한 데이터 분석 프로젝트의 단계
데이터 확보 - 전처리 - 모델링 - 시각화 - 문서화
머신러닝 프로젝트의 단계
데이터 확보 - 전처리 - 모델링 - 제품화
제품화
머신러닝 프로젝트의 결과물을 서비스에 활용하는 것 또한 많은 노력이 필요함
제품화하는데 노력이 덜 드는 방법은 없을까
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
마이크로 서비스형 설계
장점
1. 기능 단위로 완결되어 개발 단위가 작음
2. 개별 서비스간의 의존성이 적어 유연함
3. 단일 모듈 장애시 전체 서비스의 영향이 적음
단점
1. 개별 서비스의 테스트 뿐만 아니라 전체 테스트가 필요
2. 서비스간 인터페이스 정의와 관리 이슈가 발생
3. 전체 서비스의 로그 관리를 위한 솔루션 필요
그럼 이거만 만들 줄 알면...!
그럼 작은 API 서버를 R로 만들어 보자
API 서버
http 표준으로 요청을 받아서 처리하여 응답하는 서버
http/1.1 명세
아 됐고!
두 가지만 알면 됩니다.
GET vs POST
심지어 POST만 알아도 됨.
GET 이란
브라우저에서 주소를 입력하고 엔터를 치는 것!
그럼 서버는
요청하면 주기로 정해진 데이터(ex 이미지 파일)를 제공
우리 GET 서버가 할 일
서버에게 GET 요청이 오면 필요한 데이터를 전달해주기.
안녕하세요!!
우리 GET 서버가 할 일
서버에게 GET 요청이 오면 필요한 데이터를 전달해주기.
안녕하세요!!
jug를 소개합니다!
if (!requireNamespace(jug)) {
install.packages(jug)}
library(jug)
jug() %%
get(/, function(req, res, err){
res$json(enc2utf8(안녕하세요!!))
return(res)
}) %%
simple_error_handler_json() %%
serve_it()
Serving the jug at http://127.0.0.1:8080
R로 GET 요청하기
R에서 http 표준의 요청을 처리해 주는 유용한 패키지는 httr입니다.
if (!requireNamespace(httr)) {
install.packages(httr)}
library(httr)
target-http://127.0.0.1:8080/
content(GET(url=target))
## [1] 안녕하세요!!
GET 서버를 만들었다!
R로 api 서버를 만드는 첫 번째 방법!
jug 패키지를 사용
이제 POST 서버를 만들어 보자
더 알아야 할 것
요청(request) vs 응답(response) + 헤더(header)1
1. 헤더(header): http://www.w3ii.com/ko/http/http_header_fields.html
GET과 POST의 차이점
요청 헤더에 body라는 이름으로 값을 보내면 POST이고 없으면 GET
# 입력없이 결과를 주는 GET
R.Version()
## $platform
## [1] x86_64-w64-mingw32
##
## $arch
## [1] x86_64
##
## $os
## [1] mingw32
##
## $system
## [1] x86_64, mingw32
##
## $status
## [1] 
##
## $major
## [1] 3
# a, b 입력으로 결과를 주는 POST
a-1;b-2
sum(a,b)
## [1] 3
GET과 POST의 차이점
요청 헤더에 body라는 이름으로 값을 보내면 POST이고 없으면 GET
R 함수로 예를 들면
우리 POST 서버가 할 일
서버에게 POST 요청이 한글 문장을 sent라는 이름으로 같이 보내면 띄어쓰기 개수를 세서 줌.
# 입력
{sent='R 로 API 서버를 만드는 4가지 방법(은 삽질기)'}
# 예상 결과
7
stringr with jug
stringr은 정규표현식을 활용한 글자 처리를 도와주는 패키지
if (!requireNamespace(jug)) {
install.packages(jug)}
library(jug)
if (!requireNamespace(stringr)) {
install.packages(stringr)}
library(stringr)
count_ws-function(sent){
stringr::str_count(sent, [[:space:]])
}
jug() %%
post(/, decorate(count_ws)) %%
simple_error_handler_json() %%
serve_it()
R로 POST 요청하기
httr로 POST 요청을 해보겠습니다.
library(httr)
url-http://127.0.0.1:8080
body-list(sent=R 로 API 서버를 만드는 4가지 방법(은 삽질기))
content(POST(url, body=body),text)
## No encoding supplied: defaulting to UTF-8.
## [1] 7
POST 서버를 만들었다!
R의 서버 개발 패키지들
httpuv, Rserve, jug, plumber, fiery
이렇게 많은 패키지가 있는데...
오픈소스 사용시 중요한 점.
사용자층이 넓을 것, 설명서가 충실할 것, 버전이 1.X.X 이상일 것 등등
reticulate 를 소개합니다!
python 패키지를 R에서 사용할 수 있게 해주는 패키지
Flask
python의 가볍고 유명한 웹 서버 개발 프레임워크
plumber: 453
Rserve: 161
jug: 119
fiery: 114
httpuv: 98
Flask: 30,605
github 스타 수
R로 api 서버를 만드는 두 번째 방법!
python의 flask를 이용하기
lumiamitie님께서 초기 삽질을 대신해 주셨습니다!
http://lumiamitie.github.io/r/flask-on-r/
GET 서버 예시
library('reticulate')
flask = import('flask')
app = flask$Flask('__main__')
app$route('/')({
index = function() {return('Hello R user Conference!')}
})
app$run()
시연
장점
flask의 풍부한 자료를 활용
단점
python 도 알아야 함
flask on r
더 좋은 방법은 없을까
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
서버도 몰라도 됨
R로 api 서버를 만드는 세 번째 방법!
RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)
표준 입출력으로 함수 작성
## 표준 입력을 받아 line 객체로 저장
f - file(stdin)
open(f)
line-readLines(f, n=1, warn = FALSE)
## 데이터를 처리하여 result 객체로 저장
result-paste0(Hi , line)
## 표준 출력으로 결과 전달
write(result, stderr())
친절한 예시
서버는 몰라도
docker를 좀 알면 편합니다.
FROM artemklevtsov/r-alpine:latest
ADD https://github.com/openfaas/faas/releases/download/0.6.1/fwatchdog /usr/bin
RUN chmod +x /usr/bin/fwatchdog
WORKDIR /root/
COPY handler.R .
ENV fprocess=Rscript handler.R
HEALTHCHECK --interval=1s CMD [ -e /tmp/.lock ] || exit 1
CMD [fwatchdog]
는사랑입니다.
R로 api 서버를 만드는 마지막 방법!
저한테 연락하시면 됩니다.
끝!
https://mrchypark.github.io/apiR
[pdf버전] [문의하기] [의견 및 오류 신고]

More Related Content

PDF
Rshinydashboard
PDF
빅데이터 인공지능 전략 및 로드맵
PDF
RUCK 2017 - 강병엽 - Spark와 R을 연동한 빅데이터 분석
PDF
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
PDF
Spark와 Hadoop, 완벽한 조합 (한국어)
PDF
Apache Kylin
PDF
AWS 활용한 Data Lake 구성하기
PDF
2012 07 28_cloud_reference_architecture_openplatform
Rshinydashboard
빅데이터 인공지능 전략 및 로드맵
RUCK 2017 - 강병엽 - Spark와 R을 연동한 빅데이터 분석
OLAP for Big Data (Druid vs Apache Kylin vs Apache Lens)
Spark와 Hadoop, 완벽한 조합 (한국어)
Apache Kylin
AWS 활용한 Data Lake 구성하기
2012 07 28_cloud_reference_architecture_openplatform

What's hot (20)

PDF
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
PDF
분석가를 위한 Aws 기반의 digital 플랫폼 구축
PPTX
Data discovery & metadata management (amundsen installation)
PDF
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
PPTX
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
PDF
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
PDF
Big data analysis with R and Apache Tajo (in Korean)
PPTX
Druid+superset
PDF
Amazon Athena 사용 팁
PDF
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
PPTX
Gruter TECHDAY 2014 MelOn BigData
PDF
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
PPTX
Spark sql
PPTX
Presto
PDF
Spark_Overview_qna
PDF
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
PPTX
Scalable system design patterns
PDF
스사모 테크톡 - Apache Flink 둘러보기
PDF
줌인터넷 빅데이터 활용사례 김우승
PDF
OSGeo와 Open Data
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
분석가를 위한 Aws 기반의 digital 플랫폼 구축
Data discovery & metadata management (amundsen installation)
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
Big data analysis with R and Apache Tajo (in Korean)
Druid+superset
Amazon Athena 사용 팁
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Gruter TECHDAY 2014 MelOn BigData
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark sql
Presto
Spark_Overview_qna
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
Scalable system design patterns
스사모 테크톡 - Apache Flink 둘러보기
줌인터넷 빅데이터 활용사례 김우승
OSGeo와 Open Data
Ad

Viewers also liked (12)

PDF
RUCK 2017 REx: 엑셀 기반 R 연동 통계분석 소프트웨어
PDF
RUCK 2017 Shiny의 또 다른 활용: RStudio addin 함수 및 패키지의 제작
PDF
RUCK 2017 R 을 이용한 사회조사 자료의 분석 및 보고서 작성 방법
PDF
RUCK 2017 빅데이터 분석에서 모형의 역할
PDF
RUCK 2017 샤이니 대시보드를 활용한 interactive chart 구현
PDF
RUCK 2017 MxNet과 R을 연동한 딥러닝 소개
PDF
RUCK 2017 베이즈 모형의 꽃 - 계층 모형
PPTX
RUCK 2017 R에 날개 달기 - Microsoft R과 클라우드 머신러닝 소개
PDF
RUCK 2017 김대영 R 기반 프로덕트의 개발과 배포
PDF
RUCK 2017 권재명 효율적 데이터 과학과 데이터 조직을 위한 7가지 요인
PDF
RUCK 2017 김성환 R 패키지 메타주성분분석(MetaPCA)
PDF
모듈형 패키지를 활용한 나만의 기계학습 모형 만들기 - 회귀나무모형을 중심으로
RUCK 2017 REx: 엑셀 기반 R 연동 통계분석 소프트웨어
RUCK 2017 Shiny의 또 다른 활용: RStudio addin 함수 및 패키지의 제작
RUCK 2017 R 을 이용한 사회조사 자료의 분석 및 보고서 작성 방법
RUCK 2017 빅데이터 분석에서 모형의 역할
RUCK 2017 샤이니 대시보드를 활용한 interactive chart 구현
RUCK 2017 MxNet과 R을 연동한 딥러닝 소개
RUCK 2017 베이즈 모형의 꽃 - 계층 모형
RUCK 2017 R에 날개 달기 - Microsoft R과 클라우드 머신러닝 소개
RUCK 2017 김대영 R 기반 프로덕트의 개발과 배포
RUCK 2017 권재명 효율적 데이터 과학과 데이터 조직을 위한 7가지 요인
RUCK 2017 김성환 R 패키지 메타주성분분석(MetaPCA)
모듈형 패키지를 활용한 나만의 기계학습 모형 만들기 - 회귀나무모형을 중심으로
Ad

Similar to RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기) (20)

PDF
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
PPTX
2Naver Open Android API Translation At DCamp
PDF
중고나라 거래 통계 서비스 1차 개발 완료 보고
PDF
RESTful API 설계
PDF
Portfolio
PDF
[RAG Tutorial] 02. RAG 프로젝트 파이프라인.pdf
PDF
Hoodpub 기술 발표
PDF
REST API 디자인 개요
PDF
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SPOAZ] : Spotify 기반 개인화 음악 추천 서비스 프로젝트
PPTX
Mongo db 최범균
PPTX
라즈베리파이로 슬랙 봇 개발하기
PDF
PostGIS 시작하기
PPTX
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
PDF
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
PDF
파이썬 데이터 분석 (18년)
PPTX
DataWorks Summit 2017
PPTX
Ksug 세미나 (윤성준) (20121208)
PDF
DataWorks Summit 2018
PPTX
spark database Service
PPTX
GraphQL overview
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
2Naver Open Android API Translation At DCamp
중고나라 거래 통계 서비스 1차 개발 완료 보고
RESTful API 설계
Portfolio
[RAG Tutorial] 02. RAG 프로젝트 파이프라인.pdf
Hoodpub 기술 발표
REST API 디자인 개요
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SPOAZ] : Spotify 기반 개인화 음악 추천 서비스 프로젝트
Mongo db 최범균
라즈베리파이로 슬랙 봇 개발하기
PostGIS 시작하기
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
데브시스터즈 데이터 레이크 구축 이야기 : Data Lake architecture case study (박주홍 데이터 분석 및 인프라 팀...
파이썬 데이터 분석 (18년)
DataWorks Summit 2017
Ksug 세미나 (윤성준) (20121208)
DataWorks Summit 2018
spark database Service
GraphQL overview

More from r-kor (14)

PDF
오픈데이터와 오픈소스 소프트웨어를 이용한 의료이용정보의 시각화
PDF
구조화된 데이터: Schema.org와 Microdata, RDFa, JSON-LD
PDF
선박식별정보를 이용한 어업활동 공간밀도 가시화
PDF
한글 언어 자원과 R: KoNLP 개선과 활용
PDF
지능정보시대를 위한 빅데이터, 이대로 좋은가
PDF
과학기술 발전과 오픈소스
PDF
오픈 데이터, 스마트 시티 그리고 인공지능
PDF
유엔 해비타트 신도시의제 실현을 위한 오픈소스 지오스페셜
PDF
Expanding Open Data Horizons with R and RStudio
PDF
Bristol Approach To Citizen Sensing
PDF
오픈데이터 관련 글로벌 동향과 정책 기술적 지향점에 대한 고찰
PDF
Digital Transformation, OSS, 모두를 위한 AI - 마이크로소프트의 관점
PDF
IoT 구현을 위한 오픈 데이터 이슈
PDF
황성수 공공데이터 개방과 공공이슈 해결
오픈데이터와 오픈소스 소프트웨어를 이용한 의료이용정보의 시각화
구조화된 데이터: Schema.org와 Microdata, RDFa, JSON-LD
선박식별정보를 이용한 어업활동 공간밀도 가시화
한글 언어 자원과 R: KoNLP 개선과 활용
지능정보시대를 위한 빅데이터, 이대로 좋은가
과학기술 발전과 오픈소스
오픈 데이터, 스마트 시티 그리고 인공지능
유엔 해비타트 신도시의제 실현을 위한 오픈소스 지오스페셜
Expanding Open Data Horizons with R and RStudio
Bristol Approach To Citizen Sensing
오픈데이터 관련 글로벌 동향과 정책 기술적 지향점에 대한 고찰
Digital Transformation, OSS, 모두를 위한 AI - 마이크로소프트의 관점
IoT 구현을 위한 오픈 데이터 이슈
황성수 공공데이터 개방과 공공이슈 해결

RUCK 2017 R로 API 서버를 만드는 4가지 방법(은 삽질기)