본문 바로가기

lambda

(7)
서버리스 GraphQL 백앤드 구축 서버리스 프레임워크 초기화 및 AWS에 연결 포스트에서 생성한 서버리스 설정값을 사용하여 람다 함수를 배포할 것입니다. 1. 서버리스 프로젝트 생성 npx serverless create --template aws-nodejs --path instagureng-backend 2. 패키지 설치 GraphQL API 관련 패키지 npm install apollo-server-lambda graphql 테스트용 패키지 배포하기 전에 로컬 서버 3000포트로 미리 테스트할 수 있도록 해주는 패키지입니다. npm install serverless-offline --save-dev 3. handler.js schema는 typeDefs, resolvers 객체를 포함하는 객체입니다. Prisma와 ID 토큰 관련 ..
서버리스 GraphQL 백앤드 구성 GraphQL이 무엇인지는 구글에서 쉽게 찾을 수 있으니 생략하겠습니다. 추천: 나의 첫번째 GraphQL서버 만들기 이번 포스트에서는 AWS 람다를 사용해서 GraphQL 백앤드를 구축하는 방법에 대해 알아보겠습니다. 노마드 코더님의 인스타그램 클론코딩 강의에서는 GraphQL 서버를 만들기 위해서 graphql-yoga 모듈을 사용했습니다. graphql-yoga는 Node.js에서 GraphQL 서버를 쉽게 설정할 수 있도록 도와주는 Node.js 모듈입니다. 하지만 graphql-yoga 모듈은 항상 동작하고 있는 서버에서만 사용할 수 있습니다. 평소에는 유휴(Cold) 상태로 있다가 사용자 요청이 입력되면 활성화(Warm)되는 AWS 람다 서버에서는 작동하지 않습니다. AWS 람다 서버에서 Gr..
AWS Lambda 핸들러 구조 handler.js exports.handler = function(event, context, callback) { try { modify(event); // event 객체 변형 } catch(e) { console.log(e); callback(new Error("Something went wrong.")); // 오류 발생 } callback(null, event); // 작업 성공 } event 호출자로부터의 정보가 포함된 객체입니다. 요청자가 입력한 파라미터가 포함되어 있습니다. callback AWS 람다 핸들러는 리턴을 하지 않습니다. 대신 매개값으로 전달받은 callback 함수로 다음 단계로 넘어갑니다. 첫 번째 매개변수에 오류 객체가 입력되어 있으면, 다음 단계에서 오류를 반환합니다...
[인스타그램 클론코딩] Cognito Pre-SignUp 람다 함수 서버리스 설치 후 서버리스 프로젝트를 생성해 줍니다. 참고: 서버리스 프레임워크 초기화 및 AWS에 연결 npx serverless create --template aws-nodejs --path beforSignUp 인라인 편집기를 사용하지 않는 이유는 무엇인가요? Cognito와 GraphQL 서버인 백엔드에 접속하기 위해서 aws-sdk와 graphql-request 모듈을 설치하기 때문입니다. GraphQL 요청은 모듈을 사용하지 않고 어떻게든 보낼 수 있는데, aws-sdk는 Cognito User Pool에 접속하기 위해서 필수입니다. 그래서 GraphQL도 그냥 모듈을 사용했습니다. 외부 모듈을 설치하려면 인라인 편집기는 사용할 수 없습니다. yarn add aws-sdk graphql-re..
AWS Amplify란? Amplify가 뭔가요? AWS Amplify는 안전하고 확장 가능한 모바일 및 웹 애플리케이션을 구축하기 위한 개발 플랫폼입니다. 쉬운 사용자 인증, 안전한 데이터 및 사용자 메타 데이터 저장, 데이터에 대한 선택적 액세스 권한 부여, 또한 기계 학습을 통합하고, ... 출처 : https://aws.amazon.com/ko/amplify/ AWS 공식 홈페이지에 나온 설명입니다만, 너무 추상적입니다. 제 나름대로 정의하자면 다음과 같습니다. EC2, RDS, Cognito, Lambda 같은 독립적인 서비스는 아니다. Amplify CLI로 다수의 독립적인 서비스를 자동으로 생성하고 연결해 준다. 프로젝트 내에서 Amplify 객체로 생성된 AWS 서비스에 접근할 수 있다. 예를 들어보겠습니다. Am..
[인스타그램 클론코딩] API 인증 구조 사용자 데이터를 처리할 백엔드(Back-End)는 누구나 사용할 수 있는 API와 로그인한 사용자가 사용할 수 있는 API를 구분하여 처리할 수 있어야 합니다. 사용자가 AWS Cognito에 로그인하면, Cognito는 ID, Access, Refresh 토큰을 발급해 줍니다. ID 토큰은 Cognito에 가입한 사용자 정보를 암호화한 문자열이고, Access 토큰은 해당 Cognito 풀에 가입한 사용자의 권한을 암호화한 문자열입니다. 마지막으로 Refresh 토큰은 ID 토큰과 Access 토큰을 갱신하기 위해 사용합니다. 갱신은 AWS Amplify가 Refresh 토큰을 사용하여 자동으로 관리해 주기 때문에 신경쓰지 않아도 됩니다. 그리고 클라이언트(앱, 웹)에서 로그인한 사용자 정보를 사용하여..
[인스타그램 클론코딩] 회원가입 구조 사용자가 웹 또는 앱에서 회원가입을 하면서 성(First Name), 이름(Last Name), 이메일 등을 입력하면, 이 정보를 Amplify 모듈을 사용해 AWS Cognito에 보냅니다. Cognito에는 전달받은 사용자 정보를 승인하기 전에 개발자가 그 정보를 가로채서 수정할 수 있도록 Pre-SignUp 트리거를 제공합니다. 이 트리거에 전달받은 사용자 정보를 데이터베이스의 User 스키마에 저장하는 AWS Lambda 함수를 등록해 줍니다. Cognito를 통해 가입하면 사용자 정보가 Cognito에 저장되는데, 사용자 정보를 왜 다른 데이터베이스에 다시 저장하나요? 다른 데이터와의 연동때문입니다. 사용자로 부터 데이터만 생성되는 경우는 굳이 사용자 정보를 데이터베이스에 다시 복제할 필요가 없..