๐Ÿ’•
ํ›„์›
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€113

[Web] ๋ธŒ๋ผ์šฐ์ € ๋„คํŠธ์›Œํฌ ํƒญ ๊ฐ„๋‹จํžˆ ๋ณด๋Š” ๋ฒ• ๊ฐ€๋”์”ฉ ์›น ๊ฐœ๋ฐœ ๊ด€๋ จ ์งˆ๋ฌธ์„ ๋ฐ›์„ ๋•Œ๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ๋ถ„๋“ค์ด ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ ๋„คํŠธ์›Œํฌ ํƒญ์˜ ์กด์žฌ๋ฅผ ๋ชจ๋ฅด๊ณ  ๊ณ„์‹œ๋”๋ผ๊ณ ์š”. F12ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— ๋“ค์–ด๊ฐ€๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ ํƒญ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋„ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ œ๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. โ‘  ๋„คํŠธ์›Œํฌ ๊ธฐ๋ก์„ ์ค‘์ง€ / ์žฌ๊ฐœํ•˜๋Š” ๋ฒ„ํŠผ โ‘ก ๋„คํŠธ์›Œํฌ ๊ธฐ๋ก ์ดˆ๊ธฐํ™” (clear) โ‘ข ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ ๋กœ๊ทธ๋ฅผ ๋ณด์กด (์™„์ „ ์œ ์šฉ) โ‘ฃ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ์ผœ์ ธ์žˆ๋Š” ๋™์•ˆ ์บ์‹œ ๋น„ํ™œ์„ฑํ™” ์ด ๋ถ€๋ถ„์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ์ €๋Š” ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์„ ์ฒดํฌํ•  ๋•Œ ์‚ฌ์šฉํ•ด์„œ, Fetch/XHR ๋ถ€๋ถ„๋งŒ ์ผœ๋†“๊ณ  ๋ด…๋‹ˆ๋‹ค. ๋กœ๊ทธ์—์„œ๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ์š”์ฒญํ•œ ์ฃผ์†Œ์™€ ์ƒํƒœ๋ฅผ.. 2023. 11. 21.
[Typescript] ํƒ€์ž… ๋‹จ์–ธ, ํƒ€์ž… ๊ฐ€๋“œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ์—์„œ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋Š”๋ฐ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ถ”๋ก ํ•œ ํƒ€์ž…์„ ๋ฌด์‹œํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํƒ€์ž… ๋‹จ์–ธ(Type Assertion)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. type AnimalType = "cat" | "dog"; let cat = "cat"; ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” cat ๋ณ€์ˆ˜๋ฅผ string์œผ๋กœ ์ถ”๋ก ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„ ์ฝ”๋“œ๋ฅผ ํƒ€์ž… ๋‹จ์–ธ ํ˜•์‹์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. type AnimalType = "cat" | "dog"; let cat = "cat" as AnimalType; ํƒ€์ž… ๋‹จ์–ธ์€ ์ปดํŒŒ์ผํƒ€์ž„์—์„œ๋งŒ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž… ์—๋Ÿฌ๋Š” ์žก์•„์ฃผ์ง€๋งŒ, ํƒ€์ž… ์บ์ŠคํŒ…๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์— ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜์ง€.. 2023. 11. 21.
[Next.js] AWS Polly API๋ฅผ ์‚ฌ์šฉํ•ด TTS ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ AWS API Gateway์™€ Lambda, Polly, S3๋ฅผ ํ™œ์šฉํ•˜์—ฌ TTS API๋ฅผ ๊ตฌํ˜„ํ•œ ํ›„, Next.js์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ๋Š” ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„  Lambda ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•ด์ค๋‹ˆ๋‹ค. index.mjs ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. import { PollyClient, StartSpeechSynthesisTaskCommand } from "@aws-sdk/client-polly" var polly = new PollyClient({ region: "ap-northeast-2" }); export const handler = async (event, context, callback) => { let message = "์ง€์ •๋œ ๋ฌธ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."; con.. 2023. 11. 15.
[Next.js] Naver Map API ์ด์šฉํ•ด์„œ ํ˜„์žฌ ์œ„์น˜ ์ง€๋„ ๋„์šฐ๊ธฐ [NextJS ์ง€๋„ ๊ฐœ๋ฐœ #1] next/script๋ฅผ ์ด์šฉํ•˜์—ฌ ๋„ค์ด๋ฒ„ ์ง€๋„ API๋ฅผ ์ด์šฉํ•˜์ž ๊ธ€์„ ๋งŽ์ด ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ๋„ค์ด๋ฒ„ ์ง€๋„ API ์‚ฌ์šฉ ์‹ ์ฒญ์„ ํ•ฉ๋‹ˆ๋‹ค. (https://www.ncloud.com/product/applicationService/maps) Application ๋“ฑ๋ก์„ ํด๋ฆญํ•˜์—ฌ, ์‚ฌ์šฉํ•  API๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ๋กœ์ปฌํ˜ธ์ŠคํŠธ๋„ ๋“ฑ๋ก ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (์ดํ›„์— ๋ฐฐํฌ ์‹œ์—๋Š” ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.) ์ธ์ฆ ์ •๋ณด๋ฅผ ํด๋ฆญํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ ์•„์ด๋””์™€ ์‹œํฌ๋ฆฟ์ด ๋‚˜์˜ค๋Š”๋ฐ, ์ด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ .env์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. NEXT_PUBLIC_MAP_CLIENT_ID= NEXT_PUBLIC_MAP_CLIENT_SECRET= ๋งต์˜ ํƒ€์ž…์„ ์„ ์–ธํ•ด์ค๋‹ˆ๋‹ค. (map.d.ts) pnpm i -D @types/naverma.. 2023. 11. 15.
[Python] ์˜์ˆ˜์ฆ ํ”„๋ฆฐํ„ฐ ๊ฐ€์ง€๊ณ  ๋†€๊ธฐ ๋‹น๊ทผ์—์„œ ๊ตฌํ•œ ์˜ค๋Š˜์˜ ์žฅ๋‚œ๊ฐ์ž…๋‹ˆ๋‹ค. ์˜์ˆ˜์ฆ ํ”„๋ฆฐํ„ฐ์˜ˆ์š”. ์ผ๋‹จ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋ฆฐํ„ฐ๋ผ์„œ, PC์— ์—ฐ๊ฒฐํ•ด์„œ ํ”„๋ฆฐํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์นœ๊ตฌ๋“คํ•œํ…Œ ํ…์ŠคํŠธ๋กœ ๋•๋‹ดํ•˜๊ธฐ ์™„์ „ ๊ฐ€๋Šฅ. ์•„๋ฌดํŠผ.. ๊ทธ๋ƒฅ ํ”„๋ฆฐํŠธ๋งŒ ํ•˜๋ฉด ์žฌ๋ฏธ์—†์œผ๋‹ˆ๊นŒ ๋ญ”๊ฐ€ ํ•ด๋ณด๊ธฐ ์œ„ํ•ด ํŒŒ์ด์ฌ์„ ์ผญ๋‹ˆ๋‹ค. PySide6, PIL, OpenCV๋ฅผ ํ™œ์šฉํ•ด์„œ ์›น์บ ์œผ๋กœ ์‚ฌ์ง„์„ ์ฐ์€ ํ›„, ์˜์ˆ˜์ฆ์œผ๋กœ ๋ฝ‘์•„๋ณผ ๊ฑฐ์˜ˆ์š”. import sys import cv2 import numpy as np import time from default_frame import image_frame from print_file import print_file from PySide6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayo.. 2023. 11. 13.
[๋ฐœํ‘œ] ํ•ด์ปคํ†ค 200% ์ฆ๊ธฐ๊ธฐ: ํ•ด์ปคํ†ค์ด ์ฒ˜์Œ์ธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ง„์ž…์žฅ๋ฒฝ ๋‚ฎ์ถ”๊ธฐ HTML ์‚ฝ์ž…๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค๊ณ ๋ ค๋Œ€ํ•™๊ต ์ค‘์•™ ์ปดํ“จํ„ฐ๋™์•„๋ฆฌ KUCC์—์„œ ์„ธ๋ฏธ๋‚˜๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋ถ€๋„๋Ÿฝ๊ตฐ์š”.. ๋ธ”๋กœ๊ทธ์—๋Š” ๋ฐœํ‘œ์—์„œ ์–ด๋–ค ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ๋Š”์ง€ ํ…์ŠคํŠธ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚จ๊ฒจ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค..^โ™ก^ํ•ด์ปคํ†ค์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?ํ•ด์ปคํ†ค์ด ์–ด๋–ค ์‹์œผ๋กœ ์ง„ํ–‰๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ํŒ€ ๋นŒ๋”ฉ ๋ฐ ์ฃผ์ œ ๊ณต๊ฐœ โ–ถ ์•„์ด๋””์—์ด์…˜ โ–ถ ๊ฐœ๋ฐœ โ–ถ (์ค‘๊ฐ„ ์Šคํ”ผ์น˜) โ–ถ ๊ฐœ๋ฐœ โ–ถ (๋ฉ˜ํ† ๋ง) โ–ถ ๋ฐœํ‘œ โ–ถ ์‹œ์ƒ์œผ๋กœ ์ง„ํ–‰๋˜๋Š”๋ฐ, ํ•ด์ปคํ†ค๋งˆ๋‹ค ๋‹น์—ฐํžˆ ์ฐจ์ด๋Š” ์žˆ๊ฒ ์ง€๋งŒ ํฐ ํ‹€์€ ๋น„์Šทํ•˜๊ฒŒ ์ง„ํ–‰๋ผ์š”.๋ฐœํ‘œ ์ „์— ์„ค๋ฌธ์กฐ์‚ฌ๋ฅผ ๋ฐ›๊ณ  ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ์š”, ํ•ด์ปคํ†ค์— ์ฐธ์—ฌํ•˜๊ธฐ ๊บผ๋ ค์ง€๋Š” ์ด์œ  ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฒƒ์ด '์‹ค๋ ฅ์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ', '๋‹ค๋ฅธ ํŒ€์›์—๊ฒŒ ํ๋ฅผ ๋ผ์น ๊นŒ๋ด'์˜€์Šต๋‹ˆ๋‹ค. '์ง„์ž…์žฅ๋ฒฝ์ด ๋†’์•„์„œ'์™€ ํ•จ๊ป˜ ๊ฒฐ๊ตญ ๋ณธ์ธ์˜ ์‹ค๋ ฅ์ด ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ด.. 2023. 10. 29.
[๋ฆฌ๋ทฐ] ํ˜„์‹ค์—์„œ๋Š” ํ•™์ƒ์ธ ๋‚ด๊ฐ€ SW ๊ต์œก๋ด‰์‚ฌ๋‹จ์—์„œ๋Š” ์„ ์ƒ๋‹˜? ๊ณ ๋ ค๋Œ€ํ•™๊ต SW๊ต์œก๋ด‰์‚ฌ๋‹จ์—์„œ ์ง„ํ–‰ํ•˜๋Š” ์— ๋ณด์กฐ๊ฐ•์‚ฌ๋กœ ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. SW๊ต์œก๋ด‰์‚ฌ๋‹จ์€ SW์ค‘์‹ฌ๋Œ€ํ•™์—์„œ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ์ฐพ์•„๊ฐ€๋Š” ์บ ํ”„๋‚˜ ์ฐพ์•„์˜ค๋Š” ์บ ํ”„, ๋ชจ๋‘์˜ ์บ ํ”„ ๋“ฑ์„ ๊ฐœ์ตœํ•˜๊ณ  ์žˆ์–ด์š”. ์ฐพ์•„๊ฐ€๋Š” ์บ ํ”„๋Š”, ๋„์„œ๋ฒฝ์ง€ ์ง€์—ญ์˜ ํ•™๊ต์— ์ง์ ‘ ์ฐพ์•„๊ฐ€์„œ ์ง„ํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ต์œก ์บ ํ”„์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ์บ ํ”„๋Š” ๊ฐ•ํ™”๋„์—์„œ ์ง„ํ–‰๋˜์—ˆ๊ณ , ์ €๋Š” ๊ฐ•ํ™”๊ณ ๋“ฑํ•™๊ต์—์„œ ๊ฐ•์˜๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”. ์ด๋Ÿฐ ๊ฐ•์˜์— ๊ฐ•์‚ฌ๋กœ ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์ด๋‹ค ๋ณด๋‹ˆ ๊ฑฑ์ •๋„ ๋งŽ๊ณ , ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•ด์•ผ ํ• ์ง€ ๊ฐ๋„ ์ž˜ ์•ˆ ์™”๋Š”๋ฐ์š”. ๊ฐ€์น˜ํ™•์‚ฐํŒ€ ์„ ์ƒ๋‹˜๋“ค์ด ์ˆ˜์—… ์ž๋ฃŒ์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ๋„ ์ฃผ์‹œ๊ณ , ์ˆ˜์—…์— ์ž์œจ๊ถŒ๋„ ์ฃผ์…”์„œ ๋งŽ์ด ๋„์›€๋ฐ›์•˜์–ด์š”. ์ œ๊ฐ€ ๊ฐ•์˜๋ฅผ ๋งก์€ ๋ถ€๋ถ„์€ ํŒŒ์ด์ฌ ๊ธฐ์ดˆ์˜€์Šต๋‹ˆ๋‹ค. ์ˆ˜์—… ์ž๋ฃŒ๋Š” ๊ธฐ์กด PPT์™€ ํŒŒ์ด์ฌ ๊ธฐ์ดˆ ์ฑ…๋“ค์„ ํ™œ์šฉํ•ด์„œ ์ œ์ž‘ํ•˜์˜€๊ณ , ๊ฐ•์˜ ์ฐธ๊ณ ์ž๋ฃŒ๋„ ๋งˆํฌ๋‹ค์šด.. 2023. 10. 24.
[๋ฆฌ๋ทฐ] ์นด์นด์˜ค๋ธŒ๋ ˆ์ธ ํŒจ์ŠคํŒŒ์ธ๋” 2๊ธฐ ํšŒ๊ณ  '์นด์นด์˜ค๋ธŒ๋ ˆ์ธ ํŒจ์ŠคํŒŒ์ธ๋”'๋Š” ์นด์นด์˜ค๋ธŒ๋ ˆ์ธ์—์„œ ์ง„ํ–‰ํ•œ AI ๊ด€๋ จ ์ธํ„ด์‹ญ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ 2๊ธฐ์—์„œ๋Š” ๋ชฐ์ž…, ์„ฑ์žฅ, ๋…ธ๋งˆ๋“œ ๋“ฑ์˜ ํ‚ค์›Œ๋“œ ํ•˜์—์„œ ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. '์ž์‚ฌ ์–ธ์–ด ๋ชจ๋ธ์˜ ์ƒˆ๋กœ์šด ํ™œ์šฉ ๊ธฐํšŒ๋ฅผ ๋ชจ์ƒ‰ํ•˜๋ฉด์„œ ์ฐธ๊ฐ€์ž์—๊ฒŒ ์„œ๋น„์Šค ๋ฐ ์ œํ’ˆ ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ด ์ธ์žฌ๋“ค์˜ ์„ฑ์žฅ์„ ๋•๊ฒ ๋‹ค'๋Š” ์นด์นด์˜ค๋ธŒ๋ ˆ์ธ์˜ ๋ชฉํ‘œ์— ๋งž๊ฒŒ, LLM์„ ํ™œ์šฉํ•œ ์ œํ’ˆ์„ ์ง์ ‘ ๊ธฐํš๋ถ€ํ„ฐ ๊ฐœ๋ฐœ๊นŒ์ง€ ํ•ด๋‚ด๋Š” ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ์ง‘ ๋ชจ์ง‘์€ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ, ์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ, ์„œ๋น„์Šค ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์˜ ์„ธ ๋ถ„์•ผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (์ €๋Š” ์ด ํ”„๋กœ๊ทธ๋žจ์— ์ฐธ์—ฌํ•˜๋ฉด์„œ ๊ตณ์ด ๋ถ„์•ผ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ๋ฝ‘์ง€ ์•Š์•„๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์–ด์š”.) [๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ] - ๋ชจ๋ฐ”์ผ ์•ฑ๊ฐœ๋ฐœ์— ๊ด€์‹ฌ์ด ๋งŽ์œผ์‹ ๋ถ„ - And.. 2023. 10. 4.
[์ธ์ฆ] JWT๋กœ ๋กœ๊ทธ์ธ ์ธ์ฆ 2. Access Token๊ณผ Refresh Token ์‚ฌ์šฉํ•˜๊ธฐ (Koa, next-auth) 3๋…„ ์ „ ๊ธ€์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ, ๋ณด์•ˆ ๋ฌธ์ œ ๊ฐœ์„ ์„ ์œ„ํ•ด Access Token๊ณผ Refresh Token์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฑ์—”๋“œ(Koa)์™€ ํ”„๋ก ํŠธ์—”๋“œ(Next, next-auth)์—์„œ ๋‹ค๋ฃจ์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  Access Token๊ณผ Refresh Token์˜ ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Access Token: ์ธ์ฆ์ด ํ•„์š”ํ•œ ์š”์ฒญ๋งˆ๋‹ค, ์š”์ฒญ์— ํฌํ•จํ•˜์—ฌ ์ธ์ฆ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ Refresh Token: Access Token์ด ๋งŒ๋ฃŒ๋˜๋ฉด, ์ƒˆ๋กœ์šด Access Token ๋ฐœ๊ธ‰์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ ํ† ํฐ์„ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”, ์ด๋ฏธ ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ ๊ฐ„๋‹จํžˆ ์ด์•ผ๊ธฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Access Token์ด ํƒˆ์ทจ๋  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด Access Token์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌ๋ฉด A.. 2023. 6. 9.
[Koa] Koa์—์„œ apidoc ์‚ฌ์šฉํ•˜๊ธฐ Swagger๋ณด๋‹ค ๊ฐ€๋ณ๊ณ , ์„ค์น˜๊ฐ€ ์‰ฌ์šด apidoc์„ Koa์—์„œ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ API์™€ ์‘๋‹ต์„ ๊ธฐ์žฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘์€ ํ”„๋กœ์ ํŠธ์—์„œ ์ ํ•ฉํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. npm install apidoc -g ์šฐ์„  ์ „์—ญ์œผ๋กœ apidoc์„ ์„ค์น˜ํ•ด์ค€ ํ›„, ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— apidoc.json์ด๋ผ๋Š” ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋‹ค์Œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค. { "name": "์ด๋ฆ„", "version": "1.0.0", "description": "ํŽ˜์ด์ง€ ์„ค๋ช…", "title": "ํŽ˜์ด์ง€ ์ œ๋ชฉ", "url": "http://localhost:4000/apidoc" } ๊ทธ ํ›„ apidoc์ด ์ฝ์–ด์˜ฌ ํŒŒ์ผ์— /** * @api {get} /api/user/:id Request User by ID * * @apiVer.. 2023. 6. 5.
[Network] HTTP์— ๋Œ€ํ•ด์„œ HTTP๋ž€? ์›น ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์— ์ด์šฉ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๊ฐ€ ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. GET: ๋ฆฌ์†Œ์Šค์˜ ์กฐํšŒ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์›น ํŽ˜์ด์ง€๋‚˜ ์ด๋ฏธ์ง€ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. POST: ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ถœํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํผ ๋ฐ์ดํ„ฐ์˜ ์ „์†ก์ด๋‚˜ ํŒŒ์ผ ์—…๋กœ๋“œ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค. ์š”์ฒญ์— body๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PUT: ๋ฆฌ์†Œ์Šค์˜ ๊ต์ฒด๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. PATCH: ๋ฆฌ์†Œ์Šค์˜ ์ˆ˜์ •์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. DELETE: ๋ฆฌ์†Œ์Šค์˜ ์‚ญ์ œ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. HEAD: ๋ฉ”์„ธ์ง€ ํ—ค๋”(๋ฌธ์„œ ์ •๋ณด)๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. GET๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์ด์ง€๋งŒ, ์‹ค์ œ ๋ฌธ์„œ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฌธ์„œ .. 2023. 6. 1.
[๋ฆฌ๋ทฐ] ์ œ3ํšŒ KUCC ๊ฒŒ์ž„์žผ ์ฐธ๊ฐ€ ํ›„๊ธฐ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์„ ์ข‹์•„ํ•˜๋Š” ์›น ๊ฐœ๋ฐœ์ž๋กœ์จ, ์ด๋ฒˆ์— ๋ฒŒ์จ ์„ธ ๋ฒˆ์งธ ๋™์•„๋ฆฌ ๊ฒŒ์ž„์žผ์— ์›น์œผ๋กœ ์ฐธ๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฒŒ์ž„์žผ ์ฃผ์ œ๋Š” ๊ฐ€์ •, ์Šค์Šน, ์–ด๋ฆฐ์ด (5์›”์ด๋‹ˆ๊นŒ์š”.) ์ค‘ ๋žœ๋ค์ด์—ˆ๊ณ , ์ €ํฌ ์กฐ๋Š” '์Šค์Šน'์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ '์Šค์Šน'์ด๋ผ๋Š” ์ฃผ์ œ๋กœ ์ด๋ฒˆ์— ๊ฐœ๋ฐœํ•œ ๊ฒŒ์ž„์€ ๋‚œ ์„ ์ƒ์ด๊ณ  ๋„Œ ํ•™์ƒ์ด์•ผ! ์ž…๋‹ˆ๋‹ค. ๋‚œ ์„ ์ƒ์ด๊ณ  ๋„Œ ํ•™์ƒ์ด์•ผ! sensei-nu.vercel.app ์‚ฌ์‹ค ๊ฒŒ์ž„์žผ ์ฐธ๊ฐ€ ์ „๋‚ ์— ์›น์œผ๋กœ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ž„์ด ๋ญ๊ฐ€ ์žˆ์„๊นŒ ์ƒ๊ฐํ•ด๋ณด๋‹ค๊ฐ€, ํฌ์ธํŠธ ์•ค ํด๋ฆญ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ์œก์„ฑ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒŒ์ž„์„ ๊ณ ๋ฏผํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋ฐฐ๊ฒฝ ์ง€์‹์ด ์žˆ๋Š” ๋ถ„์•ผ์˜ ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ  ์‹ถ์–ด์„œ, 3๋…„๋™์•ˆ ํ•™์ƒ์—๊ฒŒ ๊ณต๋ถ€๋ฅผ ์‹œํ‚ค๊ณ  ๋‚ด์‹ ์ด๋‚˜ ์ˆ˜๋Šฅ ์„ฑ์ ์œผ๋กœ ๋Œ€ํ•™์„ ๋ณด๋‚ด๋Š” ์œ ๋จธ์„ฑ์ด ๊ฐ€๋ฏธ๋œ ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ.. 2023. 5. 29.