AWS Lambda와 API 게이트웨이(Rest API)를 통해 게시판의 서버 프로그램을 만들어보는 실습을 하려고합니다.
API는 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 API라고 합니다.
Lambda 함수 생성
API를 만들기전에 Lambda 함수를 먼저 생성해줘야하는데, 웹서버를 개발할때 Nodejs를 가장 많이 사용하기 때문에 Nodejs를 이용해 Rest API를 구축해보려고 합니다.
해당 코드는 클라이언트의 메소드의 종류에 따라 응답하는 코드입니다.
클라이언트의 요청에 대한 정보는 event에 담기게 되고, operation을 통해 GET 방식, POST 방식 그외 방식을 switch 구문으로 분류해줍니다.
REST API 설정하기
게이트웨이 API 생성으로 REST API를 선택해준뒤 API 이름을 설정해준뒤 API를 생성해줍니다.
API를 생성해주면 어떠한 리소스도 생성되있지 않는데, 리소스를 생성해줘야합니다.
board라는 리소스를 생성해줬고, 메소드를 통해 아까 정의해주었던 post 방식과 get방식을 만들어줘야합니다.
아까 만들었던 Lambda 함수의 이름을 넣어주고 GET 방식으로 저장을 해줍니다.
이때 Lambda 프록시 통합 사용 버튼을 반드시 눌러줘야합니다.
- 정상적으로 API Gateway를 거친 사용자의 요청이 람다의 event라는 파라미터에 담겨서 get 방식인지 post 방식인지 알아내 처리할 수 있게 해줍니다.
메소드를 만들어주면 해당 메소드 작업을 통해 API를 배포해주어야 합니다.
스테이지 이름은 간단하게 실습한 날짜를 토대로 만들어주었습니다.
POST 방식 또한 동일하게 위와 같이 진행해주면 됩니다.
이제 람다 함수로 넘어가면 API Gateway가 연결되있는것을 확인할 수 있고, 엔드포인트를 통해 웹 서버를 연결해볼 수 있습니다.
API Testing 사이트를 통해 API Test를 통해 정상적으로 출력됨을 알 수 있습니다.
웹 클라이언트에 접속하기
하나의 폴더에 html 파일을 만들어, 간단한 버튼을 눌렀을 때, GET 함수를 출력해주는 html파일을 만들어 줍니다.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<input type="button" value="GET" onClick="get()"/>
<script>
const URL = "https://5dmyn4nyq2.execute-api.ap-northeast-2.amazonaws.com/2023-04-26/board";
function get(){
fetch(URL, {
headers: {
'Accept' : 'application/json'
}
}).then(res => res.json())
.then(data =>console.log(data))
.catch(err => console.error(err))
}
</script>
</body>
</html>
해당 URL은 API 게이트웨이 GET 메소드의 엔드포인트 주소입니다.
처음 GET 버튼을 실행하면 console창에 에러가 찍힐 것입니다.
- 웹 브라우저를 실행해서 특정한 웹페이지에서 URL에 접속하거나 정보를 받아오도록 개발하면 현재 리소스와 요청 하는 URL의 리소스와 다르기 때문에, 보안적인 문제가 발생하여 접근을 제한하게 됩니다.
보안 제한을 약화시켜 정상적으로 기능이 작동하도록 만들어줘야 하는데,
API Gateway의 GET방식에서의 동작을 통해 CORS를 활성화 시킨 후, 재배포 시켜 줘야합니다.
또한, 이전에 작성해둔 Lambda 함수의 코드에서 header 항목에 모든 항목에 접근을 정상하겠다는 코드를 작성해야 하는데, 'headers': {'Access-Control-Allow-Origin': '*'} 처럼 나타내줘야합니다.
다시 해당 GET버튼을 클릭하여 콘솔창을 보면, 정상적으로 서버 API에 접근해서 데이터를 받아와서 콘솔창에 출력해주는 것을 알 수 있습니다.
본 실습은 나동빈님의 영상을 참고하였습니다.
'Cloud' 카테고리의 다른 글
Aws EC2에서 Filezilla 연결하기 (0) | 2023.05.04 |
---|---|
aws ec2 환경에서 Chrome,ChromeDriver,Selenium 설치하는법 (0) | 2023.05.04 |
AWS Lambda 공통 라이브러리 관리하기 (0) | 2023.04.25 |
AWS Lambda 활용해서 크롤링 봇 만들어보기 (0) | 2023.04.25 |
[AWS] EC2 인스턴스로 끄투 서버 구축해보기 (0) | 2023.04.21 |