Skip to content

πŸ“· μΈμŠ€νƒ€κ·Έλž¨ built with React, React Native, Typescript, Apollo GraphQL, Styled Components, PostgreSQL

Notifications You must be signed in to change notification settings

GitHubGW/instagram-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Table of contents

Built with

Front-end

  • React
  • Typescript
  • Apollo Client
  • Framer Motion
  • Styled Components
  • GraphQL Code Generator

Back-end

  • NodeJS
  • Express
  • Apollo Server
  • GraphQL
  • PostgreSQL
  • Prisma
  • JsonWebToken

App

  • React Native
  • Expo
  • Typescript
  • Apollo Client
  • React Navigation
  • Styled Components
  • GraphQL Code Generator

Deploy

  • Netlify
  • Heroku
  • AWS S3

Project

  1. νšŒμ›κ°€μž…, 둜그인, λ‘œκ·Έμ•„μ›ƒ
  • μœ μ €λŠ” 이메일, μ„±λͺ…, μ‚¬μš©μž 이름, λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄ νšŒμ›κ°€μž…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • νšŒμ›κ°€μž… μ‹œ, μž…λ ₯ν•œ λΉ„λ°€λ²ˆν˜ΈλŠ” Bcryptλ₯Ό 톡해 ν•΄μ‹œν™”λ˜λ©°, 계정 μ •λ³΄λŠ” PostgreSQL에 μ €μž₯λ©λ‹ˆλ‹€.
  • μœ μ €λŠ” μ‚¬μš©μž 이름, λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄ λ‘œκ·ΈμΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„±κ³΅μ μœΌλ‘œ 둜그인 μ‹œ, JsonWebToken을 λ°›κ²Œ 되고 ν•΄λ‹Ή 토큰을 둜컬 μŠ€ν† λ¦¬μ§€μ— μ €μž₯ν•©λ‹ˆλ‹€.
  • Apollo Client의 Reactive variablesλ₯Ό μ΄μš©ν•΄μ„œ local stateλ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  • Reactive variablesλ₯Ό λ³€κ²½ν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή λ³€μˆ˜μ— μ˜μ‘΄ν•˜λŠ” λͺ¨λ“  쿼리의 μ—…λ°μ΄νŠΈκ°€ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.
  • λ‘œκ·Έμ•„μ›ƒ μ‹œ, Reactive variablesλ₯Ό λ³€κ²½ν•˜κ³ , 둜컬 μŠ€ν† λ¦¬μ§€μ— μ €μž₯된 토큰과 μŠ€ν† μ–΄μ— μ €μž₯된 데이터λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.

  1. ν”„λ‘œν•„
  • ν”„λ‘œν•„ νŽ˜μ΄μ§€μ—μ„œ μœ μ € 정보, 사진, νŒ”λ‘œμ›Œ, νŒ”λ‘œμš°λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • νŒ”λ‘œμ›ŒλŠ” ν•΄λ‹Ή μœ μ €λ₯Ό νŒ”λ‘œμš°ν•˜κ³  μžˆλŠ” μœ μ €λ“€μ˜ λͺ©λ‘μ΄κ³ , νŒ”λ‘œμš°λŠ” ν•΄λ‹Ή μœ μ €κ°€ νŒ”λ‘œμš°ν•˜κ³  μžˆλŠ” μœ μ €λ“€μ˜ λͺ©λ‘μž…λ‹ˆλ‹€.

  1. μœ μ € νŒ”λ‘œμš°, μ–ΈνŒ”λ‘œμš°
  • μœ μ €λ₯Ό νŒ”λ‘œμš°ν•˜κ±°λ‚˜ μ–ΈνŒ”λ‘œμš°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • νŒ”λ‘œμš°ν•˜κ±°λ‚˜ νŒ”λ‘œμš°λ₯Ό μ·¨μ†Œν•˜κ²Œ 되면, Apollo Clientλ₯Ό 톡해 μƒλŒ€λ°©κ³Ό μžμ‹ μ˜ μΊμ‹œλœ ν•„λ“œ 값을 직접 μˆ˜μ •ν•˜μ—¬ νŒ”λ‘œμ›Œμ™€ νŒ”λ‘œμš° λͺ©λ‘μ„ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  • μœ μ €λ₯Ό νŒ”λ‘œμš°ν•˜κ²Œ 되면, ν™ˆμ—μ„œ ν•΄λ‹Ή μœ μ €κ°€ μ—…λ‘œλ“œν•œ 사진듀을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. μœ μ € 및 ν•΄μ‹œνƒœκ·Έ 검색
  • @μœ μ €μ΄λ¦„ 으둜 μœ μ €λ₯Ό 검색할 수 μžˆμŠ΅λ‹ˆλ‹€. (ex: @nasa)
  • #ν•΄μ‹œνƒœκ·Έ 둜 ν•΄μ‹œνƒœκ·Έλ₯Ό 검색할 수 μžˆμŠ΅λ‹ˆλ‹€. (ex: #space)
  • React Hook Form을 μ΄μš©ν•΄ @이름 을 μž…λ ₯ μ‹œ μœ μ €λ₯Ό, #ν•΄μ‹œνƒœκ·Έλ₯Ό μž…λ ₯ μ‹œ ν•΄μ‹œνƒœκ·Έλ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€.

  1. 사진
  • 사진을 ν΄λ¦­ν•˜μ—¬ 사진 상세정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • Framer Motion을 μ΄μš©ν•΄ λͺ¨λ‹¬ 창이 λ‚˜νƒ€λ‚˜κ±°λ‚˜ μ‚¬λΌμ§ˆ λ•Œ, μ• λ‹ˆλ©”μ΄μ…˜μ„ μ μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • 사진을 μ—…λ‘œλ“œν•œ μœ μ €, μΊ‘μ…˜, λŒ“κΈ€, μ’‹μ•„μš” 등을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 사진에 μ’‹μ•„μš”λ₯Ό λˆ„λ₯Έ μœ μ €λ“€μ„ 확인할 수 있고, ν•΄λ‹Ή μœ μ €λ“€μ„ νŒ”λ‘œμš°ν•˜κ±°λ‚˜ μ–ΈνŒ”λ‘œμš°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 사진에 λŒ“κΈ€μ„ μž‘μ„±ν•˜κ±°λ‚˜ μˆ˜μ • 및 μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 사진을 μ—…λ‘œλ“œν•œ μœ μ €λŠ” μ‚¬μ§„μ˜ μΊ‘μ…˜μ„ μˆ˜μ •ν•˜κ±°λ‚˜ 사진을 μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. 사진 μ—…λ‘œλ“œ
  • 사진 이미지와 μΊ‘μ…˜μ„ μž…λ ₯ν•΄ 사진을 μ—…λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΊ‘μ…˜μ—λŠ” @μœ μ €μ΄λ¦„ λ˜λŠ” #ν•΄μ‹œνƒœκ·Έ λ₯Ό μž…λ ₯ν•΄, μœ μ € 이름 λ˜λŠ” ν•΄μ‹œνƒœκ·Έλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ—…λ‘œλ“œν•œ 사진은 AWS S3의 버킷에 μ €μž₯λ©λ‹ˆλ‹€.

  1. 사진 μ’‹μ•„μš”, μ’‹μ•„μš” μ·¨μ†Œ
  • 사진에 μ’‹μ•„μš”λ₯Ό λˆ„λ₯΄κ±°λ‚˜ μ’‹μ•„μš”λ₯Ό μ·¨μ†Œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ’‹μ•„μš” λ˜λŠ” μ’‹μ•„μš” μ·¨μ†Œλ₯Ό ν•˜κ²Œ 되면, Apollo Clientλ₯Ό 톡해 ν•΄λ‹Ή μ‚¬μ§„μ˜ μΊμ‹œλœ ν•„λ“œ 값을 직접 μˆ˜μ •ν•˜μ—¬ μ’‹μ•„μš”μ™€ 전체 μ’‹μ•„μš” 수λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

  1. ν•΄μ‹œνƒœκ·Έ
  • ν•΄μ‹œνƒœκ·ΈλŠ” ν•΄λ‹Ή ν•΄μ‹œνƒœκ·Έκ°€ 가지고 μžˆλŠ” 전체 사진듀을 λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.
  • 사진 μ—…λ‘œλ“œ μ‹œ, μΊ‘μ…˜μ— #ν•΄μ‹œνƒœκ·Έ λ₯Ό μž…λ ₯ν•˜κ²Œ 되면, μƒˆλ‘œμš΄ ν•΄μ‹œνƒœκ·Έκ°€ μƒμ„±λ©λ‹ˆλ‹€.

  1. νŒ”λ‘œμš° μ—…λ°μ΄νŠΈ
  • GraphQL Subscriptionsλ₯Ό 톡해 μƒλŒ€λ°©μ΄ μžμ‹ μ„ νŒ”λ‘œμš°ν•˜κ²Œ 되면, μ‹€μ‹œκ°„μœΌλ‘œ νŒ”λ‘œμš° μ—…λ°μ΄νŠΈ μ•Œλ¦Όμ„ 받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • PubSub을 μ΄μš©ν•΄ νŒ”λ‘œμš° μ‹œ, 이벀트λ₯Ό publishν•˜κ²Œ 되고, ν•΄λ‹Ή 이벀트λ₯Ό listenν•˜κ³  μžˆλŠ” μœ μ €λŠ” νŒ”λ‘œμš° μ—…λ°μ΄νŠΈ μ•Œλ¦Όμ„ λ°›κ²Œ λ©λ‹ˆλ‹€.

  1. 닀크λͺ¨λ“œ
  • 해와 달을 클릭해 라이트 λͺ¨λ“œμ™€ 닀크 λͺ¨λ“œλ₯Ό μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • Styled Components의 ThemeProviderλ₯Ό μ΄μš©ν•΄ 라이트 ν…Œλ§ˆμ™€ 닀크 ν…Œλ§ˆλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.
  • 닀크 λͺ¨λ“œ μ „ν™˜ μ‹œ, 닀크 λͺ¨λ“œ ν™œμ„± μ—¬λΆ€λ₯Ό 둜컬 μŠ€ν† λ¦¬μ§€μ— μ €μž₯ν•˜κ³ , Apollo Client의 Reactive variablesλ₯Ό μ΄μš©ν•΄μ„œ local stateλ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

  1. νšŒμ›κ°€μž…, 둜그인, λ‘œκ·Έμ•„μ›ƒ (μ•±)
  • μœ μ €λŠ” 이메일, μ„±λͺ…, μ‚¬μš©μž 이름, λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄ νšŒμ›κ°€μž…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μœ μ €λŠ” μ‚¬μš©μž 이름, λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄ λ‘œκ·ΈμΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„±κ³΅μ μœΌλ‘œ 둜그인 μ‹œ, JsonWebToken을 λ°›κ²Œ 되고 ν•΄λ‹Ή 토큰을 AsyncStorage에 μ €μž₯ν•©λ‹ˆλ‹€.
  • μ•± λ‘œλ”© μ‹œ, AsyncStorageλ‘œλΆ€ν„° 토큰을 가져와 둜그인 μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
  • λ‘œκ·Έμ•„μ›ƒ μ‹œ, Reactive variablesλ₯Ό λ³€κ²½ν•˜κ³ , AsyncStorage에 μ €μž₯된 토큰과 μŠ€ν† μ–΄μ— μ €μž₯된 데이터λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.

  1. ν”„λ‘œν•„ (μ•±)
  • ν”„λ‘œν•„ νŽ˜μ΄μ§€μ—μ„œ μœ μ € 정보, 사진, νŒ”λ‘œμ›Œ, νŒ”λ‘œμš°λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 사진을 ν΄λ¦­ν•˜μ—¬ 사진 상세정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 사진을 μ—…λ‘œλ“œν•œ μœ μ €, μΊ‘μ…˜, λŒ“κΈ€, μ’‹μ•„μš” 등을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. 사진 검색, 사진 선택 및 사진 촬영 (μ•±)
  • μΊ‘μ…˜ 으둜 사진을 검색할 수 μžˆμŠ΅λ‹ˆλ‹€. (ex: food)
  • μœ μ €λŠ” νœ΄λŒ€ν° 앨범에 μžˆλŠ” 사진듀을 μ„ νƒν•˜κ±°λ‚˜, 사진 μ΄¬μ˜μ„ 톡해 μ΄¬μ˜ν•œ 사진을 μ—…λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • expo-media-libraryλ₯Ό 톡해 λ―Έλ””μ–΄ λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ μ„€μ •ν•©λ‹ˆλ‹€.
  • expo-cameraλ₯Ό 톡해 μΉ΄λ©”λΌμ˜ type, zoom, ratio, whiteBalance등을 μ„€μ •ν•©λ‹ˆλ‹€.

  1. 기타

