티스토리 뷰

반응형

지난 시간에 서버를 개발하기 위해서 먼저 AWS의 서비스 중 API Gateway를 이용해서 REST API를 정의해보는 것을 진행할 건데요. 전에 API Gateway에서 간략하게 다시한번 확인하고 오시기 바랍니다. 

https://hero-space.tistory.com/116

 

AWS API Gateway 제대로 써보자 1

Serverless Architecture 방식으로 서버를 개발하고 구축하기로 결정했다면 어떤 클라우드를 기반으로 할지 정해야하는데, 저는 고민없이 AWS를 사용하고자 했습니다. 아무래도 GCP / Azure / AWS 이 3가지

hero-space.tistory.com

특히 지난 시간에 정의 했던 REST API의 URI와 Method 그리고 각 파라메터를 정의하고 리턴처리까지 할 예정인지라, API 정의 서를 다시한번 확인하면 아래와 같습니다.

Method URI Description Path Param Query Param Body Param Return Body (200OK)
POST /books 신규 책
등록하기
    {
"name": "3분 딥러닝 텐서플로맛", "type": "개발"
}
{ "message" : "success"}
GET /books/{bookId} 책 리스트
가져오기
bookId isBorrow   [
 {
   "bookId" : 1,
   "IsBorrow : false,
 }
]
GET /books/{bookId}/history 책 대여 기록
가져오기
bookId from
to
  [
 {
  "borrowedDate" : XXXX,
  "borrower" : ""
 }
]
PUT /books/{bookId}/borrow 책 대여하기 bookId     { "message" : "success"}
PUT /books/{bookId}/return 책 반납하기 bookId     { "message" : "success"}

몇개 안되는 API 지만 GET/PUT/POST 가 있으니 웬만한 케이스는 커버가 되리라 봅니다.

API Gateway 

먼저 aws basic으로 계정을 생성합니다. 그리고 아래 화면에서 api 를 타이핑하면 API Gateway 서비스를 찾을 수 있고 눌러서 들어갑니다. API Gateway 밑에 API 구축, 배포 및 관리라고 씌여져 있네요 다시한번 어떤 기능을 하는지 생각하고 들어가서 REST API를 눌러서 생성해봅니다.

우리는 REST API를 구축할 것이기때문에 눌러서 들어간뒤  REST, 새 API를 클릭하고 API 이름에 books라고 쓴 뒤 생성을 눌러줍니다.

그 다음으로 경로구성 화면이 나오는데 이후에 할거니까 다음을 눌러서 넘어가고 스테이지 구성도 기본으로 할 거니까 넘어가서 생성 버튼을 눌르면 완료되고 아래와 같은 화면을 볼 수 있습니다.

URI / Method 생성

왼쪽 메뉴에 books라고 씌여져 있고 리소스, 스테이지, 권한부여자, 게이트웨이응답, 모델, 리소스 정책, 설명서, 대시보드, 설정 등 많은 메뉴가 있는데요, 하나씩 실습해보면서 books API를 설정해보도록 하겠습니다. 우선 두번째 칸 리소스 오른쪽 작업버튼을 눌러서 메뉴가 나오면 리소스 생성을 눌러 줍니다. 그리고 books라고 리소스 이름을 써주고 리소스 생성 버튼을 눌러줍니다.

다시 한번 작업버튼을 누르고 메서드 생성을 해줍니다. POST 메서드를 선택하고 체크박스를 눌러주면 생성이 완료됩니다.

Lamda 함수를 매핑하도록 되어 있는데, Lambda의 경우 서버의 구현체로, API 요청이 왔을때 이를 수행할 수 있는 Function 으로 생각하면 됩니다. 물론 Lambda 함수 외에도 AWS 서비스 등으로 연결시킬 수 잇는데 서버리스로 구축 할 것이기 때문에 Lambda 함수로 통합유형을 유지해주고, 이후 Lamda 함수를 개발 중간에 보이는 빈칸에 함수 이름을 입력하면 열결 됩니다. 우선 다음으로 넘어가기 위해 빈 Lambda 함수를 만들어 보도록 하겠습니다. 중간에 노란색 칸에 보이는 Lamda 함수 생성 링크를 눌르면 바로 연결되어 아래와 같은 화면이 보이면 정상입니다.

Lamda 함수를 생성하는 방법도 3가지 인데, 가장 기본적으로 새로 작성하는 것으로 하고 함수 이름은 booksPost로 하고 런타임은 가장 많이 쓰는 파이썬으로 선택하겠습니다. 나머지 아키텍쳐, 권한 등은 선택하지 않고 아래로 내려 함수생성을 눌러주면 10여초뒤 함수가 정상적으로 생성되서 아래와 같은 화면이 보입니다.

기본코드는 아래와 같이 200 statusCode에 body는 Hello from Lamda라고 리턴을 하고 있네요.

다시 돌아가 API Gateway 화면에서 Lambda 함수 빈칸에 booksPost 쓰고 저장을 눌러줍니다. 그러면 권한을 부여한다고 나오며 확인을 눌러줍니다.

확인을 누르고 나면 아래와 같이 메서드 요청, 통합요청, 통합응답, 메서드 응답이 나오는데요, 이는 요청이 들어오면 어떻게 처리할지, 응답은 어떻게 할지 등에 대해서 정할 수 있습니다. API Gateway 안에서 테스트도 가능합니다.

여기까지 잘 따라오셨나요? 이제 각 항목별로 설정하는 것을 진행할텐데 요약하면 아래와 같으니 예습차원에서 한번 읽어봐 주시고, 관련해서는 다음 시간에 스텝바이스텝으로 이어서 다루도록 하겠습니다.

Parameter 지정

파라메터의 종류는 경로 요청 파라메터, URL 쿼리 문자열 파라미터 그리고 요청본문으로 구분 합니다.

Request 검사

Client로 부터 오는 요청은 정상적인 포맷의 요청인지 정의된 규격에 맞게 필수 파라메터 또는 본문이 존재하는지 등에 대한 검사도 일부 대신할 수 있습니다. 물론 Capability와 같이 숫자의 범위를 지정하는 등은 할 수 없겠지만 숫자가 와야하는데 문자열이 온다던지 하는 기본적인 400 에러케이스는 검사하여 서버 구현체 까지 가지않고 리턴할 수 있습니다.

Return 설정

API에 대한 리턴은 굉장히 다양하게 정의되어 있습니다. 200 OK 뿐아니라, 201, 202 도 있고, 흔히 볼 수 있는 400, 401, 403, 404도 있구요. 그러다보니 이러한 리턴을 모두를 실제 서버 구현체에 하는 것보단 API Gateway에서 미리 걸러줄 부분들을 해준다면 개발효율 좀더 올라 갈 수 있습니다. 추가적으로 API Gateway에서 리턴을 처리한다는 것은 Lambda의 호출을 필요로 하지 않을 수 있기 비용면에서도 유리할 수 있습니다. 다만, API Gateway에서 리턴하는 형식과, 서버 구현체에서 리턴하는 형태의 포맷은 같아야 이를 받는 클라이언트에서는 혼돈이 없겟지요?

 

반응형
댓글