Code States/회고

Section 1. 프로젝트 - WAS, Web Server 실습

ki1111m2 2023. 4. 5. 12:54
2023.04.03-04.05

첫 번째 프로젝트가 끝났습니다 👏

 

일차별 작업 진행 사항은 TIL로 정리하였기 때문에, 해당 회고에서는 변경점이나 트러블슈팅 등을 기록합니다!

(TIL 링크: Day 1 Day 2)


프로젝트 소개

프로젝트 주제는 LMS(학습 관리 시스템)였다.

작업 목표는 데이터베이스를 설계하고 그에 따른 ERD를 작성한다. 주어진 최소 요구사항을 만족하는 API를 디자인하고, fastify를 사용해 웹서버를 구현하여 작성한 API가 잘 작동되는지 확인하는 것이다.

 

진행 일정
  • Day 1: DB 설계, 주제 분석, ERD 및 API 문서 제작
  • Day 2: fastify 프로젝트 생성 및 DB 연결, DB 구성 및 서버 연결, API 문서에 따른 서버 구현
  • Day 3: 프로젝트 잔여 업무 진행, 구현 사항 제출, 회고 작성

ERD 디자인 변경

처음 데이터베이스를 설계했을 때에는 3개의 테이블로 작성했다. 요구사항을 봤을 때 유저 테이블 안에서 강의자와 강의자가 아닌 사용자로 구분되어야 할 것 같았기 때문이다.

그러나 첫 날 발표시간때 강의자를 나눠서 만든 팀이 있었는데, 엔지니어님이 괜찮다고 한 걸로 보아 나눠도 요구사항에 위반되지 않겠다는 결론을 내렸고 우리 조 또한 나누게 되었다.

 

DB와 연동 안되는 문제 발생

강의록의 내용을 따라 서버와 DB를 연동하였는데, GET 요청시 500번과 503번 에러가 발생했다.

 

postgress.js 파일과 .env 파일 등을 확인했을 때, 서버와 접속문제는 아니었다.

DB값이 잘 들어갔는지 확인하기 위해 elephantDB에서 확인해보았을 때, 데이터는 정상적으로 들어가있었다.

 

본문 또한 오타 없이 작성되었고, 엔지니어님과 함께 보았을 때도 잘못된 점을 찾지 못했다.

const client = await fastify.pg.connect()
try {
	const { rows } = await client.query(
	'SELECT * FROM USERS'
	)
	reply.code(200).send(users)
} finally {
	client.release()
}

머리를 비우고 다시 한번 찬찬히 보았더니, 문제점이 눈에 들어왔다.

3번째 줄에서 값을 rows로 받기로 해놓고, 6번째 줄의 reply에서는 users로 넘긴 것이 문제였다.

서버 실행 시 코딩 오류도 안나고, 이미 머릿속은 서버문젠가 디비문젠가 등으로 가득 차있어서 무엇이 문제인지 찾는데 한참 걸렸다.

 

token 생성하기

PUT과 POST, DELETE의 경우, 사용자의 권한을 인증시켜야 한다.

 

이를 위해 토큰 방식을 이용하는데, 이번 프로젝트는 백엔드와 프론트엔드를 완벽히 구현시키는 것은 아니기때문에 간단한 방식으로 토큰을 대체하기로 했다. 코딩을 하여 토큰값으로 aaa가 들어왔을 때는 1, bbb가 들어왔을 때는 2 등으로 값을 부여하여 해당 값일 때만 작동하도록 구현하는 것이다.

 

강의록을 따라 구현해보았으나 오류가 발생했다.

tokenValidator: async (token) => {
	let result;
    if(token === 'aaa'){
    	result = 1;
    } else if (token === 'bbb'){
    	result = 2;
    }
    return result
}

실행 오류가 발생하였고, 무엇이 문제인지 몰라 chatGPT의 도움을 받아 코드를 수정했다.

const tokenValidator = async (token) => {
    let result;
    if(token === 'aaa'){
    	result = 1;
    } else if (token === 'bbb'){
    	result = 2;
    }
    return result
}

실행은 되었으나, 이번엔 설정한 토큰값(aaa)이 아니어도 동작이 가능하다는 문제점이 발생했다.

토큰 값이 제대로 전달되는지 확인하기 위해 console.log를 사용하여 출력해보았으나, token과 result 모두 undefined로 값을 입력받지 못하는 것을 확인했다.

 

우리의 힘으로 해결할 수 없을 것 같아 엔지니어님의 도움을 받았다

우리는 POST 본문에서 if문을 사용하여 구현했는데, 엔지니어님은 try-catch문을 사용해보는 방법을 제시해주셨고, 해당 방법으로 구현해보았으나 여전히 같은 상황이 발생했다.

 

이 외에도 엔지니어님께서 여러가지 방법으로 시도하셨지만, 여전히 같은 문제가 발생했고, 무엇이 문제인지 알 수 없다는 결론이 나와 이번엔 토큰 구현 없이 동작만 하도록 구현하기로 했다.
다른 조들은 토큰 구현을 성공했는지 여쭤봤더니 다른 조들도 토큰 구현은 건너뛰기로 했다고 한다.


첫 프로젝트기 때문에 두려움 반, 떨림 반이었는데 생각보다 잘 마무리된 것 같아 뿌듯하다.

진행 일정에 맞추어 프로젝트를 잘 진행했다! 밀리는 것 없이 계획된 시간에 계획된 내용을 다 끝냈고, 잔여 업무 또한 발생하지 않았다. ✌️

엔지니어님께 도움받을 일이 있어 질문을 하다가, 우리 조가 1등(?)이라는 소리를 듣고 아주 아주 !! 뿌듯한 마음을 가지고 작업했다.

우리 조는 뭔가 빠르게? 끝나는 기분이어서 우리가 뭔가 놓치고있나.. 뭔가 잘못하고있나.. 생각했는데, 발표시간에 보니 그건 아닌 것 같았다. 우리 조.. 꽤나 똑똑할지도..