์ ์ฒด ๊ธ
HTTP Method
›ํ๋ก์ ํธ๋ฅผ ์ ๋ฆฌํ๋ค๊ฐ API ํต์ ์์ ์ฌ์ฉํ๋ http ๋ฉ์๋๊ฐ ๊ถ๊ธํด์ ธ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค ๐ HTTP ๋ฉ์๋๋? : ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์ฌ์ฉ์ ์์ฒญ์ ๋ชฉ์ ์ ์๋ฆฌ๋ ๊ฐ์ด๋๋ผ์ธ์ด๋ค. ์ด๋ฌํ ๊ฐ์ด๋๋ผ์ธ์ ์์ง์ผ์ผ RESTfulํ API๋ฅผ ์์ฑํ ์ ์๋ค๊ณ ํ๋ค. RESTfulํ API๋ REST ํน์ง์ ์งํจ API์ธ๋ฐ, ์ฌ๊ธฐ์ REST๋ http ํต์ ์์ ์ด๋ค ์์์ ๋ํ CRUD(Create, Read, Update, Delete) ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด Resource(URI)๋ก ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค. ํ. (*URI์ URL์ ํฌํจํ๋ ๊ฐ๋ !) ์์ง๊น์ง๋ REST๋ฅผ API๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค ๊ฒ์ธ๊ฐ์ ๋ํ ํ์ค ์ ๋๋ก ์๊ฐํ๊ณ ์๋ค. ์๋ฌดํผ ์ด๋ฌํ RESTful API์ ๊ตฌ์ฑ์์ ์ค ํ๋์ธ Met..
[AWS] EC2 ์ธ์คํด์ค - SSH ์ฐ๊ฒฐ ์ Error ํด๊ฒฐ ๋ฐฉ๋ฒ
์ฒ์์๋ linux ์ฉ AWS EC2 ์ธ์คํด์ค ์์ฑ ํ SSH๋ฅผ ํตํด ์ฐ๊ฒฐ์ ์๋ํ๋ค. ๋ด๊ฐ ssh ์ฐ๊ฒฐ์ ์ํด ์์ฑํ ๋ช ๋ น์ด: ssh -i *.pem linux@{๋ด ํผ๋ธ๋ฆญ IPv4 ์ฃผ์} ์ฒซ ๋ฒ์งธ๋ก ์ง๋ฉดํ ๋ฌธ์ : Permissions 0644 for 'flask.pem' are too open. ๋ค์ด๋ก๋ํ ํค ํ์ด๊ฐ too open ๋์ด ์๊ธฐ ๋๋ฌธ์ connecting์ ๊ฑฐ์ ๋นํ๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ: ์๋ ์ฝ๋๋ก ํค ํ์ด์ ๊ถํ์ ์์ ์์๊ฒ๋ง ์ฝ๊ธฐ ๊ถํ์ด ์๋๋ก ๋ณ๊ฒฝํด์ค๋ค. chmod 400 flask.pem ๋ ๋ฒ์งธ๋ก ์ง๋ฉดํ ๋ฌธ์ : Permission denied (publickey, gssapi-keyex, gssapi-with-mic). ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ด instance user name์ ์ ๋๋ก ์ ..
[JavaScript] ๋๊ธฐ & ๋น๋๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋๊ฐ ์์ฑ๋ ์์๋๋ก ์์ ์ ์ฒ๋ฆฌํ๋ฉฐ, ์ด์ ์์ ์ด ์งํ ์ค์ผ ๋๋ ๋ค์ ์์ ์ ์ํํ์ง ์๊ณ ๊ธฐ๋ค๋ฆฐ๋ค. ์ด๋ฐ Task ์ฒ๋ฆฌ ๋ฐฉ์์ ๋๊ธฐ ๋ฐฉ์์ ์ฒ๋ฆฌ๋ผ๊ณ ํ๋ค. function TaskA() { console.log("TASK A"); } function TaskB() { console.log("TASK B"); } function TaskC() { console.log("TASK C"); } TaskA(); TaskB(); TaskC(); ๋๊ธฐ์ ์ฒ๋ฆฌ์ ๋จ์ ์ ํ๋์ ์์ ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด ๋ชจ๋ ์์ ์ด ํด๋น ์์ ์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง STOP ๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด ํ๋ฆ์ด ์ง์ฒด๋๋ค. ์ฆ, ์ฑ๋ฅ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋ค๋ฅธ ์ธ์ด(C, C++ ... )์์๋ ๋ฉํฐ์ค๋ ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์๋ ์์ง๋ง..
[JavaScript] spread | ์ ๊ฐ ์ฐ์ฐ์
์คํ๋ ๋ ์ฐ์ฐ์('...')๋ ์ฐ๊ฒฐ, ๋ณต์ฌ ๋ฑ์ ์ฉ๋๋ก ์ฌ์ฉ๋๋ฉฐ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ฅผ ํ ์ค๋ก ํผ์น๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค. ๋ฐฐ์ด์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. const coffee = ["์๋ฉ๋ฆฌ์นด๋ ธ", "๋ฐ๋๋ผ๋ผ๋ผ"]; const juice = ["ํฌ๋์ฃผ์ค", "์ค๋ ์ง์ฃผ์ค", "ํ ๋งํ ์ฃผ์ค"]; const menu = [...coffee, "์๋ก์ด ์๋ฃ", ...juice]; console.log(menu); // ["์๋ฉ๋ฆฌ์นด๋ ธ", "๋ฐ๋๋ผ๋ผ๋ผ", "์๋ก์ด ์๋ฃ", "ํฌ๋์ฃผ์ค", "์ค๋ ์ง์ฃผ์ค", "ํ ๋งํ ์ฃผ์ค"] ์๋นํ ์ง๊ด์ ์ธ ์์๋ผ๊ณ ์๊ฐํ๋ค ^-^! ๊ฐ์ฒด์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. const latte = { base: "milk", from: "Starbucks" }; const bani..
[JavaScript] ๋น๊ตฌ์กฐํ ํ ๋น ๊ทธ๋ฆฌ๊ณ SWAP
๋ฐฐ์ด์ ๋น๊ตฌ์กฐํ ํ ๋น ๋ฐฐ์ด์์ ๋น๊ตฌ์กฐํ ํ ๋น์ ์ฌ์ฉํ๋ค๋ฉด, ๋ฐฐ์ด ์์ ์๋ ๊ฐ์ ์ถ์ถํด์ ๋ณ์ / ์์๋ก ๋ฐ๋ก ์ ์ธ์ด ๊ฐ๋ฅํ๋ค. ๋ฐฐ์ด ์์ ์๋ ์์๋ฅผ ์๋ก ์ ์ธํด์ฃผ๊ณ ์ถ์ ๋ ๊ต์ฅํ ์ ์ฉํ ๋ฌธ๋ฒ์ด๋ค. # Case 1: ๊ธฐ์กด ํ ๋น ๋ฐฉ๋ฒ let colors = ["red", "green", "blue"]; let color0 = colors[0]; let color1 = colors[1]; let color2 = colors[2]; console.log(color0, color1, color2); // red green blue # Case 2: ๋น๊ตฌ์กฐํ ํ ๋น let [color1, color2, color3] = ["red", "green", "blue"]; console.log(color0, color..
[Swift] Protocols | Delegate๋ฅผ ์ด์ง ๊ณ๋ค์ธ
ํ๋กํ ์ฝ์ด๋? ํ๋กํ ์ฝ: ์ต์ํ์ผ๋ก ๊ฐ์ ธ์ผํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค. ํด๋น Object๊ฐ task๋ฅผ ์ํํ๊ธฐ ์ํด ๋ฐ๋์ ๊ตฌํํด์ผํ๋ ๊ฒ์ ์ ์ํด์ค๋ค. Java์ interface์ ๋น์ทํ ์ญํ ์ ํ๋ค. protocol์ ์ ์ธ์ด๊ณ , type์์ ๊ตฌํํด์ค์ผํ๋ค. ex1) Swift์์ ์ ๊ณตํ๋ ํ๋กํ ์ฝ ์์ ์ค ํ๋์ธ CustomStringConvertible์ ์ฌ์ฉํ ์ฝ๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ ํ๋๋ก class๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. var greeting = "Hello, playground" class person: CustomStringConvertible { let name: String let age: Int let isFemale: Bool init(name: String, age: Int..
[JavaScript] Truthy & Falsy
Truthy: ์ฐธ์ด ์๋๋ผ ์ฐธ๊ฐ์ ๊ฐ Falsy: ๊ฑฐ์ง์ด ์๋๋ผ ๊ฑฐ์ง๊ฐ์ ๊ฐ ์ด๊ฒ ๋ฌด์จ ์๋ฆฌ์ธ๊ฐ ์์๋ฅผ ๋ณด์ Truthy ex: {} ๋น ๊ฐ์ฒด [] ๋น ๋ฐฐ์ด 0์ ์ ์ธ ํ ์ซ์๊ฐ ๋น ๋ฌธ์์ด์ ์ ์ธํ ๋ฌธ์์ด Falsy ex: null defined 0 ๋น ๋ฌธ์์ด NaN ์์๋ฅผ ๋ณด๋๊น ๊ฐ์ด ์จ๋ค. ํ์ด์ฌ์์๋ ๋น ๋ฐฐ์ด์ธ์ง ํ์ธํ ๋ # python arr = [] if not arr: print("๋น ๋ฐฐ์ด์ ๋๋ค.") else: print("๋น ๋ฐฐ์ด์ด ์๋๋๋ค.") ์ ์์์ฒ๋ผ arr๋ฅผ true/false๋ก ๋ฐํํ์ฌ ํ๋จํ๋๋ฐ, ์ด๋ฐ ๊ฑธ truthy/falsy๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ๋ค. ์์ Python ์์๋ฅผ JavaScript๋ก ๋ฐ๊ฟ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. # JavaScript const arr = [] if (!a..
[Algorithm] ํ | ์ต๋ ํ, ์ต์ ํ
heap์ด๋? : ์ฐ์ ์์ ํ(priority queue)๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก, ์์ ์ด์งํธ๋ฆฌ๋ฅผ base๋ก ํ ์๋ฃ๊ตฌ์กฐ. ์ฐ์ ์์ ํ๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ๋จผ์ ์ญ์ ํ๋ ์ ์ด ํน์ง ์ต์ ํ: ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ํญ์ ์์ ํ ์ต๋ ํ: ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ํญ์ ํฐ ํ ์๋ฃ๊ตฌ์กฐ ์ถ์ถ๋๋ ๋ฐ์ดํฐ ์คํ(stack) ๊ฐ์ฅ ๋์ค์ ์ฝ์ ๋ ๋ฐ์ดํฐ ํ(queue) ๊ฐ์ฅ ๋จผ์ ์ฝ์ ๋ ๋ฐ์ดํฐ ์ฐ์ ์์ ํ(priority queue) ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ ์ต์ ํ (min heap) : ๊ฐ์ด ๊ฐ์ฅ ๋ฎ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ์ญ์ import heapq heap = [] heapq.heappush(heap, 5) heapq.heap..