Frontend ๊ฐœ๋ฐœ์ž - hyo.loui

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ - CRUD: Create API, Firebase ์—ฐ๊ฒฐํ•˜๊ธฐ ๋ณธ๋ฌธ

React-Navtive

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ - CRUD: Create API, Firebase ์—ฐ๊ฒฐํ•˜๊ธฐ

hyo.loui 2023. 1. 2. 01:45

๐ŸŽฏ๋ชฉ์  :

CRUD : Create API ์ถ”๊ฐ€, Firebase : FireStore ์—ฐ๊ฒฐ


1. Layout ๋งŒ๋“ค๊ธฐ

user interface

์œ„์™€ ๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ๋‹ค!
์‚ฌ์‹ค 'ํˆฌ๋‘๋ฆฌ์ŠคํŠธ'๋ฅผ ๋งŽ์ด ๋งŒ๋“ค์–ด์„œ ์บ ํ”„ ์ปค๋ฆฌํ˜๋Ÿผ, ํ•™์Šต์˜ ๋‹ค์–‘์„ฑ์— ์˜๋ฌธ์ ์ด ์žˆ์—ˆ์ง€๋งŒ,
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ๋ณธ ์ž์งˆ์ธ CRUD์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ํ•™์Šต์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.


๋‹ค์‹œํ•œ๋ฒˆ ๋ณต์Šตํ•˜์ž๋ฉด,
ios์—์„œ ์นด๋ฉ”๋ผ ์˜์—ญ์œผ๋กœ ์ธํ•ด layout์ด ๊ฐ€๋ ค์ง€๋Š” ๋ฌธ์ œ๋กœ <safeAreaView> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์ค€๋‹ค!
์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์ฒซ ์ž‘์—…์€ ๋ณดํ†ต ios๋กœ ์ž‘์—…์„ ํ•ด์•ผ 2์ค‘ ์ž‘์—…์ด ์ค„์–ด๋“ ๋‹ค
๊ทธ๋ž˜์„œ '๋…ธ์น˜ ์ œ๊ฑฐ' ๋ผ๋Š” ์ฃผ์„์œผ๋กœ <safeAreaView> ํƒœ๊ทธ ์‚ฌ์šฉ์˜ ์ด์œ ๋ฅผ ์ฃผ์„์œผ๋กœ ์„ค๋ช…ํ–ˆ๋‹ค.

ํฌ๊ฒŒ ๋‘ ์„น์…˜์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ ์œ„ ์‚ฌ์ง„์—์„œ ์•Œ์ˆ˜ ์žˆ๋“ฏ,
๊ณ ์ • ์˜์—ญ(Fiexd Part) & ์Šคํฌ๋กค ์˜์—ญ(Scrollalbe Part) ์ด๋‹ค

๊ณ ์ •์˜์—ญ์€ ์›น์—์„œ์˜ ํ—ค๋”์—ญํ• ๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ์˜์—ญ์ด ์Šคํฌ๋กค์„ ํ•ด๋„ ๊ณ ์ •๋˜์–ด์žˆ๊ฒŒ ๋œ๋‹ค
<View> ํƒœ๊ทธ์˜ ๊ธฐ๋ณธ ์†์„ฑ์ด๋‹ค RN ์—์„œ๋Š” <div> ํƒœ๊ทธ์ฒ˜๋Ÿผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ์Šคํฌ๋กค์ด ๋˜๋ ค๋ฉด ๋‹ค๋ฅธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค
๋ฐ”๋กœ <ScrollView> ํƒœ๊ทธ ์ด๋‹ค.
๋‚ด๋ถ€ ์˜์—ญ์˜ ๊ธฐ๋ณธ ์†์„ฑ์€ flexdirection : column ์ด๊ธฐ ๋•Œ๋ฌธ์—
child ํƒœ๊ทธ๋“ค์€ ์ž๋™์ ์œผ๋กœ scroll์ด ๋œ๋‹ค.

๋˜ํ•œ, button ํƒœ๊ทธ๋Š” ์Šคํƒ€์ผ ์ ์šฉ์ด ์•ˆ๋˜์–ด ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค ๋Œ€์ฒด๋กœ <TouchableOpacity> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

์•„์ด์ฝ˜์€ ์•„๋ž˜ ๋งํฌ์—์„œ ์›ํ•˜๋Š” ์•„์ด์ฝ˜์„ ๊ฐ€์ ธ์™”๋‹ค
https://icons.expo.fyi/

@expo/vector-icons directory

icons.expo.fyi

ํ•ด๋‹น ์‚ฌ์ดํŠธ์—์„œ ๋งˆ์Œ์— ๋“œ๋Š” ์•„์ด์ฝ˜์„ ์„ ํƒ ํ›„,

๋ Œ๋”๋ง ํ•  ์ปดํฌ๋„ŒํŠธ์—์„œ
import ๊ตฌ๋ฌธ์„ ์ ์šฉ์‹œํ‚ค๊ณ , ๋ณต์‚ฌํ•ด์˜จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ™์ด๋ฉด
์•„์ฃผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ๋Š” create ๋ถ€๋ถ„์„ ์„ค๋ช…ํ•˜๊ธฐ์—
์•„๋ž˜์—์„œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค


2-1. Create

์œ„ ์˜์—ญ์„ ์„ค๋ช… ํ•˜๊ฒ ๋‹ค.

์šฐ์„  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  state ๋Š” 2๊ฐ€์ง€ ์ด๋‹ค

  • TextInput์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค ๊ฐ’์„ ์ €์žฅํ•˜๋Š” state (text)
  • ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ €์žฅ๋  ๋ฐฐ์—ดํ˜•ํƒœ์˜ state (todos)

๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” newTodos ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด ์ฃผ์—ˆ๊ณ ,
isDone์€ ๋‚˜์ค‘์— ์ฒดํฌ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ฒดํฌ๋ฅผ ์œ„ํ•ด ๋ฏธ๋ฆฌ ํ• ๋‹นํ–ˆ๊ณ ,
isEdit๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚˜์ค‘์— ์ˆ˜์ •๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๊ฐ์ง€๋ฅผ ์œ„ํ•ด ๋ฏธ๋ฆฌ ํ• ๋‹นํ–ˆ๋‹ค.

TextInput

RN ์—์„œ๋Š” ๊ธฐ์กด react ์™€ ๋‹ค๋ฅด๊ฒŒ onChage๊ฐ€ ์•„๋‹ˆ๊ณ  onChageText๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ,
e.target.value ๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์ ์œผ๋กœ setState ๊ฐ€ ๋˜๋Š” ์˜์—ญ์˜ value๋ฅผ ๋„˜๊ธด๋‹ค

๋˜, onSubmitEditing์€ onSubmit ๊ณผ ๊ฐ™๊ณ  form ํƒœ๊ทธ๊ฐ€ ์—†์–ด๋„ ์ž‘๋™ํ•œ๋‹ค

RN ๋‹ฌ๋‹ฌ ํ•˜๋‹ค....

2-2. ์ž‘๋™ ํ…Œ์ŠคํŠธ

TextInput์—์„œ value์˜ ๊ฐ’์ด ์ •์ƒ์ ์œผ๋กœ ๋ณ€๋™ํ•˜๋Š”์ง€ ์ฝ˜์†”์„ ์ฐ์–ด๋ณด๊ฒ ๋‹ค.

์•„์ฃผ ์ž˜ ์ฐํžŒ๋‹ค onSubmitEditing๋„ ํ™•์ธ ํ•ด ๋ณด๊ฒ ๋‹ค

๋ฐฐ์—ด์— ์ž˜ ์ €์žฅ์ด ๋˜๊ณ ์žˆ๋‹ค!
์ด์ œ ์ด ๋ฐ์ดํ„ฐ๋ฅผ firebase๋กœ ์—ฐ๊ฒฐํ•ด์„œ
firestore์˜ DB๋กœ ์ €์žฅํ•ด๋ณด์ž


3. Conect firestore


์ด์ œ ๋‚ด๋ถ€ ๋ณ€์ˆ˜์—์„œ๋งŒ ๊ฐ€์ง€๊ณ ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ firestore์— ์—ฐ๊ฒฐํ•ด๋ณด๊ฒ ๋‹ค
์•„๋ž˜ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์—ฐ๊ฒฐํ–ˆ๋‹ค

https://firebase.google.com/docs/firestore/quickstart?hl=en&authuser=0

Cloud Firestore ์‹œ์ž‘ํ•˜๊ธฐ  |  Firebase

Firebase Summit์—์„œ ๋ฐœํ‘œ๋œ ๋ชจ๋“  ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๊ณ  Firebase๋กœ ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์•ˆ์‹ฌํ•˜๊ณ  ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”. ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ

firebase.google.com

์œ„ ์ฝ”๋“œ๋Š” ์ •ํ•ด์ง„ ์–‘์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ๋”ฐ๋กœ ์†๋ณด๊ฑฐ๋‚˜ ๊ฑด๋“ค์ด์ง€ ์•Š์•˜์ง€๋งŒ, ์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค

  1. import Firebase API
  2. ์ƒ์„ฑํ•œ project key ์ž‘์„ฑ
  3. api์™€ key ์—ฐ๊ฒฐ
  4. Firesotre์— ํ•ด๋‹น๋‚ด์šฉ ์ ์šฉํ•˜์—ฌ db์— ์ €์žฅํ•  ๊ณต๊ฐ„ ์ƒ์„ฑ

firebase >> firestore ์˜ ์ƒํƒœ์ด๋‹ค

๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด์ค€ newTodos์—์„œ ๋งŒ๋“ค์–ด์ค€ ๋‚ด์šฉ์ด ์ž˜ ๋“ค์–ด์™”๋‹ค!!


+ FireStore ์‚ฌ์šฉ ์‹œ ์„ค์ •(๊ทœ์น™ ์ˆ˜์ •)

false = true
๋ฐ”๊ฟ”์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค!


 ์ตœ์ข… ์ •๋ฆฌ 

  1. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ํˆฌ๋‘๋ฆฌ์ŠคํŠธ๋Š” CRUD์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ํ•™์Šต.
  2. ๊ธฐ์กด ๋ฆฌ์•กํŠธ์™€ ๋ฆฌ์•กํŠธ๋„ค์ดํ‹ฐ๋ธŒ๋Š” ์‚ฌ์šฉํ•˜๋Š” ํƒœ๊ทธ๊ฐ€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ค, ๋•Œ๋ฌธ์— ์ž˜ ํ™•์ธํ•ด์•ผํ•จ.
  3. ๊ธฐ์กด react ์™€ ๋‹ค๋ฅด๊ฒŒ onChage๊ฐ€ ์•„๋‹ˆ๊ณ  onChageText๋ฅผ ์‚ฌ์šฉ.
  4. ์ž๋™์ ์œผ๋กœ setState ๊ฐ€ ๋˜๋Š” ๋…ธ๋“œ์˜์—ญ์˜ value๋ฅผ ๋„˜๊ธด๋‹ค. e.target.value ์•ˆํ•ด๋„ ๋จ!
  5. <form> ํƒœ๊ทธ ์—†์ด <TextInput> ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, onSubmit == onSubmitEditing ์‚ฌ์šฉ.
  6. Firebase ๋‚ด๋ถ€ FireStore ์‚ฌ์šฉ ์‹œ ๊ทœ์น™ ์„ค์ •