안녕하세요, Brad입니다. 오늘 배운 내용 정리해볼게요!
개인 프로젝트 포비에게 PR보내기 위한 설정
- Github 설정에서 Collaborator에 javajigi 등록합니다.
- master 브랜치 말고 전 미션과 같이 step 만들어서 PR보냅니다.
- 그리고 PR보낼 때는 master로 보내면 됩니다. 또 PR주소도 같이 요청해야 합니다.
Q&A
private 필드에 데이터를 어떻게 넣을 수 있을까요?
ReflectionTestUtils
대신 getter / setter을 이용하는 것이 좋습니다.- getter / setter는 UI에 전달할 때 어쩄든 필요한 부분이므로 이것을 이용하면 되기 때문입니다.
logback-access의 역할
- HTTP의 요청 및 응답에 대한 데이터를 콘솔에 출력할 수 있습니다.
- 브라우저의 개발자 도구에서 보통 확인하는데 spring의 rest template을 통해 debug로 볼 수 있습니다.
- 만약 다 보고 싶지 않으면 설정을 통해 바꿀 수 있습니다.
출력값 중 Path는 무엇을 의미할까요?
- 쿠키가 유효한 경로를 말합니다. 만약
/
였다면/
이후의 모든 경로에 대해 모두 쿠키가 유효합니다.
SpringSecurity 적용 유무
- 많은 학습 비용이 들기 때문에 현재 단계에선 학습을 추천하지 않습니다.
- 현업에서 사용할지 안할지도 모르기 때문입니다. 만약 사용한다면 그때 학습해도 늦지 않습니다.
Restful API(최싱 발표)
what is REST API?
Web API
- 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세
특징 5가지
Stateless : 클라이언트 상태를 서버가 가지고 있지 않습니다.
Layered system
Code-on-demand
등등
그리고 Unifrom interface
표현을 통한 리소스 처리 : 클라이언트는 리소스가 아닌 '리소스의 표현'을 받습니다
Self-descriptive messages
- 자신을 어떻게 처리해야하는지에 대한 정보를 표현
- 어떤 것을 의미하는지 Content Type으로 등록하거나 명세에 대한 링크를 같이 보내줄 수 있습니다.
- 클라이언트는 등록되어있는 Content Type에 따라 해석하게 됩니다.
@RequestMapping(value = "/api/products", produce = "application/vnd.choising+json") // IANA에 문서가 등록되어있다고 가정
HATEOAS(헤이티오스, Hypermedia as the engine of application state)
- Hypermedia : 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트
- Spring boot에서 제공하는 헤이티오스 API가 있습니다. 해당 라이브러리를 이용하여 쉽게 만들어줄 수 있습니다.
API의 중요성
- 어떤 API는 엄청나게 많은 사용자가 있기 때문에 명세가 바뀔 때 미치는 영향은 엄청납니다.
- 모든 클라이언트를 망가뜨리지 않고 변화할 수 있는 디자인이 중요합니다.
Pobi 부가설명
HTML을 '사람'이 보기 위한 것입니다. 반면 REST API는 '기계(컴퓨터)'를 위한 것입니다. 그렇기 때문에 데이터가 주어졌을 때 기계는 잘 모를 수 있습니다. 예를들어 '배'가 데이터로 주어졌다면 배가 ship인지 abdomen인지 모르는 것입니다. 이것에 대한 설명이 'media-type'의 역할입니다. 이게 제대로 정의되어 있으면 검색엔진이나 자동화가 쉬워질 수 있습니다. 지금 github api를 보면 content-type으로 다음과 같이 주어져있습니다(Accept: application/vnd.github.v3+json
). API를 잘 쓰면 이전에 수동으로 하던 것들을 자동으로 할 수 있습니다.
프론트에서만 요청이 가능한게 아니라 서버 사이드에서도 API를 통해 요청을 처리할 수도 있습니다! 실제로 현업에서도 서버에서 요청하는 일을 많이 하고 있는데요. 그 이유는 많은 곳에서 API를 제공하고 있기 때문입니다. 현재 테스트 코드로 테스트하던 코드들이 실제로 프로덕션 코드에서 실제로 사용할 수 있습니다.
basicAuth
만약 로그인이 필요한 부분은 basicAuth를 구현하거나 다른 라이브러리 사용해서 요청하면 제대로 사용할 수 있습니다!
객체를 담아서 보낼 때 어떻게 데이터가 보내질까요?
만약 회원가입을 할 때 User
타입으로 보냈다면 이 객체가 JSON으로 바뀌어서 서버로 요청하게 됩니다. 그리고 서버의 SpringMVC의 @RequestBody
에서 JSON데이터를 자바 객체로 만들어줍니다. 여기서 제대로 만들어지기 위해선 'setter', '기본생성자'가 만들어져 있어야 한다는 것(자바 bean규약 지키면 됩니다!)입니다. JSON으로 전해지는 데이터가 여러개가 있을 때 굳이 모든 필드가 다 있을 필요가 없습니다. 일부 데이터만 필요하다면 필요데이터만 정의되어 있는 클래스를 정의해두면 됩니다! 이건 Jackson 라이브러리를 통해서 이루어지고 있는 것인데요. 설정을 통해 객체를 만드는 과정을 변경할 수 있습니다. 저희가 만드는 건 서버이지만 다른 API를 사용하는 순간 저희는 클라이언트가 될 수도 있습니다!
접근 제어에 대한 설정은 어떻게 약속을 할까요?
이 부분은 서버측, API를 만드는 쪽에서 명세를 정의하는 것입니다. 그리고 특정한 조건이 되면 해당 API가 제공한다고 명시할 수 있습니다.
HATEOAS
https://api.github.com/users/brad903
을 보면 여러 링크가 보이는데요. 이러한 하이퍼링크를 제공한다는 점에서 github는 HATEOAS를 적용하고 있다고 볼 수 있습니다.
HTTP의 우수성
위에서 본 특징 중 HTTP가 알아서 해주는 부분에 대한 것을 말합니다.
'TIL' 카테고리의 다른 글
Today's Dev Notes(2018-12-27) (0) | 2018.12.27 |
---|---|
Today's Dev Notes(2018-12-24) (0) | 2018.12.24 |
Today's Dev Notes(2018-12-19) (0) | 2018.12.19 |
Today's Dev Notes(2018-12-17) (0) | 2018.12.17 |
Today's Dev Notes(2018-12-16) (0) | 2018.12.16 |