Skip to content

πŸ“· Instagram built with React, React Native, Typescript, Apollo GraphQL, Styled Components, PostgreSQL

Notifications You must be signed in to change notification settings

GitHubGW/instagram-frontend

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

πŸ“· Instagram built with React, React Native, Typescript, Apollo GraphQL, Styled Components, PostgreSQL

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages