2024-Hansung-Capstone / ProjectJ-Backend

MIT License
2 stars 1 forks source link

header

<Notion 링크>

https://www.notion.so/2024-Hansung-Capstone-77b3aed17b6d49a6b03315a2495406a7?pvs=4

1. 정의

자취생들의 편의를 위한 사이트인 “자취만렙”에서 필요한 기능을 구현한 API 백엔드 서버이다.
NestJS 프레임워크에서 GraphQL 쿼리 언어를 사용하여 개발 완료 후 Docker를 통해 패키징 하였다.
현재, AWS EC2 인스턴스를 통해 배포 중이다.

2. 설치

2-1. 환경변수 설정

      가. .env 설정

JWT_ACCESS_SECRET = (사용자 관리 중 JWT의 Access키 생성을 위한 암호)
JWT_REFRESH_SECRET = (사용자 관리 중 JWT의 Refresh키 생성을 위한 암호)

SMS_KEY = (CoolSMS API 인증키)
SMS_SECRET = (CoolSMS API 암호키)
SMS_SENDER = (문자 메시지 전달할 휴대폰 번호)

SERVER_INTERNAL_PORT = (서버 포트포워딩에서 내부 포트)
SERVER_EXTERNAL_PORT = (서버 포트포워딩에서 외부 포트)

DATABASE_TYPE = (메인으로 사용할 데이터베이스의 종류 ex)mysql)
DATABASE_HOST = (데이터베이스 host 주소)
DATABASE_INTERNAL_PORT = (데이터베이스 포트포워딩에서 내부 포트)
DATABASE_EXTERNAL_PORT = (데이터베이스 포트포워딩에서 외부 포트)
DATABASE_USERNAME = (데이터베이스 사용자명)
DATABASE_PASSWORD = (데이터베이스 암호)
DATABASE_DATABASE = (데이터베이스 스키마명)

OPENAI_SECRET = (OPENAI API 비밀 키)

      나. .env.docker 설정

DATABASE_TYPE = (메인으로 사용할 데이터베이스의 종류 ex)mysql)
DATABASE_HOST = (데이터베이스 host 주소)
DATABASE_PORT= (데이터베이스 포트)
DATABASE_USERNAME = (데이터베이스 사용자명)
DATABASE_PASSWORD = (데이터베이스 암호)
DATABASE_DATABASE = (데이터베이스 스키마명)

2-2. 프로젝트 파일 설치

git clone https://github.com/2024-Hansung-Capstone/ProjectJ-Backend.git

2-3. Docker

docker-compose build
docker-compose up
-백그라운드에서 실행: docker-compose up -d
-로그 출력: docker-compose logs 

3. 기술 스택

-개발 환경 : Windows, MacOS
-개발 언어 : TypeScript, JavaScript, CSS
-개발 도구 : VSCode, MySQL, Docker, GraphQL, OpenAI Playground, CoolSMS
-프레임워크 : React, NestJS

4. Database 구조 (ERD)

ProjectJ

5. 설계 구조

image

6. Release Link

http://54.180.182.40:5000/graphql

7. Apollo GraphQL Playground UI

<UI 설명>
image

<documentation 화면 설명>
image

8. API 설명

8-1. 사용자 관리

      가. JWT 적용
            사용자의 인증과 인가를 위해 JWT 기술 적용한다.
            JWT 토큰에 사용자의 ID 값을 넣어서 사용자의 회원정보 일치 여부를 확인한다.

<사용 예시 화면>
image

      나. 휴대폰 본인인증 적용 (CoolSMS)
            CoolSMS의 API를 사용하여 사용자가 입력한 전화번호에 인증 메시지를 전송한다.

<인증 메시지 전송 예>
image

8-2. 행정지역

      행정안전부에서 지정한 2024년 2월 1일 기준인 시도, 시군구, 행정동 코드를 사용한다.
      <출처>
      https://www.mois.go.kr/frt/bbs/type001/commonSelectBoardArticle.do?bbsId=BBSMSTR_000000000052&nttId=106692

8-3. 포인트

      가. 사용자 역할 관리
            포인트별로 사용자의 역할을 분류한다.

image

8-4. 원룸

      국토교통부에서 제공하는 연립 다세대 전월세 데이터를 사용하여 원룸 정보를 전달한다.
      <출처>
      https://www.data.go.kr/data/15058016/openapi.do
      상세주소를 이용하여 Geocoding 기술을 사용하여 좌표를 전달한다.

8-5. 요리 추천 AI 기능

      OpenAI에 API 기능 중 Assistants를 생성해서 요리 추천 봇을 구현한다.
      사용자가 갖고 있는 식재료를 Json 형태로 전달하면, Assistants는 Json 형태로 요리의 상세 정보와 레시피를 리턴한다.
      사용자의 요청별로 각각 Thread를 만들고, 생성해 놓은 Assistants를 Run하여 결과를 도출한다.

<OpenAI에서 생성한 요리 추천 Assistants>
image

<요리 추천 AI API 실행 결과>
image

기타 API 기능 설명

      배포된 링크(http://54.180.182.40:5000/graphql)의 Docs를 참고하여 사용 가능하다.