AWS 로그인 시스템을 만들어 보자. 아마 이게 이번에 3번째 복습일꺼다. 외국어 익히는 것도 마찬가지인데 최소 문법만 익히고 기본 구문을 익숙해 질때까지 반복하고 그 다음에 본격적인 이론을 배워야 한다. 일단 먼저 범위를 좁히고 반복하는 것이 핵심이다.
아무리 유니티로 싱글 게임을 만들어도 DynamoDB와 같은 데이터베이스에 저장하는 거랑 S3와 같은 저장소 파일다운로드 받는 법 정도는 알고 있어야 한다. 그래서 이것만 주구장창 반복하고 있다.
참고로 Node.js 18.x 버전이다.
한가지 이야기 하는거를 까먹었는데 이거는 연습을 하는 거라서 이렇게 다른 람다를 만들었고 실전에서는 람다 안에 여러 파일을 만드는 것이 효율적일듯 싶다. 늘 그렇듯 학습용 예제와 실전을 조금 차이가 있다.
이거 할줄 안다고 서버 개발자라고 하기는 머하지만 인디 레벨에서 실재 서버를 쓸일이 이거 밖에 없다. 내가 주로 턴제 게임을 만들다 보니 더 그렇다. 방치형 게임도 크게 다르지는 않을꺼다.
실시간 게임이라면 물론 이것보다 복잡하다. 성능도 신경을 써야 한다. 실시간 이야기가 나와서 하는 이야기 인데 서버를 블록체인으로 만들면 통신을 하는데 18초나 걸린다고 한다. 아마도 중앙서버를 두는 것과 달리 중복으로 저장을 하기 때문인거 같다. 아마 그래서 블록체인 기술을 써서 만들수 있는 게임은 제약이 크다.
지금 내가 염두해 두고 있는 서비스는 GameLift 서비스 인데 AWS 개발자로 넘어간 다음에 자연스럽게 넘어가는게 좋을듯 싶긴 하다. 이거는 공부할수 있는 레퍼런스가 조금 부족하다. 그래서 당분간은 S3나 DynamoDB같이 기본적인 서비스를 좀 써야 할거 같긴하다. 충분히 익숙해 지고 넘어간다. 언어는 Node.js로 정했다. 이거랑 Python이랑 해서 사실상 두 언어가 AWS의 메인 언어인듯 싶더라.
이미 원화나 클라이언트는 게임을 만드는 데 충분한 실력이다. 서버만 어떻게 해결하면 된다.
여튼 밥먹고 와서 시작하자.
밥먹고 자버렸다.
연습에 시간을 단축하기 위해서 씬은 저번에 만들었던걸 그대로 쓸 생각이다. 유니티에서 스크립트는 100줄 내외로 3개정도 나오고 Lambda도 써야 한다. 생각보다 작업 양이 많을수 있다.
요거 두개가 필요하다. AWS SDK는 S3와 업로드 하기 위해서 필요한 것으로 알고 있다.
씬명과 스크립트 네임스페이스를 일치시키는 방식을 쓴다. 아마 일반적인 방식은 아닐꺼다. 머 나름에 노하우이다.
씬은 이거다. 저번에 만들었던거 읽고 오도록 해야 겠다.
https://aigoia.tistory.com/1500
AWS 유니티 DynamoDB 복습
DynamoDB로 로그인 시스템을 만들어서 이미지를 S3에 올리고 내려 받는 것을 하면 될듯 싶다. UI는 다시 만들기 귀찮으니까 저번에 만든 씬을 재탕을 하도록 해야 겠다. 근데 이게 비밀 번호 시스템
aigoia.tistory.com
여기서 부터 보면 되는거 같다.
AWS가서 DynamoDB를 만들고 Lambda를 만들어서 서버에서 로그인을 처리하는 걸 만들고 API을 등록시켜서 유니티로 로그인과 로그아웃을 하는 것까지 만들어 놓으면 될듯 싶다. 그 다음에 S3를 연동을 하자.
라고 되어 있다. 유니티는 쫌있다 만지도록 하자. AWS 로그인 부터 하자.
아주 기본적인 서비스도 아직 연습이 덜 되어 있는데 레퍼런스가 적은 GameLift 서비스를 쓰는거는 어불성설인듯 싶다. 몇번을 더 반복을 해야 될지 모르겠다.
DynamoDB에 테이블을 하나 만들어주도록 한다.
람다는 요렇게 4개를 만들어 준다. 연습이라 4개를 만드는 거고 실전에서는 하나만 만들어도 충분할듯 싶다.
다이나모DB 클라이언트랑 립 그리고 람다에 클라이언트 그리고 암호화 모듈을 깔아주도록 한다.
기본적인 메카니즘은 json라는 편지지를 보내는 건데 그게 딜레이가 발생을 하기 때문에 Async라는거를 쓴다. 편지지를 보내는걸 event라고 한다. 콜백함수라는 개념이 있는데 용어가 콜 에프터 이러면 더 쉽게 이해가 되려나. 요청을 부른 다름에 발동하는 함수다. 이게 클라에서 서버로 넘어갈때 생소한 개념이 이거다.
6시간 작업했더니 졸립다. 일단 자고 일어나서 마저 하자. 이게 로그인 시스템에다가 S3까지 하면 한 3일은 걸릴꺼다.
여기서 Deploy를 눌러야 저장이 된다.
임포트한 기능들을 쓰기 위해서는 해당 클라이언트들을 상수로 선언을 해주어야 한다.
DB가 빠졌었다. 근데 LambdaClient가 빨간색으로 뜬다. 머가 문제일려나.
이게 AWS 서비스여서 그럴수도 있다. 특별히 문제될꺼는 없어 보인다.
잘 돌아가는지 중간중간 테스트를 해본다.
오타가 조금 있었다. 임포트 할때는 전부 소문자로 표기를 해야 한다. 이거 익숙해 질라면 좀더 연습을 더 많이 해야 하는지 모르겠다.
요렇게 하고 테스트 해 봤는데 문제없이 잘 작동한다.
기본리퀘스트를 만들어 보자. 아 그리고 요세 자바스크립트는 ; 안넣어도 되나 싶기도 하다. 한번 테스트를 해보자.
안넣어도 상관없다. 그런 안넣는걸로 통일하도록 한다.
그 다음으로 Dynamo에 저장하는 거를 테스트를 해보자.
이게 벡엔드 개발자를 밤에 삘받아서 지원을 했는데 두 회사를 중고 신입으로 서류를 통과해 부렀다. 게다가 코딩 테스트를 C#으로 해도 된다고 배려까지 해줘가지고 큰일났다. 한 AWS를 연습을 10번 이상은 하고 가야 할듯 싶다. 그래야 실전에서 버벅거리지 않을꺼 같긴 하다. 나름 기회일지도 모르겠다. 취업에 폭이 넓어 진거일수도 있다.
그 다음이 다이나모디비에 이메일을 저장을 하는 거를 테스트를 해보자. 코딩은 한번에 다 짜려고 하면 안되고 순차적으로 하나하나 테스트를 해보면서 진행을 해야 한다. 퍼트 비슷한 사고가 머리속에서 그려져야 한다. 일종에 이산수학적인 방식인데 이게 안되면 작업이 안된다.
이메일 유저네임 패스워드를 입력을 해준다. 다이나모디비에서 세딩을 해줘야 하는지 모르겠다. 가서 확인을 해보자.
유저네임으로도 찾아 들어갈수 있도록 해준다.
람다에서 DB로 접근해 들어가는거 권한설정을 아마 최소 권한 설정으로 해줘야 할텐데 일단 공부하는 거라 그냥 풀어세스로 해주도록 한다.
보통 클라이언트에서는 try catch 문법을 잘 쓰지는 않는데 서버에서는 꽤 많이 쓰는듯 싶다.
리스판스 바디부분을 조금 설명을 해야 할꺼 같다. await은 이게 서버간 통신을 할때는 유니티에 코루틴과 같은 것이 필요해서 넣는 거다. 이걸 안넣으면 통신을 할때 기다려 주지 않는다. 그리고 편지지를 보내는 거랑 유사하기 때문에 send라는 명령어를 쓴다. 그리고 명령을 new로 새로 생성된 객체를 보내주는 거다.
잘 모르겠으면 요청을 보낼때는 이렇게 하는 구나 하고 그냥 보고 하면 된다.
요렇게 오면 잘 온거다.
서버가 좀 어려울 수가 있는데 그래도 천천히 따라오면 할수 있다. 인디 게임 만들려면 최소한 이정도는 해야 한다. 이거 보다 더 어려운 서버 업무는 게임 서버 프로그래머를 따로 구해야 할꺼다. 집 컴퓨터에 리눅스로 서버를 만들어서 하는건데 그거 시도 해봤다가 컴터가 날아가 버렸다. 추측컨데 보안설정이 미미해서 그런듯 싶다.
AWS 그런 일은 안일어 나서 좋다.
이메일 체크 함수를 만들어야 하는데 생각해보면 이거를 구지 다른 람다 함수로 만들 필요까지는 없을꺼 같긴 하다. 그냥 람다안에 별도에 스크립트로 해도 될꺼 같긴한데 일단은 연습하는거니까 다른 람다를 불러 오는 식으로 하자. 실재로는 이렇게 할 필요는 없을꺼 같다.
일단 그 다른 스크립트에 함수를 호출하는 법을 확인을 해봐야 할듯 싶다. 유니티에서 하는 방식과 조금 다를수가 있다. 글고 보니까 C#도 유니티에서 말고 그냥 C#에서 다른 스크립트에 함수를 호출하는 법을 잘 모르고 있는듯 싶다.
밥먹을 시간 된거 같으니까 밥먹고 와서 마저 하자.
아 C#의 경우에는 같은 네임스페이스 내에 있으면 구지 다른 클래스를 불러오는게 어렵지 않다.
이런식으로 가능하다. 자바스크립트는 어떤 방식인지 확인 해보자.
자바스크립트는 C#에서 네임 스페이스 임포트 하는 방식에 다가 익스포트도 함수나 변수 형태 모두 가능하고 불러오고 싶은 것도 정할수가 있다.
실재로는 Lambda를 여러개 만드는 것이 아니라 이런 식으로 스크립트를 여러개를 만드는 방식을 써야 비용을 절약할수 있을듯 싶다.
근데 이게 자바스크립트가 원래 함수형 언어처럼 생겼었나 싶다.
다큐먼트 불러오는거는 이름을 from으로 하는듯 싶다.
이메일을 체크할 람다를 만든다.
조금 공을 들이더라도 약어를 쓰지 않고 그대로 코드를 읽으면 어떤 일을 하는지 알수 있도록 짜야 하는게 중요하더라.
문법에러가 뜨네 머가 문제일까?
Command인데 계속 실수를 한다. 아 그리고 접근 허가 에러가 뜬다. 접근 할수 있도록 손을 보자.
체크하는거니까 ReadOnly만 줘도 될듯 싶다. 이게 클라이언트와 달리 서버는 너무 신경을 쓸게 만다. 최소 권한 설정같은게 그렇다. 이거 Json으로 편집하는 것도 있던데 그것까지 하려면 AWS만 파야 할꺼 같긴 하다. 일단은 그정도 까지 공부하는 것은 보류다.
이걸 잠깐 언급하고 넘어가야 하는데 저기가 Item이라는 형태로 결과값을 반환한다.
프론트에 기초가 계시판 만들기라고 알고 있는데 벡앤드에 해당하는게 로그인거 같긴하다. 유니티 보통 처음 배우면 많이 하는게 스페이스 슈터였나? 아마 그런 느낌이긴 하다.
Playload라는 개념이 나오는데 수하물이라고 생각하면 된다. 편지가 아니라 택배를 보내는 거다. 저기에는 유저가 인풋한 내용들이 들어가 있다.
이제 받아온 결과를 확인해야 이부분이 익숙한 형태로 오지 않아서 고생했었다.
http://gnipbao.github.io/2017/11/15/Uint8Array-to-string/
Uint8Array to string in Javascript
Little strings少量数据使用超出异常123456789/** * little arrays (>=100k characters), otherwise you'll get exceptions as RangeError : Maximum call * stack size exceeded or Out of stack space. * @returns
gnipbao.github.io
이게 string이 아니라 uint8이라는 배열을 뱉었기 때문이다. 이걸 string으로 바꿔주고 그 string을 다시 JSON으로 바꿔줘야 한다.
요청을 주고 받을때는 await을 해야 하는걸 계속 깜박한다. 잘 되는지 확인을 해봐야 겠다.
그 인보크도 권한이 필요하다고 뜬다.
람다로도 접근이 가능하도록 해야 한다. 둘다 해주어야 문제가 안생긴다.
이부분에서 다시 문제가 생기는듯 싶다.
일단 여기서 코드를 보다가 await이 빠졌길래 넣었다.
아 그 함수 이름을 소문자로 시작해야 하는데 대문자로 해놓았었다. 실수다. 이게 에러 메세지가 뜨면 에러 메세지를 차근 차근 읽으면 해결될때가 많다.
이메일 체크까지 완료다. 이게 보니까 예전 내용이 이리 저리 흝어 있어서 보기가 힘들다. 이 포스트 한번에 모든 내용을 담아야 할듯 싶다.
https://aigoia.tistory.com/1501
AWS 유니티 Lambda 복습
오늘은 람다 관련해서 유저네임으로 알아보는 키가 아닌 값으로 검색해서 들어가는 거정도 만들고 시간이 남으면 유니티 작업까지 해서 DynamoDB는 끝내도록 한다. 내일은 이렇게 만들어진 로그
aigoia.tistory.com
그 다음은 키로 체크해서 들어가는 것이 아니라 값으로 검색해서 들어가는걸 만들어야 한다. 잠깐 쉬었다가 마저 하자. 일요일에는 코딩 테스트 과제 온걸 해야 한다. 그래서 최대한 오늘 진도 뺄수 있는데까지는 빼놓아야 내일 좀 쉬고 모래 코딩 테스트를 할수 있을듯 싶다.
새로 생성을 할때 기존 정책을 불러와서 등록을 하면 편하다.
공부가 끝나면 코드는 깃에 올리고 AWS에 있는건 다 지워야 할듯 싶다.
https://github.com/aigoia/LogInAWS/tree/master
GitHub - aigoia/LogInAWS
Contribute to aigoia/LogInAWS development by creating an account on GitHub.
github.com
작업물은 여기 올려 놓는다.
내 기억이 맞다면 여기 쿼리 커맨드를 검색하는게 꽤 어려울 꺼다.
일단 테이블 네임과 인덱스 네임이 필요할듯 싶다.
그 다음이 문제인데 이거는 공식 문제를 읽고 어떻게 하는 건지 알아낸거다.
이건 그냥 외우고 넘어가야 할듯 싶다. 아 그리고 ? 이거를 사용하는 형태로 바꾸도록 한다. 코드는 깔끔할수록 좋다.
QueryCommand | @aws-sdk/client-dynamodb
New API Documentation - Developer Preview Available We are excited to announce the developer preview of our new API documentation for AWS SDK for JavaScript v3. Please follow instructions on the landing page to leave us your feedback. Hierarchy Index Const
docs.aws.amazon.com
여기에 해당하는 영문문서는 이거다.
잘되는지 정도 확인하면 될듯 싶다.
깜박하고 로그인에 넣었더라. 이제 암호화를 하고 로그인 메카니즘을 만들면 될듯 싶다. 그 다음에는 유니티에서 하는 작업이 남아 있다.
이게 다인가 보다. 이제 유니티에서 연동하는걸 만들어야 겠다. 그거까지 문제없는게 확인이 다 되면 람다랑 데이터랑 해서 다 삭제하도록 한다.
'프로젝트' 카테고리의 다른 글
자바스크립트 테스트 (0) | 2023.05.06 |
---|---|
유니티 로그인 시스템 AWS DynamoDB (0) | 2023.05.06 |
AWS 요금 3000원 나왔다 (0) | 2023.05.03 |
창의인재 멘티모집사업 홍보 (0) | 2023.05.02 |
블록체인을 공부중이다 (2) | 2023.05.01 |
WRITTEN BY