REST?
분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로 웹의 장점을 최대한 활용할 수 있도록 설계 된 네트워크 아키텍쳐 원리의 모음이다.
(참고)머릿글 및 수락 매개 변수 요청 헤더에서 클라이언트는 서버에게 수신할 수 있는 콘텐츠 유형을 보냄 (Accept 필드) MIMEtype (https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)
API version 관리
새로운 기능이 들어간 새로운 api 배포 시 하위 호환성을 보장하면서 서비스를 해야 하기 때문에버전 관리가 필요함.
{serviceName}/{version}/{REST url} -> POST: myWeb.com/users/v1.0
11
1
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
GET _ Users? Name=kim&age=20&offset=20&limit=10 // 이름이 Kim이고 나이가 20인 user를 20부터 10명 가져옴. - 단점 > offset limit이 쿼리 조건인지 페이징 조건인지 모름 - 수정 > users?q=*Name %3DKim,age%3D20 *&offset=20&limit=10
단일 API 엔드포인트 활용 여러 개의 서버에서 동작할 때 , reverseProxy 서버를 세우고 api.myweb.com 단일 url을 구축후 api.myweb.com/users -> user.myweb.com api.myweb.com/cars -> car.myweb.com 으로 라우팅하게 함. Api 서버들이 확장이 되어도 클라이언트는 단일 엔드포인트를 보면 되고, 부하 분산 및 로그를 통한 감사도 편리함.
HATEOAS 를 이용한 링크 처리 (Hypermedia As The Engine of Application State) 하이퍼 미디어의 특징을 이용하여 http리스판스에 다음 Action이나 관계된 리소스에 대한 http 링크를 제공
표준 규약이 없다 – 서비스 표준 규약이 없기 때문에 안티 패턴이 적용된 REST Api도 많이 사용되고 있음. 안티패턴을 지양해야 함.
전통적인 RDBMS에 적용시키기 어려움.
CORS(Cross-Origin Resource Sharing) API 서버와 javascript가 호스팅 되는 서버의 url이 다르기 때문에 발생하는 문제 이기 때문에 앞단에 ReverseProxy를 넣어서 전체 url을 만들어 줄 수 있다.
JSONP
* 참고 * [조대협님의 블로그(http://bcho.tistory.com)](http://bcho.tistory.com/953) - REST API 이해와 설계 - 1 개념 잡기 http://bcho.tistory.com/953 - REST API 이해와 설계 - 2 디자인 가이드 http://bcho.tistory.com/954 - REST API 이해와 설계 - 3 보안 가이드 http://bcho.tistory.com/955 - http://www.restapitutorial.com/lessons/whatisrest.html - https://ko.wikipedia.org/wiki/REST> 이 포스트 더보기
기간내 기간검색
현재 하는 프로젝트에서 기간 검색을 하는데, 입원 기록을 조회 할 때, 입원일자로 SELECT 를 해서 데이터를 전달 해주었다. 그런데 입원 처럼 기간이 있는 경우 기간검색은 단순히 기간 시작일을 SELECT하면 결과가 이상하다.
예를 들면 2018년 6월 01 일 에 입원한 환자가 아직 재원 중일때
현재 날짜가 2018년 07월 25일이고 이 환자가 1개월로 이력을 조회하면 (2018-06-26~2018-07-25) 진료이력이 나오지 않는다 왜냐하면 입원일자가 조회 시작/종료일에 포함 되지 않기 때문이다. 이는 사용자가 원하는 결과가 아닐것이다.
그래서 DB에 TEST 테이블을 만들어서 테스트를 해보았다. 예를 바꿔서 2018년 6월 1일에 입원해서 7월 25일에 퇴원한 환자 A가 있고, 2018년 6월 3일에 입웒개서 아직 재원중인 환자 B가 있다.
| STARTDT | ENDDT | | 20180601 | 20180725| | 20180603 | |
2018년 7월 1일에서 7월 10월 중에 재원중인 환자를 검색하면 둘다 나와야 한다.
SELECT * FROM TEST WHERE date(startdt) <= date('20180701') and date(enddt) >= date('20180710')
이렇게 하면 아직 재원중인 환자 B는 안 나온다 .
SELECT * FROM TEST WHERE date(startdt) <= DATE('20180701') and date(ifnull(enddt, now())) >= DATE('20180710')
이렇게 하면 두환자 모두 잘나온다.
> 이 포스트 더보기CDN이란?
CDN을 사용 해야 할까?
YAHOO DEVELOPER NETWORK 의 Best Practices for Speeding Up Your Web Site (https://developer.yahoo.com/performance/rules.html) 라는 글을 보면
웹사이트 속도 개선 방법의 한가지로 CDN을 사용하라고 이야기 한다.
사용자 응답시간의 80~90% 가 페이지의 구성 요소를 모두 다운 로딩 하는데 소요 되기 때문에 웹 개발자들은 페이지 로드 시간을 줄이기 위해 다양한 고민과 노력을 계속해 왔다.
CDN은 웹 어플리케이션 및 스트리밍 미디어를 비롯한 콘텐츠를 전송하도록 최적화 된 전세계적으로 촘촘히 분산된 서버로 이루어진 플랫폼이다.
CDN의 가장 대표적인 장점들은 아래와 같다.
이거 말고도 뭐 좋은 점이야 많겠지만 그렇다면 왜 모두들 CDN을 사용하지 않는 걸까?
사실 나는 개발할 때 CDN을 이용해서 jquery나 기타 라이브러리를 링크 하는게 매우 꺼려졌었는데 주된 이유는 뭔가 사이트가 독립적으로 완전하게 돌아가지 못할 것 같다는 점이었다.
또 가용성이나 효율에 대해서도 의심을 가지고 있었다. (CDN서버가 작동이 중지 될 수 있지 않을까? CDN서버가 더 느리지 않을까? )
뭐 내가 있었던 상황에서는 고민할 가치가 없이 CDN을 사용 하는게 맞다.
조금 다른 상황에서(컨텐츠 제공자 입장에서) 이렇게 좋은 CDN 이라는 친구를 왜 이용하는게 고민이 되냐 하면 가장 주요한 문제는 돈이다. 대부분의 CDN은 리소스 요청 횟수에 따라 월별로 돈을 지급하게 되어있다.
CDN 이 여러가지 문제(국가, 스팸 … ) 로 인해 브라우저에서 차단 될 수 있다. 이럴 경우 완전 망가진 웹 사이트를 고객이 보게 된다. (아.. 이 상황 정말 싫다..)
지리적 위치가 오히려 더~ 오래 걸릴 수 있다. (큰 CDN업체를 이용하면 크게 문제가 없을 문제… )
결론: 세상 어딜 가든 돈이 제일 문제다.