Webpack vs Vite: ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ ๋„๊ตฌ ๋น„๊ต
ยท
๐ŸงฉFront-End
๐Ÿ’Ž์›นํŒฉ(Webpack)https://webpack.kr/ webpack์›นํŒฉ์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉ์ ์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก JavaScript ํŒŒ์ผ์„ ๋ฒˆ๋“ค๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด์ง€๋งŒ, ๋ฆฌ์†Œ์Šค๋‚˜ ์• ์…‹์„ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฒˆ๋“ค๋ง ๋˜๋Š” ํŒจํ‚ค์ง•ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.webpack.kr ์›นํŒฉ์€ ํ”„๋ก ํŠธ์—”๋“œ ์ƒํƒœ๊ณ„์—์„œ ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋œ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋กœ, ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›นํŒฉ์€ ํŒŒ์ผ์„ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, CSS, ์ด๋ฏธ์ง€ ๋“ฑ)๋ฅผ ๋ฒˆ๋“ค๋งํ•˜์—ฌ ์ตœ์ ํ™”๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.์›นํŒฉ(Webpack) ์ฃผ์š” ๊ฐœ๋…์ž‘๋™ ๋ฐฉ์‹ : ์›นํŒฉ์€ ๋ชจ๋“  ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ํฐ ๋ฒˆ๋“ค(bundle)๋กœ ๋ฌถ์–ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‰ฝ๊ฒŒ ๋กœ๋“œํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค..
Monica : ์›น ๋ฒˆ์—ญ์— ์œ ์šฉํ•œ AI ๋ณด์กฐ ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ
ยท
๐Ÿ”๊ธฐํƒ€
๋ฉ”์ธ ์‚ฌ์ดํŠธ Monica - Your ChatGPT AI Assistant Chrome Extension monica.imChrom ์›น ์Šคํ† ์–ด Monica๏ผš๋‹น์‹ ์˜ ChatGPT ์ธ๊ณต์ง€๋Šฅ ๋„์šฐ๋ฏธ & GPT-4o, o1, Claude 3.5, Gemini 1.5 - Chrome ์›น ์Šคํ† ์–ด์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ํ•œ ๋ฒˆ ํด๋ฆญํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ๊ท€ํ•˜์˜ AI ๋งŒ๋Šฅ ๋„์šฐ๋ฏธ๊ฐ€ GPT-4o, Claude 3, Gemini Pro 1.5, Llama 3 70B ๋“ฑ์˜ ๊ณ ๊ธ‰ ๋ชจ๋ธ์„ ํƒ‘์žฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.chromewebstore.google.com ์›น ๋ฒˆ์—ญ ๐Ÿ‘๐Ÿป ์ฐธ๊ณ  Monica - AI ๋ณด์กฐ ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ (์ฑ—GPT, ์œ ํŠœ๋ธŒ ์˜์ƒ ์š”์•… ๊ธฐ๋Šฅ ํฌํ•จ) - DeepdAiveMonica - AI ๋ณด์กฐ ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ..
PWA : ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ์›น ์•ฑ(Progressive Web App), ์›น๊ณผ ์•ฑ์˜ ๊ฒฐํ•ฉ
ยท
๐Ÿ”๊ธฐํƒ€
PWA(Progressive Web App)๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ์•ฑ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„ํ•œ ๊ธฐ์ˆ ๋กœ, ์‚ฌ์šฉ์ž๋Š” URL์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜์ง€๋งŒ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ๊ณผ ์œ ์‚ฌํ•œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ํ˜• ์•ฑ์˜ ์žฅ์ ์„ ์›น์— ํ†ตํ•ฉํ•ด ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌํ•œ ์ ‘๊ทผ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.์ฃผ์š” ํŠน์ง•์•ฑ ์„ค์น˜ : PWA๋Š” ํ™ˆ ํ™”๋ฉด์— ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์˜คํ”„๋ผ์ธ ์‚ฌ์šฉ : ์„œ๋น„์Šค ์›Œ์ปค(Service Worker)๋ฅผ ํ†ตํ•ด ์˜คํ”„๋ผ์ธ ์ƒํƒœ์—์„œ๋„ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ‘ธ์‹œ ์•Œ๋ฆผ : ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์•Œ๋ฆผ์„ ๋ฐ›์•„ ์‚ฌ์šฉ์ž ์ฐธ์—ฌ๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.๋ฐ˜์‘ํ˜• ๋””์ž์ธ : ๋ชจ๋“  ๊ธฐ๊ธฐ์—์„œ ๋™์ผํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.์žฅ์ ๋น ๋ฅธ ์„ฑ๋Šฅ๊ณผ ์ ‘๊ทผ์„ฑ : ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๊ด€๊ณ„์—†์ด ๋น ๋ฅด๊ฒŒ ๋กœ๋”ฉ๋ฉ๋‹ˆ๋‹ค.์ €์žฅ ๊ณต๊ฐ„ ์ ˆ์•ฝ : ์•ฑ ์„ค์น˜ ์—†์ด ๊ณต๊ฐ„์„ ์ ๊ฒŒ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.๊ฐœ๋ฐœ ๋น„์šฉ ์ ˆ๊ฐ : ..
[Android] ์•ˆ๋“œ๋กœ์ด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ๋น„๊ต(๊ฐœ๋ณ„ ๋ฆฌ์Šค๋„ˆ ์„ค์ • vs. View.OnClickListener ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„)
ยท
๐Ÿ“ณAndroid
1๏ธโƒฃ ๊ฐœ๋ณ„์ ์œผ๋กœ ํด๋ฆญ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ฐ ๋ทฐ์— setOnClickListener ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ฆญ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.์ต๋ช… ํด๋ž˜์Šค๋‚˜ ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.์—ฌ๋Ÿฌ ๋ทฐ์— ๋™์ผํ•œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ๊ณตํ†ต ๋ฆฌ์Šค๋„ˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.// 1๏ธโƒฃ๊ฐœ๋ณ„ ๋ทฐ์— ํด๋ฆญ ๋ฆฌ์Šค๋„ˆ ์„ค์ •one.setOnClickListener { view -> // ์ฒซ ๋ฒˆ์งธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋™์ž‘ Log.d(TAG, "์ฒซ ๋ฒˆ์งธ ๋ฒ„ํŠผ ํด๋ฆญ๋จ")}two.setOnClickListener { view -> // ๋‘ ๋ฒˆ์งธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋™์ž‘ Log.d(TAG, "๋‘ ๋ฒˆ์งธ ๋ฒ„ํŠผ ํด๋ฆญ๋จ")}// 2๏ธโƒฃ๊ณตํ†ต ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐval listener = View.OnClickList..
[Kotlin] ์ฝ”ํ‹€๋ฆฐ์˜ 10๊ฐ€์ง€ ์ฃผ์š” ๋ฌธ๋ฒ•(Vs. Java)
ยท
๐ŸจKotlin
1๏ธโƒฃ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜ ์„ ์–ธ - val, var`val` : Value - ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ(immutable) ๋ณ€์ˆ˜๋กœ, ํ•œ ๋ฒˆ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ž๋ฐ”์—์„œ `final` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.`var` : Variable - ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ(mutable) ๋ณ€์ˆ˜. ๊ฐ’์„ ๋‚˜์ค‘์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.val name = "ํ™๊ธธ๋™" // ์ƒ์ˆ˜, ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€var age = 25 // ๋ณ€์ˆ˜, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅโœจage = 30 // ๊ฐ€๋Šฅ 2๏ธโƒฃ ๋ฐ์ดํ„ฐ ํƒ€์ž… - Int, Double, Boolean, String, Char์ฝ”ํ‹€๋ฆฐ์€ ํƒ€์ž…์„ ์ž๋™์œผ๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ์ด๋ฆ„ ..
AWS RDS์—์„œ Collation๊ณผ Character Set ๋ณ€๊ฒฝํ•˜๊ธฐ(PostgreSQL)
ยท
๐Ÿ”๊ธฐํƒ€
1๏ธโƒฃ RDS (Relational Database Service)๋ž€?RDS๋Š” Amazon Web Services(AWS)์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ด€๋ฆฌํ˜• ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ AWS๊ฐ€ ์ž๋™์œผ๋กœ ๋ฐฑ์—…, ๋ณต๊ตฌ, ์„ฑ๋Šฅ ์กฐ์ • ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์„ ์ง€์›ํ•˜๋ฉฐ, ๋Œ€ํ‘œ์ ์ธ ์—”์ง„์œผ๋กœ๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.MySQLPostgreSQLMariaDBOracleMicrosoft SQL ServerAmazon AuroraRDS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฏธ๊ตญ ์˜์–ด(US)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค์ •๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธ Collation์€ en_US.UTF-8๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. 2๏ธโƒฃ Character Set๊ณผ Collation์˜ ๋น„๊ตCharacter Set๊ณผ Colla..
[๋ฐฑ์ค€/Java] 1929 ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ(์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด)
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/๋ฐฑ์ค€
https://www.acmicpc.net/problem/1929๐Ÿ“ ํ’€์ด : ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒดimport java.io.*;public class Main { // M์ด์ƒ N์ดํ•˜์˜ ์†Œ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ public static void main(String[] args) throws IOException { /* [1] ์ž…๋ ฅ ์ฒ˜๋ฆฌ */ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] input = br.readLine().split(" "); int M = Integer.parseInt(input[0]); // ๋ฒ”์œ„์˜ ์‹œ์ž‘๊ฐ’ M ..
[๋ฐฑ์ค€/Java] 18110 solved.ac
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/๋ฐฑ์ค€
https://www.acmicpc.net/problem/18110๐Ÿ“ ํ’€์ด : ๋ฐฐ์—ดimport java.io.*;import java.util.*;public class Main { // ์‚ฌ์šฉ์ž๋“ค์ด ์–ด๋–ค ๋ฌธ์ œ์— ์ œ์ถœํ•œ ๋‚œ์ด๋„ ์˜๊ฒฌ ๋ชฉ๋ก์ด ์ฃผ์–ด์งˆ ๋•Œ, solved.ac๊ฐ€ ๊ฒฐ์ •ํ•œ ๋ฌธ์ œ์˜ ๋‚œ์ด๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ public static void main(String[] args) throws IOException { /* [1] ์ž…๋ ฅ ์ฒ˜๋ฆฌโœจ */ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); // ๋‚œ..
[๋ฐฑ์ค€/Java] 10866 ๋ฑ
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/๋ฐฑ์ค€
https://www.acmicpc.net/problem/10866๐Ÿ“ ํ’€์ด : ArrayDequeimport java.io.*;import java.util.*;public class Main { // ์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฑ(Deque)๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); // ๋ช…๋ น์˜ ์ˆ˜ N (1 ≤ N ≤ 10,000) ..
[๋ฐฑ์ค€/Java] 10845 ํ
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/๋ฐฑ์ค€
https://www.acmicpc.net/problem/10845๐Ÿ“ ํ’€์ด : LinkedListimport java.io.*;import java.util.*;public class Main { // ์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); // ๋ช…๋ น์˜ ์ˆ˜ N (1 ≤ N ≤ 10,000) Queue q..
[๋ฐฑ์ค€/Java] 10816 ์ˆซ์ž ์นด๋“œ 2
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/๋ฐฑ์ค€
https://www.acmicpc.net/problem/10816๐ŸŽฏ ๋ฌธ์ œ ํ•ต์‹ฌ์ˆซ์ž ์นด๋“œ ์ตœ๋Œ€ ๊ฐœ์ˆ˜ : 500,000๊ฐœ์‹œ๊ฐ„์ œํ•œ : 1์ดˆ๐Ÿ“ ํ’€์ด : HashMapimport java.io.*;import java.util.HashMap;import java.util.Map;import java.util.StringTokenizer;public class Main { // M๊ฐœ์˜ ์ˆ˜์— ๋Œ€ํ•ด์„œ, ๊ฐ ์ˆ˜๊ฐ€ ์ ํžŒ ์ˆซ์ž ์นด๋“œ๋ฅผ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Sys..
[๋ฐฑ์ค€/Java] 10773 ์ œ๋กœ
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/๋ฐฑ์ค€
https://www.acmicpc.net/problem/10773 ๐Ÿ“ ํ’€์ด : Stackimport java.io.*;import java.util.Stack;public class Main { // ์žฌ๋ฏผ์ด๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์ ์–ด ๋‚ธ ์ˆ˜์˜ ํ•ฉ ์ถœ๋ ฅ(2^31-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜) public static void main(String[] args) throws IOException { /* [1] ์ž…๋ ฅ */ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int K = Integer.parseInt(br.readLine()); // (1 ≤ K ≤ 100,000) ..
[React] ๋ฆฌ์•กํŠธ์—์„œ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๊ธฐ(Formik, Yup, react-hook-form)
ยท
๐ŸงฉFront-End
์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ๋ฆฌ์•กํŠธ์—์„œ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. JavaScript๋ฅผ ์ด์šฉํ•œ ๊ธฐ๋ณธ ๊ฒ€์ฆ ๋ฐฉ์‹๋ถ€ํ„ฐ, Yup, Formik, ๊ทธ๋ฆฌ๊ณ  ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๊ฐ•์ ์ด ์žˆ๋Š” react-hook-form๊นŒ์ง€ ๋น„๊ตํ•˜์—ฌ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ JavaScript๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๋ฆฌ์•กํŠธ์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์‹์œผ๋กœ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ JavaScript๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.import { useState } from 'react';function MyForm() { const [name, setName] = useState('');โœจ const [age, setAge] = useState('');โœจ const [errors, setErrors] = useState({});โœจ cons..
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] CORS ๋ฌธ์ œ ํ•ด๊ฒฐ ํ•˜๊ธฐ : ์‹ค์ œ ์›์ธ์€ CORS๊ฐ€ ์•„๋‹Œ ๋ฌดํ•œ ์žฌ๊ท€ ํ˜ธ์ถœ
ยท
โ˜•Java
ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐ„์˜ API ํ†ต์‹ ์—์„œ ๋ฐœ์ƒํ•˜๋Š” CORS ๋ฌธ์ œ๋Š” ํ”ํ•œ ์ด์Šˆ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CORS ๋ฌธ์ œ๋กœ ๋ณด์ด๋Š” ํ˜„์ƒ์ด ์‹ค์ œ๋กœ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ๊ธฐ์ธํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‚ฌ๋ก€์—์„œ๋Š” CORS ์—๋Ÿฌ๋กœ ์˜คํ•ด๋œ ๋ฌธ์ œ์˜ ์‹ค์ œ ์›์ธ์„ ์„ค๋ช…ํ•˜๊ณ  ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.๐Ÿ™‚ โœ”๏ธ CORS๋ž€?CORS(Cross-Origin Resource Sharing)๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๊ฐ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ๋ณด์•ˆ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ถœ์ฒ˜(๋„๋ฉ”์ธ, ํฌํŠธ, ํ”„๋กœํ† ์ฝœ)์˜ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๋ฉฐ, ์ด๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ์„œ๋ฒ„์—์„œ CORS ์„ค์ •์„ ํ†ตํ•ด ํŠน์ • ์ถœ์ฒ˜๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โœ”๏ธ ๋ฌธ์ œ ์ƒํ™ฉํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์„œ๋ฒ„์— API๋ฅผ ์š”์ฒญํ•  ๋•Œ, CORS ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” CORS๊ฐ€ ์›์ธ์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค...
[React] ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ vs ์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ with ๋ฆฌ์•กํŠธ
ยท
๐ŸงฉFront-End
React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. React๋ฅผ ๋‹จ์ผ ํ”„๋กœ์ ํŠธ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์Šคํ”„๋ง๋ถ€ํŠธ(Spring Boot)์™€ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์ฃผ์š” ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์˜ ์„ค์ • ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ™‚   ๐Ÿ“Œ React ๋‹จ์ผ ํ”„๋กœ์ ํŠธReact ๋‹จ์ผ ํ”„๋กœ์ ํŠธ๋Š” ๋ฐฑ์—”๋“œ ์—†์ด ํ”„๋ก ํŠธ์—”๋“œ๋งŒ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ฃผ๋กœ UI ๊ตฌ์„ฑ์— ์ง‘์ค‘ํ•˜๋ฉฐ, API ํ˜ธ์ถœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.โœ”๏ธ ํŠน์ง•๋…๋ฆฝ์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ : ๋ฐฑ์—”๋“œ ์—†์ด๋„ React๋งŒ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ฐ„ํŽธํ•œ ์ดˆ๊ธฐ ์„ค์ • : create-react-app์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐ ..
pgAdmin ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ํ…Œ์ด๋ธ” ๋ฐฑ์—… ๋ฐฉ๋ฒ• (CREATE๋ฌธ ๋ฐ INSERT๋ฌธ ์ถ”์ถœ)
ยท
๐ŸŽฒDB_SQL
https://yewon31.tistory.com/entry/postgresql [DB] PostgreSQL & pgAdmin 4 ์„ค์น˜ ํ›„ ๊ธฐ๋ณธ์„ค์ • ๋ฐ ์™ธ๋ถ€ ์ ‘์† ํ—ˆ์šฉ ์„ค์ • ๊ฐ€์ด๋“œhttps://www.postgresql.org/ PostgreSQLThe world's most advanced open source database.www.postgresql.orgPostgreSQL์€ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ์ง„๋ณด๋œ ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๊ฐ–์ถ˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.yewon31.tistory.compgAdmin์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์ฒด๋‚˜ ํŠน์ • ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๋ฅผ SQL ์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ๋กœ ์‰ฝ๊ฒŒ ๋ฐฑ์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด CREATE๋ฌธ๊ณผ INSERT๋ฌธ์„ ๋ชจ๋‘ ํฌํ•จํ•œ ๋ฐฑ์—…์„ ์ƒ์„ฑํ•  ์ˆ˜..
ํฌ๋กฌ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฐฉ๋ฒ•(์›๊ฒฉ์œผ๋กœ ๋‚ด ์ปดํ“จํ„ฐ ์ ‘์†ํ•˜๊ธฐ)
ยท
๐Ÿ”๊ธฐํƒ€
ํฌ๋กฌ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ์ด๋ž€?ํฌ๋กฌ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ์€ ๋‹ค๋ฅธ ์žฅ์†Œ์—์„œ ๋‚ด ์ปดํ“จํ„ฐ์— ์›๊ฒฉ์œผ๋กœ ์ ‘์†ํ•˜์—ฌ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์„ค์ •๋งŒ์œผ๋กœ ์ง‘์ด๋‚˜ ์‚ฌ๋ฌด์‹ค ๋“ฑ ์–ด๋””์„œ๋‚˜ ํŽธ๋ฆฌํ•˜๊ฒŒ ์›๊ฒฉ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœ”๏ธ ์„ค์น˜ ๋ฐฉ๋ฒ•ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ € ์„ค์น˜ํฌ๋กฌ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ์€ Google Chrome ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € Google Chrome์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•˜์„ธ์š”.ํฌ๋กฌ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ํฌ๋กฌ์„ ์‹คํ–‰ํ•œ ํ›„ Chrome Remote Desktop ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. "์›๊ฒฉ ์•ก์„ธ์Šค ์„ค์ •"์„ ํด๋ฆญํ•˜์—ฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.์›๊ฒฉ ์•ก์„ธ์Šค ์„ค์ •์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์›๊ฒฉ์œผ๋กœ ์ ‘๊ทผํ•  ์ปดํ“จํ„ฐ์—์„œ PIN ๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ›„ ์ด ์ปดํ“จํ„ฐ์— ์›๊ฒฉ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. โœ”๏ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•PC ์›..
[React] Axios ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ process/browser ๋ชจ๋“ˆ์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ
ยท
๐ŸงฉFront-End
๐Ÿ’ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : Webpack ์„ค์ • ์ˆ˜์ •์•„๋ž˜ ์ฝ”๋“œ๋ฅผ Webpack ์„ค์ •์— ์ถ”๊ฐ€ํ•˜์—ฌ .mjs ๋˜๋Š” .js ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ํ™•์žฅ์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ํŠนํžˆ axios๋‚˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ™•์žฅ์ž ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.๐Ÿ‘module.exports = { module: { rules: [ { test: /\.m?js$/, // .mjs ๋˜๋Š” .js ํŒŒ์ผ์„ ์ฒ˜๋ฆฌ resolve: { fullySpecified: false // ํ™•์žฅ์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ์„ค์ • } } ] ..
[React] Webpack ๋นŒ๋“œ ์™„๋ฃŒ ์‹œ๊ฐ„ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅํ•˜๊ธฐ(npm run watch)
ยท
๐ŸงฉFront-End
๐Ÿ’ก ํ„ฐ๋ฏธ๋„ ์ถœ๋ ฅ ํ™”๋ฉด๐Ÿ’ก ์ฝ”๋“œ ํ™”๋ฉด๐Ÿ’ก ์†Œ์Šค ์ฝ”๋“œconst webpack = require('webpack');module.exports = { // ... ๊ธฐ์กด ์„ค์ • plugins: [ // Webpack ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ function () { // Webpack์˜ done ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœ this.hooks.done.tap('DonePlugin', (stats) => { const now = new Date().toLocaleString(); // ์ฝ˜์†”์— ๋นจ๊ฐ„์ƒ‰ ๊ตฌ๋ถ„์„  ๋ฐ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ consol..
[React] Props ์ „๋‹ฌ ๋ฐฉ๋ฒ• 10๊ฐ€์ง€ ์˜ˆ์ œ๋กœ ์‚ดํŽด๋ณด๊ธฐ
ยท
๐ŸงฉFront-End
๋ฆฌ์•กํŠธ์—์„œ props๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” ๊ธฐ๋ณธ props ์ „๋‹ฌ๋ถ€ํ„ฐ ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž, Context API, ๊ทธ๋ฆฌ๊ณ  children์„ ์‚ฌ์šฉํ•œ props ์ „๋‹ฌ๊นŒ์ง€ ๋‹ค์–‘ํ•œ 10๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ฐฉ์‹์ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌํ•˜๋Š”์ง€ ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ ๊ธฐ๋ณธ props ์ „๋‹ฌ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ง์ ‘ props๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.// ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธfunction Parent() { // 'color'๋ผ๋Š” ์ด๋ฆ„์˜ props๋ฅผ Child ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.โœจ return ;}// ์ž์‹ ์ปดํฌ๋„ŒํŠธfunction Child(props) ..
[React] JSX ๋ฌธ๋ฒ• 17๊ฐ€์ง€ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ธฐ
ยท
๐ŸงฉFront-End
https://ko.legacy.reactjs.org/docs/introducing-jsx.html JSX ์†Œ๊ฐœ – ReactA JavaScript library for building user interfacesko.legacy.reactjs.org ๐Ÿ’ก JSX๋ž€?JSX๋Š” JavaScript์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์œผ๋กœ, HTML๊ณผ JavaScript๋ฅผ ๊ฒฐํ•ฉ ํ•˜์—ฌ UI๋ฅผ ๋” ์ง๊ด€์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. HTML ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” JavaScript ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์›นํŒฉ(Webpack) ๋กœ๋”๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ํ™”๋ฉด์ด ๊ฐฑ์‹ (๋ฆฌ๋ Œ๋”๋ง) ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * React๋Š” UI๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด..
[JS] ES6 ๋ฌธ๋ฒ• 8๊ฐ€์ง€ ์˜ˆ์ œ๋กœ ์‚ดํŽด๋ณด๊ธฐ
ยท
๐ŸงฉFront-End
https://www.w3schools.com/js/js_es6.asphttps://developer.mozilla.org/ko/docs/Web/JavaScript JavaScript | MDNJavaScript (JS)๋Š” ๊ฐ€๋ฒผ์šด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ ํ˜น์€ just-in-time ์ปดํŒŒ์ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์ผ๊ธ‰ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์›น ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ, Node.js, Apache CouchDB, Adobe Acrobat์ฒ˜๋Ÿผdeveloper.mozilla.org  ๐Ÿ’ก ๊ฐœ์š”ES : "ECMAScript"์˜ ์•ฝ์–ด์ด๋ฉฐ, JavaScript์˜ ํ‘œ์ค€ ์ŠคํŽ™์„ ์ •์˜ํ•˜๋Š” ๊ทœ๊ฒฉ์„ ๋งํ•œ๋‹ค.6 : 2015๋…„์— ๋ฐœํ‘œ๋œ 6๋ฒˆ์งธ ์ฃผ์š” ๋ฒ„์ „์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.ES6(ECMAScript 2015)์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ..
[DB] Oracle, MySQL, PostgreSQL ๋น„๊ต(๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ปฌ๋Ÿผ๊ฐ’ ์ž๋™ ์ฆ๊ฐ€, ๊ด€๋ฆฌ๋„๊ตฌ ๋“ฑ)
ยท
๐ŸŽฒDB_SQL
Oracle : ์ƒ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋Œ€ํ‘œ ์ฃผ์ž๋กœ, ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ, ๊ณ ๊ฐ€์šฉ์„ฑ, ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฐฐํฌ ์‹œ ์œ ๋ฃŒ ๋ผ์ด์„ ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. MySQL : ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” DBMS ์ค‘ ํ•˜๋‚˜๋กœ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ค‘์†Œ๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์ธ๊ธฐ๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค. ์†๋„์™€ ๋‹จ์ˆœํ•จ์ด ๊ฐ•์ ์ด๋ฉฐ, ์˜คํ”ˆ ์†Œ์Šค์™€ ์ƒ์šฉ ๋ฒ„์ „ ๋ชจ๋‘ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. PostgreSQL : ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ฐ–์ถ˜ ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ์— ๋›ฐ์–ด๋‚˜๋ฉฐ, ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 1๏ธโƒฃ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฐ ํ•จ์ˆ˜OracleDATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP ..
[DB] PostgreSQL & pgAdmin 4 ์„ค์น˜ ํ›„ ๊ธฐ๋ณธ์„ค์ • ๋ฐ ์™ธ๋ถ€ ์ ‘์† ํ—ˆ์šฉ ์„ค์ • ๊ฐ€์ด๋“œ
ยท
๐ŸŽฒDB_SQL
https://www.postgresql.org/ PostgreSQLThe world's most advanced open source database.www.postgresql.orgPostgreSQL์€ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ์ง„๋ณด๋œ ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๊ฐ–์ถ˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ์— ๋›ฐ์–ด๋‚œ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. MySQL์ด ์†๋„์™€ ๋‹จ์ˆœํ•จ์„, Oracle์ด ๊ณ ๊ธ‰ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ฐ•์กฐํ•˜๋Š” ๋ฐ˜๋ฉด, PostgreSQL์€ ์˜คํ”ˆ ์†Œ์Šค์ž„์—๋„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๊ธฐ๋Šฅ๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์œผ๋กœ ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด PostgreSQL์€ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์‹ ๋ขฐ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋ชจ๋‘ ๊ฐ–์ถ˜ ์ตœ์ ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†”๋ฃจ์…˜์œผ๋กœ ์ž๋ฆฌ ์žก..
[Spring Boot] ํ”„๋กœ์ ํŠธ ํ•„์ˆ˜ ์˜์กด์„ฑ(Spring Web, Lombok, DevTools, Thymeleaf)
ยท
โ˜•Java
Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์˜์กด์„ฑ๋“ค ์ค‘ DevTools, Spring Web, Thymeleaf, Lombok ์€ ๊ฐ๊ฐ ํŠน์ • ๊ธฐ๋Šฅ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ๊ฐ ์˜์กด์„ฑ์ด ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ Spring Webdependencies { // Spring Boot์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์˜์กด์„ฑ์ž…๋‹ˆ๋‹ค. implementation 'org.springframework.boot:spring-boot-starter-web'}โœ”๏ธ Spring Web์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ RESTful API ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ ์ธ ์˜์กด์„ฑ์ž…๋‹ˆ๋‹ค.Spring MVC (Model-View-Controller) : ..
[๋ฐฑ์ค€/Java] 10828 ์Šคํƒ(Stack)
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/๋ฐฑ์ค€
https://www.acmicpc.net/problem/10828 ๐Ÿ“ ํ’€์ด : Stackimport java.io.*;import java.util.Stack;public class Main { // ์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ public static void main(String[] args) throws IOException { /* [1] ์ž…๋ ฅ */ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); // ๋ช…๋ น์˜ ์ˆ˜ N /* [2]..
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ์„ฑ๊ฒฉ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๊ธฐ
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
https://school.programmers.co.kr/learn/courses/30/lessons/118666๐Ÿ“ ํ’€์ด : ์ด์ฐจ์› ๋ฐฐ์—ด๊ณผ HashMap๊ฐ ์„ฑ๊ฒฉ ์œ ํ˜•์„ ์ด์ฐจ์› ๋ฐฐ์—ด(char[][])๋กœ ์ •์˜ํ•˜์—ฌ ๋Œ€์‘๋˜๋Š” ์„ฑ๊ฒฉ ์œ ํ˜• ์Œ(R/T, C/F, J/M, A/N)์„ ์ €์žฅํ•˜๊ณ , HashMap์„ ์‚ฌ์šฉํ•ด ๊ฐ ์œ ํ˜•์˜ ์ ์ˆ˜๋ฅผ ๋ˆ„์ ํ•œ ํ›„, ์ตœ์ข…์ ์œผ๋กœ ๊ฐ ์ง€ํ‘œ์—์„œ ๋†’์€ ์ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ์œ ํ˜•์„ ์„ ํƒํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.import java.util.HashMap;import java.util.Map;class Solution { // ์ฃผ์–ด์ง„ ์ง€ํ‘œ์™€ ์„ ํƒํ•œ ๋ฒˆํ˜ธ(1~7)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ฑ๊ฒฉ ์œ ํ˜• ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ public String solution(String[] survey, int[] c..
[Java] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ(List, Queue, Set, Map)
ยท
โ˜•Java
Java์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ์ฃผ์š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทธ์— ์†ํ•œ ํด๋ž˜์Šค์˜ ํŠน์„ฑ ๋ฐ ์ฃผ์š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ List ์ธํ„ฐํŽ˜์ด์Šค : ์ˆœ์„œ ์œ ์ง€, ์ค‘๋ณต ํ—ˆ์šฉ๐Ÿ’ก ์ฃผ์š” ๋ฉ”์„œ๋“œ : add, get, set, indexOf`add(E e)`, `add(int index, E element)`, `get(int index)`, `remove(int index)`, `remove(Object o)``set(int index, E element)`, `size()`, `isEmpty()`, `contains(Object o)`, `iterator()``indexOf(Object o)`, `lastInd..
[Java] Map ์‚ฌ์šฉ ๋ฐฉ๋ฒ•(keySet(), entrySet(), Map.entry())
ยท
โ˜•Java
Java์˜ Map์€ ํ‚ค-๊ฐ’ ์Œ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” Map์„ ๋‹ค๋ฃจ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋ฉ”์„œ๋“œ์ธ keySet(), entrySet(), ๊ทธ๋ฆฌ๊ณ  Map.entry()์˜ ์‚ฌ์šฉ๋ฒ•์„ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.๐Ÿ™‚ 1๏ธโƒฃ Map.keyset() : ๋ชจ๋“  ํ‚ค ๋ฐ˜ํ™˜keySet() ๋ฉ”์„œ๋“œ๋Š” Map์˜ ๋ชจ๋“  ํ‚ค๋ฅผ Set ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ, ๊ฐ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. Map์˜ ํ‚ค๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ๊ฐ ํ‚ค์— ๋Œ€ํ•ด ๊ฐ’์„ ์กฐํšŒํ•˜๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.Map map = new HashMap();map.put("์‚ฌ๊ณผ", 10); map.put("๋”ธ๊ธฐ", 20); // ํ‚ค-๊ฐ’ ์Œ ์ถ”๊ฐ€// Map์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ฐ’์„ ์ถœ๋ ฅโœจfor (String key : map.key..
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ(๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ)
ยท
๐ŸŒท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
https://school.programmers.co.kr/learn/courses/30/lessons/67256๐Ÿ“ ํ’€์ด : ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ๊ฐ ์ˆซ์ž๋ฅผ 'ํ•˜๋‚˜์˜ ์ค„๋กœ ๋‚˜์—ด๋œ ์ˆซ์ž'์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ณ , 'ํ‚คํŒจ๋“œ์˜ ๊ทœ์น™'์„ ์ด์šฉํ•ด์„œ '๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ'๋ฅผ ๊ตฌํ•œ๋‹ค. ๋‘ ์ˆซ์ž ๊ฐ„์˜ ํ–‰(row) ์ฐจ์ด๋Š” (์ฐจ์ด / 3)์œผ๋กœ, ์—ด(column) ์ฐจ์ด๋Š” (์ฐจ์ด % 3)๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„, ๊ฐ ์†๊ฐ€๋ฝ์ด ๋ชฉํ‘œ ์ˆซ์ž์— ์–ผ๋งˆ๋‚˜ ๊ฐ€๊นŒ์šด์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ(Manhattan Distance) :  ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ, ๊ฐ€๋กœ์™€ ์„ธ๋กœ์˜ ๊ฑฐ๋ฆฌ๋งŒ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•class Solution { // ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ˆ„๋ฅธ ์—„์ง€์†๊ฐ€๋ฝ์ด ์–ด๋А ์†์ธ์ง€ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ pu..
yewon31
Yewon's Dev Logโœ๐Ÿป