본문 바로가기

전체 글

(711)
[API] REST API 설계 해보기 REST API 디자인 가이드 REST API를 어떻게 디자인 하는지 알아보고 좋은 REST API를 사용자들에게 제공할 수 있도록 해보자. 1. REST는 간략하고 직관적이게 디자인하자. - REST API는 URL만 보고 URL이 의미하는 바를 알 수 있어야 한다. - REST API는 길게 만들기 보다 짧게 만들어 제공하자. (최대 2 Depth를 권장 한다.) - URL은 될 수 있으면 명사를 사용하자. (URL 작성되는 내용은 리소스 정보를 다루고 있기 때문에 동사보다는 명사가 더욱 어울린다. 단, 명사를 사용하게 되면 단수 보다는 복수형을 사용하자. 의미상 복수형이 더욱 어울리는 표현이기 때문이다.) [잘못된 예 : HTTP Post로 모두 정의하고 get/set을 URL에 명시함으로서 행위..
[API] REST API (특성) 2. REST의 특성 : 위에서 REST의 기본적인 개념과 구성에 대해서 알아보았다면 REST가 가지고 있는 특성을 알아보자. 특성을 알아야 더욱 좋은 API를 설계할 수 있으며 더 좋은 개발 산출물을 만들 수 있을 것이다. 1> Uniform Interface REST는 HTTP 표준을 지원한다면 그외 어떠한 기술, 언어, OS 등..에 대한 제약을 받지 않는 인터페이스 스타일이다. 예를 들어 HTTP + JSON형식으로 REST를 정의 하였다면 개발자가 C++, Python과 같은 언어와 상관없이 해당 개발이 가능하며 iOS, Android, Window, Linux 할 것 없이 어디서든지 사용이 가능하다는 뜻이다. 이와 같은 특성으로 REST API를 사용할 경우 서비스간에 느슨한 결합 형태로 구성..
[API] REST API (개념 및 구성 요소) REST(Representational State Transfer)는 HTTP 주요 저자중 한명인 Roy Fielding의 2000년 박사학위 논문에서 소개 되었다. Roy Fielding은 당시 아키텍쳐가 웹(HTTP)의 장점을 충분히 담아내지 못한다고 생각하였다고 한다. 그래서 직접 웹(HTTP)의 장점을 최대한 활용한 네트워크 기반의 아키텍처를 소개했는데 이것이 바로 REST인 것이다. * 네트워크 기반의 아키텍처 : 자원을 정의하고 자원에 대한 주소를 지정하는 방법의 전반을 일컫는다. 1. REST 이해하기- REST는 자원(Resource)/행위(Method)/메시지 총 세가지로 구성되어 있다. - 아래 예제를 위에서 언급한 세가지 요소로 살펴보자. 아래 REST를 한문장으로 표현하면 "1500..
[Tensorflow] TF-Slim 알아보자 딥러닝 프레임워크 중 가장 많은 인지도를 받고 있는 것은 단연 Tensorflow 이다. 하지만 이렇게 좋은 프레임워크가 있음에도 불구하고 Pytorch, Keras와 같은 딥러닝 프레임워크가 끊임 없이 탄생하고 많은 연구자들의 사랑을 받는 이유는 무엇일까? 많은 이유가 있겠지만 그 중 하나로 들 수 있는것이 바로 단순하고 간결한 인터페이스 덕분일 것이다. 저수준의 Tensorflow API는 연구자들의 입맛에 맛게 자유롭게 구현이 가능하다는 장점도 있지만 자유로운 만큼 그에 따르는 대가도 적지 않다. 연구자들의 자유 속에 만들어진 코드는 개인차가 심할 것이며 코드 중복 및 복잡도가 올라갈 가능성이 아주 높아진다. 이와 같은 이슈로 인해 Tensorflow에서도 고수준 경량 API를 제공하고자 만들어 진..
[Tensorflow]TFRecord 파일 생성 방법(텐서플로우 데이타 포맷) 학습 또는 연구 목적으로 텐서플로우를 사용하고 있다면 TFRecord라는 파일 포맷을 한번쯤은 만나 보았을 것이다. 아직 만나보지 못하였다면 곧 만나게 될 것이다. 이번 글에서는 TFRecord 데이타 포멧이 무엇이고 어떻게 사용하는지에 대해서 알아 보자. "TFRecord 파일 포맷이란 무엇인가?" TFRecord 파일은 텐서플로우로 딥러닝 학습을 하는데 필요한 데이터들을 보관하기 위한 데이타 포맷이다. 흔히들 텐서플로우의 표준 데이터 파일 포맷이라고도 한다. TFRecord 파일은 바이너리 데이타 포맷으로 그 본질은 구글에 Protocol Buffer와도 같다. (파일에 데이터를 Serialize하게 저장함) *Protocol Buffer 참고 : http://bcho.tistory.com/1182 ..
[Tensorflow] MNIST 학습해보기!! MNIST 데이터셋을 신경망으로 학습시키며 딥러닝에 대한 맛을 보자. 인공지능에 관심이 있는 분이라면 MNIST를 처음 듣는 사람은 없을 것이다. 하지만 인공지능 분야에 첫걸음을 때는 사람을 위해 간략히 MNIST에 대해 설명하고 넘어가도록 하자. MNIST는 손으로 쓴 숫자들의 이미지를 모아놓은 데이터 셋으로 0~9까지의 수를 28 * 28픽셀 크기의 이미지로 구성해 놓은 것이다. MNIST 학습은 머신러닝을 공부하는 사람이라면 누구가 거쳐 가는 프로그래밍에 Hello World라고도 불리운다. 지금부터 텐서플로에 내장된 MNIST 데이터를 기반으로 학습하는 과정을 살펴보자. 1. 데이터 가져오기 가장 먼저 텐서플로를 임포트하고 텐서플로에 대장된 tensorflow.example.tutorials.mn..
[JAVA 8] 메서드 레퍼런스 알아보기! 메서드 레퍼런스는 특정 메서드만을 호출하는 람다의 축약 표현이라고 생각할 수 있다. 람다가 특정 메서드를 직접 호출하게 된다면 메서드를 어떻게 호출해야 하는지 설명을 참조 하기 보다 메서드 명을 직접 참조 하도록 하는 것이다. 메서드 레퍼런스를 이용한다면 기존 메서드 구현으로 람다 표현식을 만들 수 있다. 이때 명시적으로 메서드명을 참조 하게 됨으로서 가독성을 높일 수 있는 장점이 있다. 메서드 레퍼런스는 메서드명 앞에 구분자 (::)를 붙이는 방식으로 사용된다. Car :: getPrice (== (Car c) -> getPrice())는 Car 클래스의 getPrice의 메서드 레퍼런스를 뜻한다. [예제] (Car c) -> c.getPrice() =========> Car :: getPrice ()..
[JAVA 8] 형식 검사, 형식 추론, 제약 람다로 함수형 인터페이스의 인스턴스를 만들 수 있으며 람다 표현식에는 람다가 어떤 함수형 인터페이스를 구현하는지 정보를 가지고 있다. 따라서 람다 표현식을 더 제대로 이해하려면 람다의 실제 형식을 파악해야 한다. 1. 형식 검사 - 람다에 사용되는 내용을 바탕으로 람다의 형식을 추론할 수 있다. - 대상 형식 ? 람다가 전달될 파라미터나 람다가 할당되는 변수 등에서 기대되는 람다 표현식의 형식을 대상 형식이라 부른다. (예: Predicate) - filter() 함수의 정의를 보면 파라미터로 Predicate로 정의 되어 있다. - 즉, Predicate라는 대상 형식에 만족하는 람다 함수를 기대하는 것이다. 1-1.같은 람다, 다른 함수형 인터페이스 - 대상 형식이라는 특징 때문에 같은 람다 표현식이..
[AWS] 스케일링 알아보기 시스템으로의 접속수가 늘어나면 처리 능력을 키울 방법이 필요하다. 이와 같이 시스템의 처리 능력을 키우는 것을 스케일링이라고 한다. AWS는 스케일링하는 구체적인 방법으로 두가지 방법이 있다. 스케일 업(scale-up)과 스케일 아웃(scale-out)이 여기에 속한다. 스케일 업은 두가지의 커다란 제약이 있다. 하나는 단일 노드의 스펙 상한이 시스템의 처리 성능 한계가 되어버리는 것이다. 두번째는 인스턴스 용량을 변경할 때 일시적으로 중단을 해야 한다는 단점이 있다. 이에 비해 스케일 아웃은 노드 수를 늘리는 것으로 스케일링을 하기 때문에 상한선 제약 없이 동적으로 적용할 수 있다. 이와 같은 스케일 아웃 기능을 AWS에서는 제공하고 있다. 스케일 아웃을 전제로 하면 처리 능력을 확장시키는 작업을 자..
[AWS] 인스턴스 설계하기 (웹사이트) 오늘은 웹사이트 운영하는데 적합한 인스턴스 설계하는 방법을 알아보자. 웹사이트의 가정은 안정적인 응답이 요구되고 몇년 단위로 장기 이용한다는 요구사항이 있는 상태이다. 안정적으로 서비스를 운영하기 위해서는 성능이 안정된 EC2 인스턴스와 EBS를 선택해야 한다. 장기간 서비스가 될 예정이라면 장기 이용을 약정하여 할인 받을 수 있는 EC2 인스턴스가 적합하다. 1. 성능의 안정성과 관련해서는 스토리지 I/O 대역폭에 주의해야 한다. EC2인스턴스와 EBS 볼륨 사이는 다른 사용자와 공유하는 네트워크로 연결되어있다. 트래픽이 대역폭의 한계치에 이르게 되면 스토리지에서 데이터를 읽는 데 시간이 걸리고 응답도 불안정해진다. 이와 같은 이유로 EC2 인스턴스 생성시 네트워크 대역폭에 맞는 타입을 선정하는 것이 ..