IT STUDY LOG

[SECTION 1] <WAS, Web Server 실습> Introduction 본문

devops bootcamp 4/project log

[SECTION 1] <WAS, Web Server 실습> Introduction

roheerumi 2023. 4. 3. 09:27

# 실습 프로젝트 개요

개요

Achievement Goals

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

Bare Minimum

  • 관계형데이터베이스를 위한 데이터를 모델링하고, API 문서화를 진행합니다.
  • CRUD 기능을 가진 한개의 API 서버를 완성합니다.
  • 클라우드 서비스 데이터베이스를 사용하여 데이터를 영속적으로 저장합니다.
  • Git을 이용한 협업을 진행합니다.

Advanced

  • 주어진 기능 명세 외에 필요하다고 생각되는 명세를 추가로 개발합니다.
  • 선택한 주제 외에 API 서버를 추가 완성합니다.
  • 관계형 데이터베이스와 NoSQL의 차이를 이해하고, 관계형 데이터베이스 및 NoSQL이 어떤 경우에 적합한지 이해합니다.

제작 범위 및 기술 스택

  • 백엔드를 만듭니다.
    • Fastify를 사용합니다.
  • 데이터베이스를 사용해야 합니다. 즉, 데이터 모델을 디자인해야 합니다.
  • Entity-Relationship Diagram (ERD)을 그려야 합니다.
  • API 문서를 만들어야 합니다.
    • Method, Endpoint, Request, Response가 예시와 함께 포함되어야합니다.

제작 범위가 아닌 것

  • 프론트엔드는 평가에 포함되지 않습니다.
    • 다만, 최종 완성된 형태를 염두해두고 프로토타이핑을 하는 것은 애플리케이션 이해에 도움이 되므로 최소 요구사항에 대한 구현이 끝난 후 구상해서 제출할 수 있습니다.
  • 완전한 인증 구현까지는 염두하지 않아도 좋습니다. 그러나 사용자 테이블은 필요합니다.

진행 과정에서 참고할 내용

1. DB 설계

2. 주제 선정

3. ERD 작성

- https://dbdiagram.io/home 활용

4. API 문서 작성

- Swagger 활용 등

5. 프로젝트 세팅

6. 구현

7. 구현사항 제출

8. 회고 작성 

 

일정 및 마일스톤

Day1

시간 제목 내용 기타
09:00 ~ 10:00 인트로 실습과제1 개요 안내  
10:00 ~ 11:00 데이터베이스 설계   관계형 데이터베이스의 테이블과 테이블 사이의 관계에 대해 공부합니다.
11:00 ~ 11:30 주제 분석   주어진 주제를 분석합니다.
11:30 ~ 12:00 ERD 및 API 문서제작    
13:00 ~ 16:00 ERD 및 API 문서제작(계속)    
16:00 ~ 16:30 ERD & API 발표준비 발표 자료 제출 레포지토리 내부 제출용 파일을 채워주세요.
16:30 ~ 18:00 ERD & API 발표   팀발표로 진행됩니다.

Day2

시간 제목 내용 기타
09:00 ~ 10:00 Project Setting fastify 프로젝트 생성 및 DB 연결 Day2 학습 콘텐츠를 참고해주세요.
10:00 ~ 12:00 Milestone1 DB 구성 및 서버 연결  
13:00 ~ 18:00 Milestone2 API 문서에 따른 서버 구현  

Day3

시간 제목 내용 기타
09:00 ~ 11:30 프로젝트 잔여 업무 진행 Day2 중 미비된 사항 진행 최소 요구사항을 모두 완성한 팀은 더 필요하다고 판단되는 추가 기능을 구현합니다.
11:30 ~ 12:00 구현사항 제출 정상작동 여부확인 팀 레포 2.Functional_Requirements 문서에서 구현 완료 기능에 체크표시를 추가합니다(빈 대괄호 안에 x 추가)
13:00 ~ 15:30 회고 작성 Error handling 작성 느끼고 배운 것을 기록해도 괜찮습니다. 
15:30 ~ 18:00 회고 발표   개인발표로 진행됩니다.

 

# 실습 과제 안내

참고 마일스톤

  • DAY 1
    • 리소스에 대한 데이터 모델링
    • ERD완성
    • API 명세 중 3개 완성(엔지니어와 함께 확인 후 나머지 4개 진행)
    • API 명세 7개 모두 완료
    • 발표준비
    • 발표진행(전체 또는 엔지니어 선정 일부 조)
  • DAY 2
    • Fastify로 프로젝트 시작하기(팀원 1인이 진행 - 화면 공유)
      • 팀 레포 클론 후 해당 경로로 이동
      • fastify generate . 으로 프로젝트 기본 파일 생성
      • npm install을 통해 의존성 설치
      • npm run dev를 통해 서버 실행 테스트
        • fastify의 autoload/sensible 모듈 업데이트 적용 필요 에러메세지 발생한 경우
          • npm i @fastify/autoload
          • npm i @fastify/sensible
      • 브라우저 or Postman을 통해 /example 경로 조회 확인
    • 깃허브 협업환경 구성
      • 팀장 작업 내용 레포에 업로드
      • 각 팀원이 팀 레포 클론 후 각자 이름으로 routes폴더 내에 새로운 폴더 형성 (example 폴더 참고) 후 조회할 수 있도록 진행
        경로 : //routes/kimcoding
        
        'use strict'
        
        module.exports = async function (fastify, opts) {
          fastify.get('/', async function (request, reply) {
            return "김코딩 완료"
          })
        }
      • commit, push, pr 진행
        • 로컬에서는 각자 /routes/example, /routes/kimcoding 만 존재하는 상태
        • 깃허브에 업로드
      • 팀원 전체 routes가 적용된 레포를 pull해서 테스트
        • pull 받은 레포에는 /routes/example, /routes/kimcoding, /routes/parkdevops, /routes/leecloud 존재
        • localhost:3000/{수강생이름} 경로 조회시 각 팀원의 이름이 전부 조회되어야함
    • Database Connect 확인
      • ElephantSQL에서 프리티어 데이터베이스 생성(Tiny Turtle)
      • 플러그인 적용은 유어클래스 학습 영상을 참고
      • 플러그인 적용 후 commit, push
      • 각 팀원이 pull 진행 후, 환경설정 적용(각자 .env 구성)
    • ElephantSQL 데이터에 연결해서 서버기능 확인
      • GET 메소드에 대한 서버기능 구현
      • 나머지 메소드에 대한 서버기능 구현
  • DAY3
    • 노션페이지로 회고 제출
    • 동료 회고 읽기 + 공감 내용에 댓글 작성
    • 회고 발표 : 댓글수 기준 상위권 + 엔지니어 선정 회고
    • 회고발표 이후 아래 사항 중 팀 상황에 맞게 진행
    • 미비된 API구현 진행
    • 요구사항 외 추가 기능 구현
    • API가 요청되는 시점을 고려한 프론트앤드 프로토 타입 구상 및 업로드

 

API.md 작성 예시

Method Path Request Header Request Body Response Status Code Response Body
GET /articles - - 200 OK list-of-article
GET /articles?user={user_id} - - 200 OK list-of-article

list-of-article

[
  {
    "id": "1",
    "author": "John Doe",
    "content": "This is my first post!",
    "created_at": "2023-03-18T02:27:43.511Z",
    "updated_at": "2023-03-18T02:27:43.511Z"
  },
  {
    "id": "2",
    "author": "John Doe",
    "content": "I love DevOps!",
    "created_at": "2023-03-18T04:01:53.722Z",
    "updated_at": "2023-03-18T04:01:53.722Z"
  }
]
 
Comments