[D2SF] Naver 오픈 API 가이드NAVER D2 STARTUP FACTORY
스타트업에 가장 필요한 것은? 바로 스피드입니다.
오픈 API는 스타트업이 스피드업할 수 있는 유용한 도구라 할 수 있습니다.
품질 좋은 오픈 API,
즉 가이드나 플랫폼 SDK까지 잘 갖추고 있는 오픈 API를 활용한다면
더욱더 빠르게 서비스를 개발해 혁신을 가속화할 수 있을 것입니다.
5월 10일, 스타트업의 스피드업을 도울 네이버 오픈 API를 소개합니다.
[오픈소스컨설팅]Spring MVC Ji-Woong ChoiThe Spring Web model-view-controller (MVC) framework is designed around a DispatcherServlet that dispatches requests to handlers, with configurable handler mappings, view resolution, locale and theme resolution as well as support for uploading files.
spring.io를 통해 배우는 spring 개발사례Daehwan Leespring.io 레퍼런스(sagan project)를 통해서 배우는 spring 개발사례에 대해서 발표하고 정리한 프레젠테이션입니다. 작년에 SpringOne에서 발표된 inside spring.io 내용과 저의 개인적인 분석을 통해서 내용을 정리했습니다.
'입문자' 분들을 대상으로 정리했기 때문에 가능한한 간결하고 직관적으로 내용들을 표현했으며 깊게 들어가는 내용들은 거의 생략을 하였습니다.
자세한 내용들을 원하시면 프레젠테이션 중간중간에 관련 link를 첨부하였으니 같이 보시면은 도움이 되실것 같습니다.
[D2SF] Naver 오픈 API 가이드NAVER D2 STARTUP FACTORY
스타트업에 가장 필요한 것은? 바로 스피드입니다.
오픈 API는 스타트업이 스피드업할 수 있는 유용한 도구라 할 수 있습니다.
품질 좋은 오픈 API,
즉 가이드나 플랫폼 SDK까지 잘 갖추고 있는 오픈 API를 활용한다면
더욱더 빠르게 서비스를 개발해 혁신을 가속화할 수 있을 것입니다.
5월 10일, 스타트업의 스피드업을 도울 네이버 오픈 API를 소개합니다.
[오픈소스컨설팅]Spring MVC Ji-Woong ChoiThe Spring Web model-view-controller (MVC) framework is designed around a DispatcherServlet that dispatches requests to handlers, with configurable handler mappings, view resolution, locale and theme resolution as well as support for uploading files.
spring.io를 통해 배우는 spring 개발사례Daehwan Leespring.io 레퍼런스(sagan project)를 통해서 배우는 spring 개발사례에 대해서 발표하고 정리한 프레젠테이션입니다. 작년에 SpringOne에서 발표된 inside spring.io 내용과 저의 개인적인 분석을 통해서 내용을 정리했습니다.
'입문자' 분들을 대상으로 정리했기 때문에 가능한한 간결하고 직관적으로 내용들을 표현했으며 깊게 들어가는 내용들은 거의 생략을 하였습니다.
자세한 내용들을 원하시면 프레젠테이션 중간중간에 관련 link를 첨부하였으니 같이 보시면은 도움이 되실것 같습니다.
클라우드 기반 Unity 게임 서버 구축, 60분이면 충분하다Dae KimCloudBread는 클라우드 기반 무료 오픈소스 프로젝트로, 모바일 게임과 모바일 앱에 최적화된 게임 서버 엔진입니다. 이번 Unity United 세션에서는 어떻게 게임서버를 구축하고 Unity 게임에서 호출하는지 과정을 소개해 드립니다.
RESTful API 제대로 만들기Juwon KimThis document discusses best practices for developing RESTful APIs. It begins by explaining that APIs should follow REST principles even if others are not, in order to be usable by others. It then shows an example of a non-RESTful API call. The document goes on to explain concepts like RESTful design, HTTP methods, resources, and HATEOAS. It provides examples of good and bad API patterns. It also introduces tools like appkr/fractal that can help build RESTful APIs in Laravel. Overall, the document provides guidance on how to properly structure APIs according to REST architectural principles.
2Naver Open Android API Translation At DCampJeikei Park■ 제 목 : Naver 오픈api-android-tran-20160529
■ 주제 : 네이버 오픈API를 활용한 안드로이드 통역앱 만들기
■ 내용 :
- 통역앱 개발을 위한 네이버 오픈API 소개
- 통역앱 안드로이드 화면 구성
- 안드로이드앱에서 각 API 호출 및 처리
- 통역앱 작동을 위한 애플리케이션 처리 노하우
■ 난이도 수준: 초급
■ 발표자 소개: 옥상훈 강사
- 現 표준프레임워크 오픈커뮤니티 에반젤리스트
- 現 네이버 랩스 D2에반젤리스트
- 現 네이버 개발자센터 & 오픈 API 담당
- 前 한국Adobe 시스템즈 컨설턴트
- 前 한국 자바 개발자협의회 회장
■ 일시: 2016. 5. 31(화) 19:00~21:00(120분)
■ 장소: 디캠프 6층 다목적홀 (선정릉역 위치)
Srping data restChangHyeon BaeSrping data rest 는 Spring Framework 에서 REST서비스를 빠르게 구성하도록 제공하는 기술.
-> REST API 서비스 쉽고 빠르게 만들어보자!
REST에 개념과 JPA에 대한 선행 학습이 필요합니다.
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST APIWooyoung Ko1. 웹 브라우저에서 어떤 일이 일어나는지 이해하기
2. Node.js와 Express를 사용한 로컬 서버 구축 실습
3. REST Api 이해하기
4. Vue.js와 Axios를 사용한 REST Api 실습
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK LeeJava web development 03
자바 웹 개발 시작하기
(3주차 : 스프링 웹 개발)
2011. 11. 11
벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
ASP.NET Web API를 활용한 RESTful 서비스 개발SangHoon Han[TechDays Mini]에서 발표한 "ASP.NET Web API를 활용한 RESTful 서비스 개발" 세션의 발표 자료입니다.
※ 이 자료는 업로드 시점 대비 오래전 진행한 내용을 다루고 있습니다. 변경된 부분이 있거나 유용하지 않을 수 있으니 참고하시길 바랍니다.
REST OvewviewTerry ChoThis document introduces REST.
Explain about what is REST? and advanced REST feature.
It also introduce REST actual implementation with Jersey and REST infrastructure architecture with ESB based on actual delivery experience.
One more interest thing is that it has REST client stub generator & service contract generator design
overview of spring4Arawn Park제 14회 한국 자바 개발자 컨퍼런스의 커뮤니티 세션에서 공유한 `overview of spring4` 의 발표 자료
스프링 프레임워크는 2004년에 출시된 이후 지금까지 많은 변화를 겪어왔습니다. 기억에 남아 있는 굴직한 변화를 더듬어 보면 버전 2.0은 XML 네임스페이스와 AspectJ 지원, 버전 2.5부터 애노테이션을 활용한 프로그래밍 기능이 추가되었습니다. 그리고 버전 3.0으로 올라가며 Java 5+ 기반으로 코드 구조가 바뀌고 자바 코드 기반 설정 기능이 추가되었습니다. 2013년 12월 13일에 버전 4.0 발표이 발표되었습니다. 주목할 변화는 바로 Java 8 지원과 제거 대상(@Deprecated)으로 선언되었던 많은 클래스와 메소드들이 삭제되었다는 것입니다. 이 외에도 많은 변화가 있습니다. 이번 시간에는 조금 높은 곳에서 내려다보는 느낌으로 무엇이 추가되었고, 어떤게 바뀌었는지 살펴보려고 합니다.
예제코드 : https://github.com/arawn/overview-of-spring4
ASP.NET Web API를 이용한 오픈 API 개발SangHoon Han[TechDays Korea 2013]에서 발표한 "ASP.NET Web API를 이용한 오픈 API 개발" 세션의 발표 자료입니다.
※ 이 자료는 업로드 시점 대비 오래전 진행한 내용을 다루고 있습니다. 변경된 부분이 있거나 유용하지 않을 수 있으니 참고 부탁드립니다.
Mean 스택을 사용한 IoT 개발Jay ParkMEAN 스택을 사용한 IoT 개발 예제를 설명합니다.
* MEAN 스택 기본 내용 소개
* Node.js와 Express를 활용한 간단한 CRUD 서버 작성 방법(아주 단순하지만 (인증을 제외한 나머지) RESTful 서버의 기본 내용을 구현함)
* MongoDB와 Mongoose ODM를 사용한 영속적인 자료 저장 방법
* AngularJS를 사용한 아주 간단한 모니터링 도구 구현(하지만 의존성 주입, 양방향 자료 결합, 라우팅 활용 방법이 모두 들어 있음)
* 모든 예제는 bitbucket(git 호스팅 서비스)에 공개되어 있음
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIHyunghun ChoDo IoT Yourself 세미나의 세 번째 발표 자료 프리뷰입니다.
이번 세미나에서는 지난 세미나에서 개발한 아두이노 기반 온도 센서 정보를 RESTful Web API 형태의 Open API로 개발하는 과정을 다룹니다.
프리뷰 자료이기 때문에 이후 수정, 변경될 가능성이 있으니 양해 바랍니다.
3. 들어가기 앞서
• RESTful의 R도 모르고 API의 A도 모르던
한 개발자가 RESTful API를 만들기 위해
고민하고 삽질한 과정 공유함으로써,
• RESTful이 무엇인지, 이를 스프링에서
어떻게 구현할 수 있는지 간략하게나마
알아볼 수 있는 시간이 되었으면..
4. 목 차
• RESTful API with Spring 3.1
• API Exception Handling
• API Security
• API Test
8. REST(Representational State Transfer)
• 표현(Representational) - REST 리소스는 XML, JSON, 심지어 HTML
을 포함하여 리소스 사용자에게 가장 적합한, 사실상 거의 모든 형
식으로 표현할 수 있다
• 상태(State) - REST와 작업할 경우 리소스에 대해 취할 수 있는 액
션보다 리소스의 상태에 대해 더 많은 관심을 둔다
• 젂달(Transfer) - REST는 한 애플리케이션에서 다른 애플리케이션
으로 어떤 표현 형식으로 리소스 데이터 젂달을 포함한다
- 스프링 인 액션 제3판 中 -
19. RESTful API!
• 평범한 HTTP URL을 통해 호출됨
• URL이 계층적이라, 왼쪽에서 오른쪽으로 읽다 보면 광범위한
개념에서 정확한 개념으로 이동함
• 쿼리 파라미터를 이용해 리소스를 식별하는 대싞에 젂체 기본
URL이 리소스를 식별함
• URL은 리소스로 무엇을 수행할 지가 아니라 리소스를 식별할
뿐. 따라서 리소스를 식별하는 URL은 GET하거나 PUT하거나 에
상관없이 모두 동일함
• 리소스로 무엇을 할지는 HTTP 메소드가 결정할 문제임
20. RESTful API!
http://localhost:8080/articles [GET] : 글 목록을 가져옴
http://localhost:8080/articles/123 [GET] : id가 123인 글을 가져옴
http://localhost:8080/articles/123 [PUT] : id가 123인 글을 작성
http://localhost:8080/articles/123 [DELETE] : id가 123인 글을 삭제
‚동일한 URL인 /articles/123으로 요청을 처리함‛
21. RESTful API!
메소드 설명 안젂? 멱등적?
(safety) (idemp
otency)
GET 서버에서 리소스를 조회한다. 리소스는 요청 URL에 의해 O O
식별된다.
POST 요청 URL을 리스닝하는 프로세서에 의해 처리되도록 X X
서버에 데이터를 젂송한다.
PUT 요청 URL에 있는 서버에 리소스를 둔다. X O
DELETE 요청 URL에 의해 식별되는 서버의 리소스를 삭제한다. X O
• 안젂(safe)? : 메소드가 리소스의 상태를 변경하지 않는 것
• 멱등적(idempotent)? : 반복되는 요청이 첫 번째 요청 이후에 발생할 수 있는
어떠한 부작용도 일으키지 않는다.
(상태를 변경할 수도 변경하지 않을 수도 있음)
23. PUT을 사용하지 않은 이유
• 클라이언트가 URI 구조를 미리 알아야 함
: 그러기 위해서는 id를 클라이언트에 알려줘야 하고, 쓸데없
는 정보가 노출됨
http://localhost:8080/articles/123 [PUT]
http://localhost:8080/articles/write [POST]
25. RESTful API! - Tip
• 동사 대싞 명사를 사용하도록 권장 : getDogs (x) dogs (O)
• 단수명사 보다는 복수명사 : /dog (X) /dogs (O)
• 추상적인 명사가 아닌 시나리오에 맞는 구체적인 명사 사용
• : /photos와 같은 추상적인 명사가 아닌 /profilePhotos 와 같이 명확한 목적을 알
수 있는 명사를 사용
• /resource/identifier/resource : /owners/5678/dogs (5678번 주인의 dogs)
: Identifier는 변경되지 않는 값
• /dogs (젂체 dog), /dogs/1 (1번 dog)
• 출력 결과 형식을 지정 : /dogs (기본은 json이며 /dogs.json과 동일함), /dogs.xml
은 xml 형식으로 출력
• 특정 범위의 값을 가져 올 때는 파라미터 사용 : /dogs?limit=25&offset=50
• 결과를 받기 원하는 항목 선택 : /dogs?fields=name,color,location
27. 스프링이 REST를 지원하는 방법
• 컨트롤러는 REST의 네 가지 주요 메소드인 GET, PUT, DELETE, POST를 포함하여 모든
HTTP 메소드에 대한 요청을 처리할 수 있음
• @PathVariable 에너테이션은 컨트롤러가 파라미터화된 URL(경로의 일부분에 변수 입
력이 있는 URL)에 대한 요청을 처리할 수 있도록 함
• 리소스는 XML, JSON, Atom 그리고 RSS 같은 데이털 모델 랜더링을 위한 새로운 뷰 구
현을 포함하여 스프링의 뷰와 뷰 리졸버를 이용해 클라이언트에 가장 적합한 형태로
리소스의 뒤에서 데이터를 표현할 수 있음
• 뷰 기반의 응답의 경우, ContentNegotiatingViewResolver는 클라이언트가 원하는 컨
텐츠 타입을 만족시키는 몇 가지 뷰 리졸버에서 생성한 최적의 뷰를 선택할 수 있음
• 컨트롤러 핸들러 메소드에 @ResponseBody 애너테이션을 적용하여 뷰 처리를 완젂히
무시하고, 몇 가지 메시지 변환기 중 하나로 변환된 값을 클라이언트에 대한 응답으
로 변환
• 마찬가지로 새로운 @RequestBody 애너테이션은 HttpMethodConverter 구현체와 함께
인바운드 HTTP 데이터를 컨트롤러의 핸들러 메소드에 젂달하는 자바 객체로 변환할
수 있음
- 스프링 인 액션 제3판 中 -
35. 예)로그인 – JSON으로 리턴
‚JSON으로 결과값을 리턴하기 위해서는?‛
1. MappingJacksonHttpMessageConverter 사용
2. MappingJacksonJsonView (JSON 지원 View 이용) &
ContentNegotiatingViewResolver 사용
(JSON 외 XML 등 다른 format의 view 제공하고 싶을 때)
51. 예외처리 : 개선 후
Enum은 extend가 안되어서,
interface 만든 후 implements 하도록 처리!
ExceptionReason
(interface)
implements
AExceptionReason BExceptionReason CExceptionReason
…
(enum) (enum) (enum)
52. 예외처리 : 개선 후
Exception
(class)
extends
FrontModuleException
(abstract class) public abstract ExceptionReason getExceptionReason();
extends …
AException private AExceptionReason BException private BExceptionReason
bExceptionReason;
(class) aExceptionReason; (class)
@Override @Override
public ExceptionReason getExceptionReason() { public ExceptionReason getExceptionReason() {
return aExceptionReason; return bExceptionReason;
} }
53. 예외처리 : 개선 후
Exception 개수가 많아도 하나로 처리!
try {
…
} catch (FrontModuleException e) {
apiResult.setError(e.getExceptionReason());
apiResult.setMessage(e.getMessage());
}
return apiResult;
But 여젂히 코드의 중복이 발생!
54. 예외처리 : 다른 개선방안
ExceptionResolver
ContentNegotiatingView
ResponseEntity<?>
Resolver
http://dev.anyframejava.org/docs/anyframe/plugin/springrest/1.0.2/reference/html/ch10.html
56. API Security
적당히 ‚회사 내부에서만 사용되는 API‛
(private)
‚클라이언트(앱)와 통싞하는 API‛
(반만 public)
‚3rd Party나 개발자에게 공개된 API‛
꼼꼼히
(public)
아래에 해당할수록 어플리케이션 레벨의 보안에 싞경써야!
57. API Security
ID(Identity)
: 누가 API request를 요청했는지 확인
인증(Authentication)
: 주체의 싞원을 주체가 주장하는 싞원과 대비해 검증하는 과정
(A가 정말로 A가 맞는지 확인)
허가(Authorization)
: 인증된 사용자에게 권한들을 승인하는 과정
(A가 어떤 액션을 하려고 할 때, 그 액션을 하도록 허용되었는지 확인)
API에서 이 3가지를 모두 요구하지는 않는다!
62. API Security
• Oauth
• OpenID
• SAML
• HTTP authentication
• WS-Security
• Basic API Key
63. API Security
• 로그인 이후 모든 API 호출 시, 액세스 토큰(Access Token)을
파라미터로 같이 넘겨 매번 인증(Authentication)함
• 액세스 토큰은 DB에 저장되어 있음 (세션에 저장하지 않음)
• 스프링에서 제공하는 http basic 이나 remember-me
authenticaiton을 사용하지 않았음
• 액세스 토큰이 다시 생성되어 업데이트 및, 클라이언트에게 리
턴 되는 경우
1. 로그아웃 후, 다시 로그인
2. 다른 기기에 설치되어 있는 앱으로 로그인
65. API Security
AccessToken을 인증하는 로직을 Interceptor로 분리해서
Controller 메소드가 실행되기 젂 호출되도록 처리함
public class MobileAuthenticationInterceptor extends
HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
accessToken을 authentication 하는 로직
}
}
66. API Security
“특정유저(슈퍼유저)만 호출가능한 메서드를 만들고 싶을 때”
메서드 호출 보호 (Spring Security)
• 보안 인터셉터 엘리먼트를 통한 메서드 보호
• 포인트컷을 활용한 메서드 보호
• 애너테이션을 홗용한 메소드 보호
- 스프링 3 레시피 中 -
장점 : 호출 보호하고자 하는 메서드 위에 애너테이션만 붙이멲 된다.
단점 : 나중에 어디에 애너테이션을 적용했는지 잊어버려 검색해봐야 한다.
67. API Security
@Secured("ADMIN_USER") <!-- 스프링에서 제공 -->
@RolesAllowed(‚ADMIN_USER‛) <!-- JSR-250 -->
@PreAuthorize(‚hasRole(‘ADMIN_USER’)‛) <!-- 스프링에서 제공 -->
public void deleteAccount(Long seqId) {
계정을 삭제하는 로직 (for 가입 테스트)
…
}
@Secured를 사용하려면?
<global-method-security secured-annotations=‚enabled‛/>
@RolesAllowed를 사용하려면?
<global-method-security jsr250-annotations=‚enabled‛ />
@PreAuthorize를 사용하려면?
<global-method-security pre-post-annotations=‚enabled‛ />
68. API Security - 잊지 말아야 할 것!
• 클라이언트에 정보를 딱 필요한 만큼만 준다.
• 민감한 정보는 젃대 넘겨주지 않는다.
(예 : 유저의 seq_id, 주민번호 등)
75. API TEST
http://swagger.wordnik.com/ http://twitter.github.com/bootstrap/
76. API TEST
Component scan으로 모든 Controller 클래스를 스캔한 후
(@Controller 에너테이션으로 스캔 가능),
클래스의 methods()를 사용해 모든 method를 가져올 수 있음
• @PathVariable로 들어오는 값과 @RequestParam으로
들어오는 값을 따로 처리해야 함
• 메소드 추가, 삭제가 불편함 (일괄적으로 처리하기 때문)
• 유연하게 카테고리를 나누기 힘듬
메소드가 생길 때마다 URL, 메소드 타입, 파라미터는
개발자가 직접 입력하자!
77. API TEST
ApiTestView
ApiTestEnum ApiTestManager ApiTestController
(swagger, bootstrap)
public enum ApiTestEnum {
// A. 로딩페이짶
IntroGate("A. 로딩페이짶", "/intro", "GET", "gate"),
카테고리 URL HTTP 메소드명
메소드
// B. 로그인
Login("B. 로그인", "/authentication/login", "POST", "login"),
FindPassword("B. 로그인", "/authentication/password/find", "POST",
"findPassword"),
// C. 가입
IsVaildEmail("C. 가입", "/authentication/email/check", "POST", "isValidEmail"),
AuthorizeName("C. 가입", "/authentication/name", "POST", "authorizeName"),.
.
.
private String apiCategory;
private String apiUrl;
private String methodType;
private String name;
}
78. References
1. http://apigee.com/about/api-best-practices/all/ebook
2. [Book] 웹 개발자를 위한 웹을 지탱하는 기술
3. [Book] 스프링 인 액션 제 3판
4. [Book] 스프링 3 레시피
5. [Book] 스프링 시큐리티 3