위코드 1차 프로젝트 회고록

2023. 10. 20. 22:51개발

1.  프로젝트 소개

인스타, 쓰레드처럼 웹페이지에 글을 남길 수 있는 SNS 홈페이지 만들기

 

2.  프로젝트 사용 기술

javascript, node js

 

3. 내가 맡은 역할

 

백엔드 역할을 맡았다.

프론트 3명 백엔드 3명이서 진행

 

구현해 본 기능

 

회원가입 데이터를 받아서 비밀번호 암호화 후 mysql에 저장

사용자 로그인 데이터를 token 인증 후 로그인 

전체 게시물 보여주기

특정 사용자 게시물 보여주기

token 인증된  사용자 본인 게시물 수정

token 인증된 사용자 본인 게시물 삭제

좋아요(token 인증기능 없음)

좋아요 취소(token 인증기능 없음)

 

 

git 링크 : https://github.com/wecode-bootcamp-korea/50-1st-E-Backend/tree/feature/junseok

 

4.   이해하기 어려웠던 기술

일단 body에서 받은 패스워드를 bcrypt로 해싱하여 저장하는 로직은 문제없이 이해했지만

이후 해싱된 비밀번호를 사용자에게 토큰 형식으로 내주고 그 토큰에 포함된 유저 정보를 이용하는 것을

이해하는 것에 큰 애를 먹었다.

const payLoad = { email: email, user_id: dataBaseUserId };
console.log(payLoad)
const secretKey = process.env.SECRET_KEY;
const jwtToken = jwt.sign(payLoad, secretKey);

도대체 npm 공식 문서에는 토큰 payLoad에는 foo:bar가 담기며 도대체 이 토큰에 개인 정보를 담아서 인증을 할 수 있는지 처음 이 개념을 들었을 때는 대혼란이었다.

 

글을 읽으면서 공부하는 것보다 실제로 이루어지는 과정을 보면서 공부하는 것이 이해가 더 잘될까 싶어 유튜브 예시 영상들을 참고하여

foo:bar 대신 body 값으로 들어오는 유저의 정보를 넣으면 

header + payLoad + (header+payLoad)가 사용자 고유의 토큰 값이 된다는 것을 알게 되었다.

그렇게 이해한 후 header 값에는 다른 알고리즘 정보를 payLoad 값에는 토큰 유효 시간도 넣어 더욱 보안성 있는 토큰을 만들 수 있다는 사실을 알게 되었다.

 

그 이후 사용자가 가지고 온 토큰을 인증하는 코드인데

const verifiedToken = jwt.verify(frontToken, secretKey);
const verifiedId = verifiedToken.user_id
const userData = await appDataSource.query(`
insert into threads (
user_id,
content
)values (
'${verifiedId}',
'${content}'
)
`)
console.log(userData)
return res.status(200).json({ 'message': 'postCreated!' })
} catch (error) {
return res.status(500).json({ 'message': '사용자가 일치하지 않습니다!' })
}

토큰 만드는 것 이해하는 것도 이렇게 어려운데 과연 그것을 분리해서 인증하는 것은 얼마나 어려울까? 생각했지만

생각보다 큰 문제없이 이해하고 코드를 작성하게 되어 나 혼자 낄낄 되며 웃었던 것 같다.

 

5.  프로젝트가 끝나고...

 

 

역시 어떤 분야든 기술을 배우고 사용한다는 것은 수많은 노력과 고통을 수반한다.

코드를 짜고 그다음 날 나의 코드를 보면 이해하기가 너무 힘들었다.

팀원이 나의 코드를 보면서 엄청 더럽고 이해하기 어려웠을 것 같다. (죄송하다)

또한 api를 다 구현해 놓고 postMan을 이용하여 확인해 봤지만 팀원과의 연결은

실패의 연속...

결국에 연결에 성공하기는 했지만 항상 나의 코드를 믿을 수 없고 불안하고 더 발전시키고 싶었다.

 

내가 다음 프로젝트에서 발전시키고 싶은 부분은

 

첫 번째 내가 담당하게 될 api 기능을 다양한 기술로  효율적이고 가독성 있게 짜기 위해 노력하는 것

두 번째 코드를 정확하고 지금보다는 빠르게 리펙토링 하는 것

세 번째 기능에 따라 코드를 나누고 위의 사항들을 진행하는 것

마지막으로 불안해하지 않고 주어진 상황과 문제해결에 집중하는 것

 

2차 프로젝트 화이팅!!

 

❗️안다고 생각하는 것은 사실 모르는 것이니 항상 겸손하며 끊임없이 학습해야 한다.❗️

 

 

 

 

 

 

 

 

 

 

'개발' 카테고리의 다른 글

git hub 공부  (0) 2023.11.22
2차 프로젝트 회고록  (0) 2023.11.05
mysql 에 대하여 1-2  (0) 2023.10.15
my sql 에 대하여 1-1  (0) 2023.10.14
2년만에 돌아온 개발일지  (1) 2023.10.05