본문 바로가기
Project 1

Project 1 : WAS 실습 회고

by Jackykim 2023. 4. 5.

Achievement Goals
- API
문서를 작성할 수 있습니다.
- Fastify
를 이용해 DB와 통신하는 서버를 만들 수 있습니다.
- PostgreSQL
을 이용하여 DB를 구성할 수 있습니다.
- GitHub
을 활용하여 팀원들과 협업합니다.

 

제작 범위 및 기술 스택
1. 백엔드를 만듭니다.
   - Fastify
를 사용합니다.

2. 데이터베이스를 사용해야 합니다. , 데이터 모델을 디자인해야 합니다.
3. Entity-Relationship Diagram (ERD)
을 그려야 합니다.
   - https://dbdiagram.io/home
4. API
문서를 만들어야 합니다.
   - Method, Endpoint, Request, Response
가 예시와 함께 포함되어야합니다.

 

참고 마일스톤
Day 1
-
리소스에 대한 데이터 모델링
- ERD diagram
완성
- API
명세 완성

 

Day 2
- Fastify
로 프로젝트 시작
   npm install / npm run dev
를 통해 서버 실행 테스트
-
브라우저 or Postman을 통해 경로 조희 확인
- Database Connect
확인
   ElephantSQL
에서 인스턴스 생성 후 플러그인 적용

   ElephantSQL 데이터에 연결해서 서버기능 확인

 


LMS 요구사항 

- [v] 사용자는 모든 수업을 조회할 수 있다   
- [v]
사용자는 특정 분류의 수업을 조회할 수 있다(강의자, 수업명, 수업분류)   
- [v]
사용자는 수업을 수강신청 할 수 있다   
- [v]
사용자는 모든 수강중인 수업을 조회할 수 있다
- [v]
사용자의 타입이 강의자일 경우 새로운 수업을 생성할 수 있다   
- [v]
사용자의 타입이 강의자일 경우 수업의 정보를 변경할 수 있다
- [v]
사용자는 수업에 대한 수강신청을 취소 할 수 있다

 


DataTable

 

ERD / API 작성전 Database 구현

ERD

 

 

수강신청 ERD 구현

Students : 수업 / 수강신청 할려는 학생 정보 

Parameter / Value 는 Student ID, Email 주소로 구성 

Student ID는 Registration Student ID 와 1:N 관계로 Registration에 있는 강의들을 GET method으로 조희 및 POST Method 으로 강의들을 신청 할 수 있습니다. 

 

Professors : 강의자의 정보

Parameter / Value 는 Professor ID, Email 주소로 구성

Professor ID는 Lectures table 와 1:N 관계로 Lecture에 있는 강의들을 GET method으로 조희 및 POST Method 으로 강의들을 생성 / Delete Method으로 강의를 삭제 할 수 있습니다. 

 

Registration : 수강신청 할 수 있는 데이터베이스 테이블

Parameter / Value는 Student Id 와 Lecture Id로 구성 

 

Lectures : 강의 내용이 담긴 데이터베이스 테이블

Parameter / Value는 Lecture ID, Professor ID, Lecture Name, Day로 구성 
Lecture ID 가 Registration Lecture ID와 1:1 관계로 수정된 정보는 동일하게 표시 됩니다. 
강의자가 Lectures 수정 / 추가 / 삭제 할 경우 registration 데이터베이스에 표시 되어 학생들이 그정보을 조회 할 수 있습니다. 

 

API

1. Get /Lectures : 학생들이 강의 조희 할 수 있도록 

Parameter ProfId, LecName, LecID, Day 통해 강의 모든 정보 (강의자, 수업명, 수업코드, 날짜) 확인

2. Post/Register : 학생들이 조희한 강의들을 수강신청 할 수 있도록 합니다
3. Get/Registration : 학생들이 수강신청한 내용들을 조희 할 수 있도록 합니다

