๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿšถ๐Ÿป์–ด๋””๋กœ ๊ฑท๊ณ ์žˆ๋‹ˆ?

(28)
๐Ÿšถ๐Ÿป#28 [Apollo Server & GraphQL & Prisma] - ์„œ๋ฒ„์„ธํŒ… GraphQL Node.js๋ฅผ ์ด์šฉํ•ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋‚˜๋งŒ์˜ ๋ช…๋ น์–ด๋ฅผ ๋งŒ๋“ค๊ณ  (Query, Mutation, TypeDefs, resolvers ) CRUD ์š”์ฒญ, ์‘๋‹ต์„ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” API ( ์—ฐ๊ฒฐ๋‹ค๋ฆฌ ) Apollo Server GraphQL ์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” Node.js ์˜ ํŒจํ‚ค์ง€ Prisma prisma ๋Š” ORM ์œผ๋กœ์จ GraphQL ํƒ€์ž…์œผ๋กœ DB ์ฟผ๋ฆฌ ์กฐํšŒ, ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋“ฑ์„ ๋‹ด๋‹นํ•œ๋‹ค GraphQL ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ์˜ ๋ผˆ๋Œ€๋ฅผ ๋งŒ๋“ค๊ณ , prisma ๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ ์˜จ๋‹ค Step 01 - package.json ๋งŒ๋“ค๊ธฐ /* package.json ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด */ npm init --yes Step 02 - ํŒจํ‚ค์ง€..
๐Ÿšถ๐Ÿป#27 [React & RN] - Flatlist Flatlist vs ScrollView ScrollView ๋Š” ScrollView ์•ˆ์— ๋“ค์–ด๊ฐˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค Flatlist ๋Š” ํ™”๋ฉด์ƒ์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค ์‚ฌ์šฉ๋ฒ• ๋ฐ Props import React from "react"; import { FlatList } from "react-native"; ( )} /> ํ•„์ˆ˜ Props ๋Š” data ์™€ renderItem ์ž…๋‹ˆ๋‹ค data ๋Š” FlatList ์—์„œ ๋ณด์—ฌ์ค„ data array ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค renderItem ์€ data ์— ์ž…๋ ฅํ•œ data array ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ Œ๋”๋ง ์‹œํ‚ต๋‹ˆ๋‹ค onRefresh ๋Š” ์Šคํฌ๋กค ํ•ด์„œ ์ƒˆ๋กœ๊ณ ์นจ ํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค refreshing ์€ boolean ํ˜•์œผ๋กœ ์ƒˆ๋กœ๊ณ ์นจ์ด ์ง„ํ–‰์ค‘์ธ์ง€ ํŒ๋ณ„ํ•ฉ๋‹ˆ๋‹ค ItemSepar..
๐Ÿšถ๐Ÿป#26 [React & RN] - @react-navigation/native, Tab, Stack React Native Navigation, Tab, Stack /* ๋„ค๋น„๊ฒŒ์ด์…˜ ์„ค์น˜๋ฒ• */ npm install @react-navigation/native npm install react-native-safe-area-context npm install react-native-screens /* Mac OS */ npx pod-install ios /* Tab ์„ค์น˜๋ฒ• */ npm install @react-navigation/bottom-tabs /* Stack ์„ค์น˜๋ฒ• */ npm install @react-navigation/native-stack How to used /* App.js */ import React from "react"; import { NavigationContainer } fr..
๐Ÿšถ๐Ÿป#25 [Javascript] - export ์™€ export default ์˜ ์ฐจ์ด export /* color.js */ export const YELLOW_COLOR = "#ffa801"; export const BLACK_COLOR = "#1e272e"; export const DARK_GREY = "#d2dae2"; export const LIGHT_GREY = "#808e9b"; /* Tabs.js (color.js ์˜ export ๋˜์–ด์žˆ๋Š” ๋ณ€์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” jsํŒŒ์ผ์ž…๋‹ˆ๋‹ค) */ import { BLACK_COLOR, DARK_GREY, LIGHT_GREY, YELLOW_COLOR } from "../colors"; export default /* Movies.js */ import React from "react"; import { View, Text } from "react..
๐Ÿšถ๐Ÿป#24 [React & RN] - ์•ฑ์ด ์‹คํ–‰๋˜๊ธฐ ์ „ Preload ํ•˜๋Š” ๋ฐฉ๋ฒ• Apploading /* ์„ค์น˜๋ฒ• */ expo install expo-app-loading /* ์‚ฌ์šฉ๋ฒ• */ import AppLoading from 'expo-app-loading'; RN ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ฑ์ด ๋กœ๋”ฉ์ค‘ ์ผ๋•Œ splash ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค Apploading ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— font, image, ์•ฑ ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ DB ์ •๋ณด ๋“ฑ๋“ฑ ํ•„์š”ํ•œ๊ฒƒ๋“ค์„ ๋ถˆ๋Ÿฌ์˜ฌ์ˆ˜ ์žˆ๋‹ค Case 01 - Apploading Props ์‚ฌ์šฉํ•˜๊ธฐ import AppLoading from "expo-app-loading"; import React, { useState } from "react"; import * as Font from "expo-font"; import { Text, Image } from..
๐Ÿšถ๐Ÿป#23 [React & RN] - While trying to resolve module '@apollo/client' from file Error Message While trying to resolve module '@apollo/client' from file ... ๋‹จ์ˆœํžˆ apolloprovider ๋กœ app.js ์˜ return ๋˜๋Š” ๋ถ€๋ถ„์„ ๊ฐ์‹ธ์ฃผ์—ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค ํ•ด๊ฒฐ๋ฐฉ๋ฒ• project root ๊ฒฝ๋กœ์— metro.config.js ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค const { getDefaultConfig } = require("metro-config"); const { resolver: defaultResolver } = getDefaultConfig.getDefaultValues(); exports.resolver = { ...defaultResolver, sourceExts: [...defaultResolver.sourceExts, "..
๐Ÿšถ๐Ÿป#22 [React & RN] - some() ๊ณผ filter() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒดํฌ๋ฐ•์Šค ํ† ๊ธ€ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ Some() some()์€ ๋ฐฐ์—ด์˜ ๊ฐ ์—˜๋ฆฌ๋จผํŠธ์— ๋Œ€ํ•ด์„œ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ํ•˜๋‚˜๋ผ๋„ true๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค ํ•˜๋‚˜๋ผ๋„ true๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค ๋ชจ๋‘ false์ธ ๊ฒฝ์šฐ๋งŒ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค /* example */ let testArray = ["walker", "jjh", "tistory"]; const someExample = testArray.some((item) => item == "jjh"); console.log(someExample); Toggle Function /* example */ const [checkbox, setCheckbox] = useState([]); const dataArray = ["walker", "jjh", "tistory"]; const handleC..
๐Ÿšถ๐Ÿป#21 [React] - filter() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ How to used it? ์ง€๋‚œ ๊ธ€์— filter() ์™€ find() ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์ •๋ฆฌํ–ˆ๋˜ ๊ธ€์ด ์žˆ๋‹ค ๊ทธ๊ฑธ ๋ฐ”ํƒ•์œผ๋กœ filter() ์™€ includes() ์™€ useState() ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„์— ํ˜ธ์ถœ ์—†์ด ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ดค๋‹ค /* ๊ฐ„๋‹จํ•œ ์ฐธ๊ณ ์šฉ ์†Œ์Šค */ import React from 'react'; const names = ['James', 'John', 'Paul', 'Ringo', 'George']; function App() { return ( {names.filter(name => name.includes('J')).map(filteredName => ( {filteredName} ))} ); } export default App; filter() ์†์— inclu..
๐Ÿšถ๐Ÿป#20 [Nest.js] -ValidationPipe + class-validator ์‚ฌ์šฉํ•˜์—ฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๊ธฐ Case ์˜ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ คํ•œ๋‹ค title, year, genres ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ์ž…๋ ฅ๋ฐ›๋Š” ๊ฐ’๋“ค์˜ Type Validation ๊ณผ ์ž…๋ ฅ๋ฐ›์„์ˆ˜ ์—†๋Š” ๊ฐ’๋“ค์— ๋Œ€ํ•œ Validation ์„ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค Step 01 - ValidationPipe Import ํ•˜๊ธฐ /* main.ts ํŒŒ์ผ */ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { ValidationPipe } from '@nestjs/common'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes( n..
๐Ÿšถ๐Ÿป#19 [Nest.js] - ์„ค์น˜๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ Nest.js Node.js ๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ• ๋•Œ, ์กฐ๊ธˆ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ณธ์ ์œผ๋กœ TypeScript ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์—, TypeScript ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค Nest.js ์„ค์น˜ํ•˜๊ธฐ /* ์„ค์น˜ */ npm install -g @nestjs/cli /* nest project ์ƒ์„ฑ */ nest new project-name Nest.js ๊ตฌ์กฐ Nest.js ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ main.ts ํŒŒ์ผ์„ ์ฝ๋Š”๋‹ค src ํด๋”๋กœ ์ฐพ์•„์˜ค๋Š” ์ด์œ ๋Š” nest-cil.json ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์•Œ์ˆ˜์žˆ๋‹ค main.ts > app.module.ts > app.modules.ts ํŒŒ์ผ์— ์„ ์–ธ๋œ controller ์™€ service ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ Nest.js Controller import { Cont..