Skip to content

[Velog 클론코딩] GraphQL API Server - Express + Prisma + Heroku + AWS S3

Notifications You must be signed in to change notification settings

hyeonss0417/AgentBlog-backend

Repository files navigation

Agent Blog API Server
Swift Database deploy Storage

🔥 Motivation

인스타그램 클론코딩을 하면서 익힌 React + GraphQL 풀스택 기술을 연습하고, 협업능력을 기르기 위해 시작한 프로젝트입니다.

또한 React를 Javascript로 개발해오면서 디버깅이 불편하고 유지보수도 어렵다는 단점을 개선하고자 TypeScript를 도입하게 되었습니다. (+ 효율적인 협업을 위해)

서비스 소개

Velog 블로그 서비스 클론코딩 프로젝트

  • 개발자들을 위한 블로그 서비스.
  • 마크다운 (Markdown) 문법을 사용하여 개발자들이 쉽고 빠르게 예쁘게 꾸며진 포스트를 작성 할 수 있습니다.
  • 메인 페이지에서 개발 트렌드 및 인기 태그 제공을 통해 융용한 정보를 쉽고 빠르게 찾을 수 있습니다.
  • 개발자들을 위한 블로그 서비스인 velog를 프론트엔드, 벡엔드 모두 클론코딩하여 Markdown 기반 게시물 작성, 해시태그 설정, 게시물 검색, 해시태그 검색, 반응형디자인 등 대부분의 기능을 구현하였습니다.

UI

1) 메인 홈페이지

velog_feed mov

  • Card 디자인 & Skeleton 로딩 구현
  • 트렌딩 / 최신 게시물 노출
  • hover 애니메이션
  • 인기태그 표시

2) Responsive Layout

1

[피드]
2

[검색]
  • 미디어 쿼리를 이용하여 반응형 웹사이트를 구현

3) 로그인

1

[로그인]
2

[회원가입]
  • 모달을 통해 로그인과 회원가입을 구현했습니다.
    • Portal 사용

velog_login mov

  • 이메일 인증으로 로그인 구현
    • nodemailer 사용

4) 해시태그 검색

velog_hashtag mov

  • Skeleton loading 구현

5) 게시물 검색

velog_search mov

  • Input 값의 변화를 실시간으로 감지하여 입력 즉시 검색 데이터를 받아옴

활용기술

  • GraphQL: 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것을 목적으로 만들어진 쿼리 언어로서 하나의 엔드 포인트를 통해 원하는 데이터를 한번에 가져올 수 있는 장점이 있습니다.
  • heroku: GraphQL API 서버와 Prisma-MySQL Database 배포하기 위해 사용.
  • Amazon S3: 온라인 스토리지 웹 서비스. 게시물의 이미지를 저장하기 위해 사용.
  • multer: Node.js 미들웨어로 파일 업로드 핸들링을 도와주는 모듈. 게시물의 이미지를 업로드 하기 위해 사용.
  • babel: 자바스크립트 컴파일러로 ES8으로 작성한 코드를 호환성을 위해 하위 버전 코드로 변환해주는 모듈.
  • nodemailer: Node.js 에서 e-mail 을 쉽게 보낼 수 있게 도와주는 모듈. 회원가입 시 이메일 인증을 위해 사용.
  • passport: 토큰인증방식을 위해 사용.
  • morgan: 서버 요청에 대한 기록을 콘솔에 저장하기 위해 사용.

File Setting