4. Put/Student/StID : 학생들이 개인 정보 (email) 수정 할 수 있는 과정

5. Post/MakeLectures : 강의자가 새로운 강의 생성 할 수 있습니다

6. Delete/registration/regi : 강의자가 강의 삭제 할 수 있으며 삭제 할 경우 학생들은 삭제된 강의 조희 불가능

 


이슈

 

Day 1 

1. ERD Diagram 작성 하기 전 Data Table 만들지 않고 LMS 요구사항만 집중하다 ERD diagram이 너무 복잡하고 제대로 구현 되지 않았습니다. 

2. ERD Diagram 관계 설계가 잘 못 되어 지적 받아 지속적으로 수정 

 

ERD / API 발표

ERD / API 구성에대해 발표하는 시간이 있었습니다. 그때 당시 내용은 잘 몰랐지만 최대한 이해한 지식으로 자신감있게 발표 했습니다.

발표 당시 심정

Day 2

1. 처음에는 Fastify가 Ubuntu에 설치가 안되서 CLI 명령어 시도 해서 설치 했습니다. 
npm install --global fastify-cli

fastify generate myproject

2. ElephantSQL에 인스턴스 생성하여 테이블 및 데이터 기입 완료, .env, JSON (js 파일) 모두 작성 완료 하였지만 서버와 지속적으로 연결이 안되고 Error 500 Status code 만 떴습니다. 해당 코드 확인 및 ElephantSQL 내용과 확인 하였지만 오류을 못 찾아 성공한 팀원 정보 github repository에서 pull하여 시도 하니깐 됬습니다. 

3. 브라우서 / HTTP 에 응답하기 위한 API / 코드 작성을 해야 하지만 ElepahntSQL Database, 저희가 구성한 데이터베이스 등 문제들이 많아 지속적으로 수정하고 404 error Status code 확인하면서 진행했습니다. (데이터베이스와 코드와 연결 하는 작업) 테스팅은 POSTMAN에서 진행하였고 저희 팀원들이 주로 많이 진행했습니다.

저의 심정


회고 (후기)

데이터베이스, WAS, API 등 다 배우고 실습 통해 경험도 하였지만 이번 프로젝트 통해 알게 됬습니다....아직 부족한 부분들이 너무 많았습니다. 수업에서 하는 실습들은 내용 보고 따라 해서 어느정도 성공하였지만 이번 프로젝트 처럼 시작부터 끝가지 팀끼리 구성, 구현, 작성 하는 부분이 상당히 힘들었고 이해안된 부분들이 많았습니다.

이번 프로젝트는 팀원들이 주로 지도 및 진행 하였고 저는 서폿만 했습니다. 팀원이 github repository에 내용에 Push 하였고 저는 주로 Pull 하는 상황이였습니다. 

 

셀프 확인 했을때 복습이 필요한 내용 :

1. REST API 대한 지식 부족하여 다시 복습 필요 

 - Query, Parameter, Path 어떻게 작성 하는지 및 내용 이해 필요

 - 데이터베이스 구성 및 코드와 연결

 - Fastify / 코드 작성 이해 부족으로 복습 필요 (가장 큰 문제)

 - API 내용 작성 (Request header / body) 설계 및 어떻게 구성하는지 이해 필요

2. WAS 설계 (서버와 연결)

3. 데이터베이스 

 - SQL / 정규화 내용 추가 실습 및 복습 필요

 

해결방안 및 다음 프로젝트때?

이번 프로젝트에는 너무 부족한 지식으로 진행 하게되서 제대로된 경험 / 실습을 못 한거 같아 추후에 다시 처음부터 해봐야 할 거 같습니다. 다음 프로젝트 진행 할때에는 충분한 지식으로 직접 실습 할 수 있도록 노록이 필요합니다. 

팀에 의존하는 것 보다 스스로 진행 할 수 있는 실력이 필요 하다고 생각합니다.