codestates / codestates/SoundBubble

[Dev_Log] 8/12 (목) 김재우

Open
#72 0 comments 0 reactions 1 assignee Claimed by @idenk View on GitHub
Dev-Log
Dominant language
TypeScript
Stars
3
Forks
2
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?
구글 소셜 로그인 기능을 추가했다. 퍼스트 프로젝트와 다르게 이번에는 구글이 공식적으로 지원하는 라이브러리를 이용하여 구현해보았다. 사용자 인증 로직도 수정하였는데, 구글 토큰으로 사용자의 정보만 가져오고 이후에는 직접 JWT 토큰을 생성하여 보다 편리하게 클라이언트 - 서버 간 사용자 인증을 할 수 있도록 하였다.

그리고 람다 함수를 생성하여 S3 리소스 서버에 연결하고, original 폴더에 이미지가 업로드되면 자동으로 리사이징하여 thumb 폴더에 업로드하도록 구현하였다. 여유가 된다면 좀 더 람다에 대해 학습하고 람다 엣지를 사용해보고 싶다.

### 오늘의 프로젝트에서 배운 점은 무엇인가요?
* 구글 소셜 로그인 라이브러리 사용법

구글 소셜 로그인 라이브러리 google-auth-library를 이용하여 클라이언트에서 건내준 Authorization Code를 이용해 간단하게 사용자의 구글 프로필 및 이메일 정보를 가져올 수 있다. 발급된 토큰에는 Access Token이나 Refresh Token과 함께 Id Token 또한 제공되는데, Id Token을 검증해서 사용자의 정보를 가져왔다.

```js
const googleClient: OAuth2Client = new OAuth2Client(googleClientId, googleClientSecret, redirect_url);

const response: GetTokenResponse = await googleClient.getToken(authorizationCode);

if (!response.tokens || !response.tokens.id_token) {
return res.status(400).json({ message: "Invalid code(body), failed to get token" });
}

const idToken: string = response.tokens.id_token;

const ticket: LoginTicket = await googleClient.verifyIdToken({ idToken: idToken });
const googleUserInfo: TokenPayload | undefined = ticket.getPayload(); // 구글 이메일, 프로필 정보
```

* 람다 함수

AWS 람다를 사용하여 이미지를 리사이징 하는 것으로 서버에 주는 부하를 줄이려고 시도해보았다. 람다는 특정 이벤트가 발생되었을 때 람다 함수를 실행하는 방식으로 동작하는 서버리스 아키텍처이다.

우선 람다에서 실행할 함수를 VS code에서 작성한다. 작성한 함수를 업로드하기 위해 AWS에서 람다 함수를 생성하며 S3에 접근할 수 있는 권한을 지정한다. VS code에서 작성한 함수를 압축하여 AWS의 람다에 업로드하고, 런타임 설정으로 실행될 핸들러의 경로를 지정한다.

람다 함수가 사용하는 npm 모듈은 계층(Layer)에 업로드한 뒤에 람다 함수와 연결한다. 그리고 테스트 이벤트를 통해 올바르게 람다 함수가 동작하는 것을 확인했으면, 리소스 서버인 S3의 ObjectCreated 이벤트를 등록하면 끝이다.

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?
* [ ] 서버 응답 상태 코드 및 메시지 수정

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.