📦src
 ┣ 📂api
 ┃ ┣ 📂Comment
 ┃ ┃ ┣ 📂addComment
 ┃ ┃ ┃ ┣ 📜addComment.graphql
 ┃ ┃ ┃ ┗ 📜addComment.js
 ┃ ┃ ┗ 📂editComment
 ┃ ┣ 📂Hashtag
 ┃ ┃ ┣ 📂getPopularHashtag
 ┃ ┃ ┃ ┣ 📜getPopularHashtag.graphql
 ┃ ┃ ┃ ┗ 📜getPopularHashtag.js
 ┃ ┃ ┣ 📂searchHashtag
 ┃ ┃ ┃ ┣ 📜searchHashtag.graphql
 ┃ ┃ ┃ ┗ 📜searchHashtag.js
 ┃ ┃ ┗ 📜Hashtag.js
 ┃ ┣ 📂Like
 ┃ ┃ ┣ 📂toggleLike
 ┃ ┃ ┃ ┣ 📜toggleLike.graphql
 ┃ ┃ ┃ ┗ 📜toggleLike.js
 ┃ ┣ 📂Post
 ┃ ┃ ┣ 📂editPost
 ┃ ┃ ┃ ┣ 📜editPost.graphql
 ┃ ┃ ┃ ┗ 📜editPost.js
 ┃ ┃ ┣ 📂getPostDetail
 ┃ ┃ ┃ ┣ 📜getPostDetail.graphql
 ┃ ┃ ┃ ┗ 📜getPostDetail.js
 ┃ ┃ ┣ 📂posting
 ┃ ┃ ┃ ┣ 📜posting.graphql
 ┃ ┃ ┃ ┗ 📜posting.js
 ┃ ┃ ┣ 📂searchPost
 ┃ ┃ ┃ ┣ 📜searchPost.graphql
 ┃ ┃ ┃ ┗ 📜searchPost.js
 ┃ ┃ ┣ 📂seeLatestPost
 ┃ ┃ ┃ ┣ 📜seeLatestPost.graphql
 ┃ ┃ ┃ ┗ 📜seeLatestPost.js
 ┃ ┃ ┣ 📂seeTrendyPost
 ┃ ┃ ┃ ┣ 📜seeTrendyPost.graphql
 ┃ ┃ ┃ ┗ 📜seeTrendyPost.js
 ┃ ┃ ┗ 📜Post.js
 ┃ ┣ 📂Series
 ┃ ┃ ┣ 📂addSeries
 ┃ ┃ ┃ ┣ 📜addSeries.graphql
 ┃ ┃ ┃ ┗ 📜addSeries.js
 ┃ ┃ ┣ 📂editSeries
 ┃ ┃ ┃ ┣ 📜editSeries.graphql
 ┃ ┃ ┃ ┗ 📜editSeries.js
 ┃ ┃ ┗ 📂getSeries
 ┃ ┃ ┃ ┣ 📜getSeries.graphql
 ┃ ┃ ┃ ┗ 📜getSeries.js
 ┃ ┣ 📂User
 ┃ ┃ ┣ 📂_searchUser
 ┃ ┃ ┃ ┣ 📜searchUser.graphql
 ┃ ┃ ┃ ┗ 📜searchUser.js
 ┃ ┃ ┣ 📂checkToken
 ┃ ┃ ┃ ┣ 📜checkToken.graphql
 ┃ ┃ ┃ ┗ 📜checkToken.js
 ┃ ┃ ┣ 📂confirmSecret
 ┃ ┃ ┃ ┣ 📜confirmSecret.graphql
 ┃ ┃ ┃ ┗ 📜confirmSecret.js
 ┃ ┃ ┣ 📂createAccount
 ┃ ┃ ┃ ┣ 📜createAccount.graphql
 ┃ ┃ ┃ ┗ 📜createAccount.js
 ┃ ┃ ┣ 📂edituser
 ┃ ┃ ┃ ┣ 📜edituser.graphql
 ┃ ┃ ┃ ┗ 📜edituser.js
 ┃ ┃ ┣ 📂me
 ┃ ┃ ┃ ┣ 📜me.graphql
 ┃ ┃ ┃ ┗ 📜me.js
 ┃ ┃ ┣ 📂requestSecret
 ┃ ┃ ┃ ┣ 📜requestSecret.graphql
 ┃ ┃ ┃ ┗ 📜requestSecret.js
 ┃ ┃ ┣ 📂seeUserPosts
 ┃ ┃ ┃ ┣ 📜seeUserPosts.graphql
 ┃ ┃ ┃ ┗ 📜seeUserPosts.js
 ┃ ┃ ┗ 📜User.js
 ┃ ┗ 📜models.graphql
 ┣ 📜env.js
 ┣ 📜fragments.js
 ┣ 📜middleware.js
 ┣ 📜passport.js
 ┣ 📜schema.js
 ┣ 📜server.js
 ┣ 📜upload.js
 ┗ 📜utils.js

About

[Velog 클론코딩] GraphQL API Server - Express + Prisma + Heroku + AWS S3

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published