Pages

Root

  • ν™ˆ
  • 둜그인
  • νšŒμ›κ°€μž…

User

  • 전체 μœ μ €
  • μœ μ € ν”„λ‘œν•„
  • μœ μ € νŒ”λ‘œμš°
  • μœ μ € νŒ”λ‘œμ›Œ
  • ν”„λ‘œν•„ μˆ˜μ •

Photo

  • 사진 μ—…λ‘œλ“œ
  • 사진 상세정보

Hashtag

  • ν•΄μ‹œνƒœκ·Έ

Features

πŸ™Žβ€β™‚οΈ User

  • νšŒμ›κ°€μž…, νšŒμ›νƒˆν‡΄
  • 둜그인, λ‘œκ·Έμ•„μ›ƒ
  • ν”„λ‘œν•„ 보기
  • νŒ”λ‘œμš°, μ–ΈνŒ”λ‘œμš°
  • νŒ”λ‘œμ›Œ, νŒ”λ‘œμš° 보기
  • μœ μ € 검색
  • ν”„λ‘œν•„ μˆ˜μ •
  • 전체 μœ μ € 보기
  • νŒ”λ‘œμš° μ—…λ°μ΄νŠΈ

πŸ“· Photo

  • 사진 보기
  • 사진 μ’‹μ•„μš” 보기
  • 사진 μ—…λ‘œλ“œ
  • 사진 μˆ˜μ •
  • 사진 μ‚­μ œ
  • 사진 검색
  • ν”Όλ“œ 보기

πŸ’¬ Comment

  • λŒ“κΈ€ 보기
  • λŒ“κΈ€ 생성
  • λŒ“κΈ€ μˆ˜μ •
  • λŒ“κΈ€ μ‚­μ œ
  • λŒ“κΈ€ μ—…λ°μ΄νŠΈ

#️⃣ Hashtag

  • ν•΄μ‹œνƒœκ·Έ 보기
  • ν•΄μ‹œνƒœκ·Έ 검색

❀️ Like

  • 사진 μ’‹μ•„μš”, μ’‹μ•„μš” μ·¨μ†Œ
  • μ’‹μ•„μš” μ—…λ°μ΄νŠΈ

πŸ“¨ Room

  • 전체 μ±„νŒ…λ°© 보기
  • μ±„νŒ…λ°© 보기

βœ‰οΈ Message

  • 메세지 보내기
  • 메세지 읽기
  • 메세지 μ‚­μ œ
  • 메세지 μ—…λ°μ΄νŠΈ

License

MIT

About

πŸ“· μΈμŠ€νƒ€κ·Έλž¨ built with React, React Native, Typescript, Apollo GraphQL, Styled Components, PostgreSQL

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published