Monday(03.24)
JavaScript ๊ฐ๋ ์ ๋ฆฌ
1. ๋ณ์์ ๋ฐ์ดํฐ ํ์
(1) ๋ณ์ ์ ์ธ ๋ฐฉ์
- var: ํจ์ ์ค์ฝํ, ์ฌ์ ์ธ/์ฌํ ๋น ๊ฐ๋ฅ
- let: ๋ธ๋ก ์ค์ฝํ, ์ฌ์ ์ธ ๋ถ๊ฐ, ์ฌํ ๋น ๊ฐ๋ฅ
- const: ๋ธ๋ก ์ค์ฝํ, ์ฌ์ ์ธ ๋ถ๊ฐ, ์ฌํ ๋น ๋ถ๊ฐ
(2) ๋ฐ์ดํฐ ํ์
JavaScript์ ๋ฐ์ดํฐ ํ์ ์ ํฌ๊ฒ ์์ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ผ๋ก ๋๋๋ค. ์ฝํ๋ฆฐ์ด๋ ๋น์ทํ๋ค
- ์์ ํ์
(Primitive Type)
- Number: ์ ์, ๋ถ๋์์์
- String: ๋ฌธ์์ด
- Boolean: ๋ ผ๋ฆฌ๊ฐ
- null: ๊ฐ์ด ์์์ ๋ํ๋
- undefined: ๋ณ์๊ฐ ์ ์ธ๋์์ง๋ง ๊ฐ์ด ํ ๋น๋์ง ์์
- Symbol: ์ ์ผํ ๊ฐ ์์ฑ
- BigInt: ํฐ ์ ์๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ
- ์ฐธ์กฐ ํ์
(Reference Type)
- Object: ํค-๊ฐ ์์ ๊ฐ์ง๋ ๊ฐ์ฒด
- Array: ๋ฐฐ์ด
- Function: ํจ์
- Map, Set: ํค-๊ฐ ์ ์ฅ ๊ตฌ์กฐ
2. ํ์ ๋ณํ (Type Conversion)
(1) ์์์ ํ ๋ณํ (Type Coercion)
console.log(1 + "2"); // "12" (์ซ์๊ฐ ๋ฌธ์์ด๋ก ๋ณํ)
console.log("5" - 3); // 2 (๋ฌธ์์ด์ด ์ซ์๋ก ๋ณํ)
console.log(true + 1); // 2 (true๋ 1๋ก ๋ณํ)
console.log(false + "test"); // "falsetest" (false๊ฐ ๋ฌธ์์ด๋ก ๋ณํ)
(2) ๋ช ์์ ํ ๋ณํ (Type Casting)
console.log(Number("123")); // 123
console.log(String(123)); // "123"
console.log(Boolean(0)); // false
console.log(Boolean(1)); // true
3. ์ฐ์ฐ์ (Operators)
(1) ์ฐ์ ์ฐ์ฐ์
let a = 10, b = 3;
console.log(a + b); // 13
console.log(a - b); // 7
console.log(a * b); // 30
console.log(a / b); // 3.3333...
console.log(a % b); // 1
console.log(a ** b); // 1000 (๊ฑฐ๋ญ์ ๊ณฑ)
(2) ๋น๊ต ์ฐ์ฐ์
console.log(10 == "10"); // true (๊ฐ๋ง ๋น๊ต)
console.log(10 === "10"); // false (๊ฐ๊ณผ ํ์
๋น๊ต)
console.log(10 != "10"); // false
console.log(10 !== "10"); // true
(3) ๋ ผ๋ฆฌ ์ฐ์ฐ์
console.log(true && false); // false (AND)
console.log(true || false); // true (OR)
console.log(!true); // false (NOT)
4. ์กฐ๊ฑด๋ฌธ
(1) if-else
let age = 20;
if (age >= 18) {
console.log("์ฑ์ธ์
๋๋ค.");
} else {
console.log("๋ฏธ์ฑ๋
์์
๋๋ค.");
}
(2) switch-case
let grade = "A";
switch (grade) {
case "A":
console.log("์ฐ์");
break;
case "B":
console.log("๋ณดํต");
break;
default:
console.log("๋ฏธํก");
}
5. ๋ฐ๋ณต๋ฌธ
(1) for ๋ฌธ
for (let i = 0; i < 5; i++) {
console.log(i);
}
(2) while ๋ฌธ
let count = 0;
while (count < 5) {
console.log(count);
count++;
}
(3) do-while ๋ฌธ
let num = 0;
do {
console.log(num);
num++;
} while (num < 5);
(4) forEach (๋ฐฐ์ด ์ํ)
let arr = [1, 2, 3];
arr.forEach((num) => console.log(num));
6. ํจ์ (Functions)
(1) ํจ์ ์ ์ธ๋ฌธ
function add(a, b) {
return a + b;
}
console.log(add(3, 5));
(2) ํจ์ ํํ์
const subtract = function(a, b) {
return a - b;
};
console.log(subtract(10, 3));
(3) ํ์ดํ ํจ์
const multiply = (a, b) => a * b;
console.log(multiply(2, 4));
7. ๋ฐฐ์ด (Array) ์กฐ์
(1) ๊ธฐ๋ณธ ๋ฐฐ์ด ๋ฉ์๋
let fruits = ["apple", "banana", "cherry"];
console.log(fruits.length); // 3
console.log(fruits[1]); // "banana"
fruits.push("grape"); // ๋ง์ง๋ง์ ์ถ๊ฐ
fruits.pop(); // ๋ง์ง๋ง ์์ ์ ๊ฑฐ
fruits.shift(); // ์ฒซ ๋ฒ์งธ ์์ ์ ๊ฑฐ
fruits.unshift("orange"); // ์ฒซ ๋ฒ์งธ ์์ ์ถ๊ฐ
(2) ๊ณ ์ฐจ ํจ์ (map, filter, reduce)
let numbers = [1, 2, 3, 4, 5];
// map: ๊ฐ ์์๋ฅผ ๋ณํ
let squared = numbers.map(num => num ** 2);
console.log(squared); // [1, 4, 9, 16, 25]
// filter: ์กฐ๊ฑด์ ๋ง๋ ์์๋ง ์ถ์ถ
let evens = numbers.filter(num => num % 2 === 0);
console.log(evens); // [2, 4]
// reduce: ๋์ ๊ฐ ๊ณ์ฐ
let sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 15
8. ๊ฐ์ฒด (Object)์ JSON
(1) ๊ฐ์ฒด ์์ฑ
let person = {
name: "Alice",
age: 25,
greet: function() {
console.log("Hello, " + this.name);
}
};
console.log(person.name); // "Alice"
person.greet(); // "Hello, Alice"
(2) JSON ๋ณํ
let obj = { name: "John", age: 30 };
let jsonString = JSON.stringify(obj); // ๊ฐ์ฒด โ JSON ๋ฌธ์์ด
console.log(jsonString); // '{"name":"John","age":30}'
let newObj = JSON.parse(jsonString); // JSON ๋ฌธ์์ด โ ๊ฐ์ฒด
console.log(newObj.name); // "John"
9. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ (Asynchronous Programming)
(1) ์ฝ๋ฐฑ ํจ์ (Callback)
function fetchData(callback) {
setTimeout(() => {
console.log("๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์๋ฃ");
callback();
}, 2000);
}
fetchData(() => console.log("๋ค์ ์์
์คํ"));
(2) Promise
let myPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("์๋ฃ!"), 1000);
});
myPromise.then((result) => console.log(result));
(3) async/await
async function fetchData() {
return "๋ฐ์ดํฐ ๋ก๋ฉ ์๋ฃ";
}
fetchData().then(console.log);
์์ ๋๋๊ณ , ์์ฆ ๋๋ฌด ์ ์ฌ๊ณ ๋ฌ๋ ค์ ๋ฒ์์์ด ๋ฌ๋ ค ์ค๋ ๊ฒ ๊ฐ์ ๋ฐ๋ก ํ๊ฐ์ผ๋ก ๊ฐ๋ค.
์ฐฌ ๋ฐ๋ ๋ง์ผ๋๊น ์ข ์ด ๊ฒ ๊ฐ๋ค ...



Tuesday(03.25)
Ajax vs HTMX vs fetch
ํญ๋ชฉ | Ajax | HTMX | fetch |
๋ฐฉ์ | JS ์ฝ๋๋ก ์ง์ fetch๋ XMLHttpRequest ์ฌ์ฉ | HTML ํ๊ทธ์ ์์ฑ๋ง ๋ถ์ด๋ฉด ์๋ ์์ฒญ | JS ์ฝ๋๋ก fetch ์ฌ์ฉ (XHR ๋น๋์ฒด) |
์ ์ด๊ถ | ๊ฐ๋ฐ์๊ฐ ์์ ํ JS๋ก ์ ์ด | ์๋ฒ๊ฐ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด๊ณ HTMX๊ฐ ๋ฐ์ | ๊ฐ๋ฐ์๊ฐ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ์ฒ๋ฆฌํ๋ ์ฝ๋ ์์ฑ |
ํ์ต ๋์ด๋ | ์ค (JS ์ฝ๋ ํ์) | ์ฌ์ (HTML๋ก๋ง ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ) | ์ค (JavaScript ๊ธฐ๋ฐ, ๋น๋๊ธฐ ์ฒ๋ฆฌ) |
์ ์ฐ์ฑ | ์ต๊ณ (๋ณต์กํ UI ๊ฐ๋ฅ) | ์ ํ์ ์ด์ง๋ง ๊ฐ๋จํ UI์ ๊ฐํจ | ๋งค์ฐ ์ ์ฐ (๋ณต์กํ API ํตํฉ ๋ฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ) |
DOM ์กฐ์ | ์ง์ ํด์ผ ํจ | HTMX๊ฐ ์๋์ผ๋ก ํด์ค | ์ง์ ํด์ผ ํจ (์๋ต ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด DOM ์์ ) |
์คํ์ผ | JS ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ์ | HTML ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ์ | JS ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ์ |
๋น๋๊ธฐ ์ฒ๋ฆฌ | XMLHttpRequest๋ fetch๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ | HTML ํ๊ทธ ์์ฑ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ | ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ, Promise ๊ธฐ๋ฐ |
์๋ต ์ฒ๋ฆฌ | ์๋ต์ ๋ฐ์ ํ JS ์ฝ๋๋ก ์ฒ๋ฆฌ | ์๋ฒ์์ ๋ฐํํ HTML์ DOM์ ๋ฐ์ | ์๋ต์ ๋ฐ์ ํ .then()์ผ๋ก ์ฒ๋ฆฌ, ๋๋ async/await ์ฌ์ฉ |
๋ธ๋ผ์ฐ์ ํธํ์ฑ | ์ค๋๋ ๋ธ๋ผ์ฐ์ ์์๋ ์๋ | ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ | ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ |
Ajax
fetch('/chat', {
method: 'POST',
body: JSON.stringify({ prompt: "๊ธ๋ฆฌ ์์ธกํด์ค", months: 3 }),
headers: {
"Content-Type": "application/json"
}
}).then(res => res.json())
.then(data => {
// DOM ์ง์ ์์
document.getElementById("chat-box").innerHTML += `<div>${data.response}</div>`
});
- ์ง์ API ํธ์ถ + ๊ฒฐ๊ณผ ํ์ฑ + DOM ์กฐ์๊น์ง ๋ค ํด์ผ ํ๋ค.
- ๋ณต์กํ ๋ก์ง, ์กฐ๊ฑด ๋ถ๊ธฐ ๋ง์ UI์ ์ข๋ค.
HTMX
<form
hx-post="/chat"
hx-target="#chat-box"
hx-swap="beforeend"
>
<input type="text" name="prompt">
<input type="number" name="months">
<button type="submit">์ ์ก</button>
</form>
<div id="chat-box"></div>
- JS ์์ด HTML์ ์์ฑ ๋ถ์ด๋ฉด ์๋์ผ๋ก ์๋ฒ์ ์์ฒญ ๋ณด๋ด๊ณ ์๋ต์ DOM์ ๊ฝ์์ค
- ๊ฐ๋จํ UI ๊ตฌํ, ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ์ ํฉ
Fetch
fetch('/chat', {
method: 'POST',
body: JSON.stringify({ prompt: "๊ธ๋ฆฌ ์์ธกํด์ค", months: 3 }),
headers: {
"Content-Type": "application/json"
}
}).then(res => res.json())
.then(data => {
// DOM ์ง์ ์์
document.getElementById("chat-box").innerHTML += `<div>${data.response}</div>`
});
- ๋ชจ๋ํ ๋น๋๊ธฐ ์ฒ๋ฆฌ: fetch๋ Promise ๊ธฐ๋ฐ, ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐํธ
- ์ ์ฐ์ฑ: ๋ณต์กํ API ํตํฉ ๋ฐ ์ฒ๋ฆฌ ๋ก์ง
- ์๋ต ์ฒ๋ฆฌ์ ์ง๊ด์ฑ: async/await ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑ ๊ฐ๋ฅ
์ธ์ ์ฌ์ฉํ ์ง?
- AJAX: ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ฌ๋ฌ API๋ฅผ ๋์์ ํธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ
- HTMX: ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ์ ํธํ๊ฑฐ๋ ํ์ด์ง์ ์ฃผ์ ๋์์ ๊ฐ๋จํ๊ฒ ๋ง๋ค ๋
- fetch: ์๋ฒ์์ ์๋ต์ ๋ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ฑฐ๋ ๋น๋๊ธฐ ์์ฒญ ์
Wednesday(03.26)
https://koreatstm.tistory.com/274
Flask ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ์ ๋์ ์๋ฆฌ
๋ฐฑ์ค๋ ๋ฐฑ์๋๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๊ทผํ์ง ์๋ ์๋ฒ ์ธก ์์คํ ์ ์๋ฏธํ๋ฉฐ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋น์ฆ๋์ค ๋ก์ง, ์ธ์ฆ, API ์ ๊ณต ๋ฑ์ ๋ด๋นํ๋ค.๋ฐฑ์๋ ํ๋ ์์ํฌ๋?๋ฐฑ์๋ ํ๋ ์์ํฌ๋ ์น ์ ํ๋ฆฌ์ผ
koreatstm.tistory.com
Thursday(03.27)
https://koreatstm.tistory.com/275
flask with ORM
ORM (Object-Relational Mapping) ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋งคํํ๋ ๋ฐฉ๋ฒFlask-SQLAlchemy๋ Python ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์๋์ผ๋ก ์ฒ๋ฆฌ ->
koreatstm.tistory.com
Friday(03.28)
https://koreatstm.tistory.com/276
Flask์์ ํ ํ๋ฆฟ ์ฌ์ฉํ๊ธฐ
Flask๋ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํ ์ ์๋ค.ํ ํ๋ฆฟ์ HTML ํ์ผ๊ณผ ์ ์ฌํ์ง๋ง ๊ทธ ์์์ ํ์ด์ฌ ์ฝ๋(Jinja2 ํ ํ๋ฆฟ ์ธ์ด)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ์ฝ์ ํ๊ณ ์ ์ด 1.
koreatstm.tistory.com
'๐ฐ Woori FISA > ํ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 13์ฃผ์ฐจ ๊ณผ์ (0) | 2025.04.01 |
---|---|
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 11์ฃผ์ฐจ ๊ณผ์ (0) | 2025.03.17 |
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 9์ฃผ์ฐจ ๊ณผ์ (0) | 2025.03.03 |
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 8์ฃผ์ฐจ ๊ณผ์ (0) | 2025.02.27 |
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 7์ฃผ์ฐจ ๊ณผ์ (0) | 2025.02.17 |
Monday(03.24)
JavaScript ๊ฐ๋ ์ ๋ฆฌ
1. ๋ณ์์ ๋ฐ์ดํฐ ํ์
(1) ๋ณ์ ์ ์ธ ๋ฐฉ์
- var: ํจ์ ์ค์ฝํ, ์ฌ์ ์ธ/์ฌํ ๋น ๊ฐ๋ฅ
- let: ๋ธ๋ก ์ค์ฝํ, ์ฌ์ ์ธ ๋ถ๊ฐ, ์ฌํ ๋น ๊ฐ๋ฅ
- const: ๋ธ๋ก ์ค์ฝํ, ์ฌ์ ์ธ ๋ถ๊ฐ, ์ฌํ ๋น ๋ถ๊ฐ
(2) ๋ฐ์ดํฐ ํ์
JavaScript์ ๋ฐ์ดํฐ ํ์ ์ ํฌ๊ฒ ์์ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ผ๋ก ๋๋๋ค. ์ฝํ๋ฆฐ์ด๋ ๋น์ทํ๋ค
- ์์ ํ์
(Primitive Type)
- Number: ์ ์, ๋ถ๋์์์
- String: ๋ฌธ์์ด
- Boolean: ๋ ผ๋ฆฌ๊ฐ
- null: ๊ฐ์ด ์์์ ๋ํ๋
- undefined: ๋ณ์๊ฐ ์ ์ธ๋์์ง๋ง ๊ฐ์ด ํ ๋น๋์ง ์์
- Symbol: ์ ์ผํ ๊ฐ ์์ฑ
- BigInt: ํฐ ์ ์๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ
- ์ฐธ์กฐ ํ์
(Reference Type)
- Object: ํค-๊ฐ ์์ ๊ฐ์ง๋ ๊ฐ์ฒด
- Array: ๋ฐฐ์ด
- Function: ํจ์
- Map, Set: ํค-๊ฐ ์ ์ฅ ๊ตฌ์กฐ
2. ํ์ ๋ณํ (Type Conversion)
(1) ์์์ ํ ๋ณํ (Type Coercion)
console.log(1 + "2"); // "12" (์ซ์๊ฐ ๋ฌธ์์ด๋ก ๋ณํ)
console.log("5" - 3); // 2 (๋ฌธ์์ด์ด ์ซ์๋ก ๋ณํ)
console.log(true + 1); // 2 (true๋ 1๋ก ๋ณํ)
console.log(false + "test"); // "falsetest" (false๊ฐ ๋ฌธ์์ด๋ก ๋ณํ)
(2) ๋ช ์์ ํ ๋ณํ (Type Casting)
console.log(Number("123")); // 123
console.log(String(123)); // "123"
console.log(Boolean(0)); // false
console.log(Boolean(1)); // true
3. ์ฐ์ฐ์ (Operators)
(1) ์ฐ์ ์ฐ์ฐ์
let a = 10, b = 3;
console.log(a + b); // 13
console.log(a - b); // 7
console.log(a * b); // 30
console.log(a / b); // 3.3333...
console.log(a % b); // 1
console.log(a ** b); // 1000 (๊ฑฐ๋ญ์ ๊ณฑ)
(2) ๋น๊ต ์ฐ์ฐ์
console.log(10 == "10"); // true (๊ฐ๋ง ๋น๊ต)
console.log(10 === "10"); // false (๊ฐ๊ณผ ํ์
๋น๊ต)
console.log(10 != "10"); // false
console.log(10 !== "10"); // true
(3) ๋ ผ๋ฆฌ ์ฐ์ฐ์
console.log(true && false); // false (AND)
console.log(true || false); // true (OR)
console.log(!true); // false (NOT)
4. ์กฐ๊ฑด๋ฌธ
(1) if-else
let age = 20;
if (age >= 18) {
console.log("์ฑ์ธ์
๋๋ค.");
} else {
console.log("๋ฏธ์ฑ๋
์์
๋๋ค.");
}
(2) switch-case
let grade = "A";
switch (grade) {
case "A":
console.log("์ฐ์");
break;
case "B":
console.log("๋ณดํต");
break;
default:
console.log("๋ฏธํก");
}
5. ๋ฐ๋ณต๋ฌธ
(1) for ๋ฌธ
for (let i = 0; i < 5; i++) {
console.log(i);
}
(2) while ๋ฌธ
let count = 0;
while (count < 5) {
console.log(count);
count++;
}
(3) do-while ๋ฌธ
let num = 0;
do {
console.log(num);
num++;
} while (num < 5);
(4) forEach (๋ฐฐ์ด ์ํ)
let arr = [1, 2, 3];
arr.forEach((num) => console.log(num));
6. ํจ์ (Functions)
(1) ํจ์ ์ ์ธ๋ฌธ
function add(a, b) {
return a + b;
}
console.log(add(3, 5));
(2) ํจ์ ํํ์
const subtract = function(a, b) {
return a - b;
};
console.log(subtract(10, 3));
(3) ํ์ดํ ํจ์
const multiply = (a, b) => a * b;
console.log(multiply(2, 4));
7. ๋ฐฐ์ด (Array) ์กฐ์
(1) ๊ธฐ๋ณธ ๋ฐฐ์ด ๋ฉ์๋
let fruits = ["apple", "banana", "cherry"];
console.log(fruits.length); // 3
console.log(fruits[1]); // "banana"
fruits.push("grape"); // ๋ง์ง๋ง์ ์ถ๊ฐ
fruits.pop(); // ๋ง์ง๋ง ์์ ์ ๊ฑฐ
fruits.shift(); // ์ฒซ ๋ฒ์งธ ์์ ์ ๊ฑฐ
fruits.unshift("orange"); // ์ฒซ ๋ฒ์งธ ์์ ์ถ๊ฐ
(2) ๊ณ ์ฐจ ํจ์ (map, filter, reduce)
let numbers = [1, 2, 3, 4, 5];
// map: ๊ฐ ์์๋ฅผ ๋ณํ
let squared = numbers.map(num => num ** 2);
console.log(squared); // [1, 4, 9, 16, 25]
// filter: ์กฐ๊ฑด์ ๋ง๋ ์์๋ง ์ถ์ถ
let evens = numbers.filter(num => num % 2 === 0);
console.log(evens); // [2, 4]
// reduce: ๋์ ๊ฐ ๊ณ์ฐ
let sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 15
8. ๊ฐ์ฒด (Object)์ JSON
(1) ๊ฐ์ฒด ์์ฑ
let person = {
name: "Alice",
age: 25,
greet: function() {
console.log("Hello, " + this.name);
}
};
console.log(person.name); // "Alice"
person.greet(); // "Hello, Alice"
(2) JSON ๋ณํ
let obj = { name: "John", age: 30 };
let jsonString = JSON.stringify(obj); // ๊ฐ์ฒด โ JSON ๋ฌธ์์ด
console.log(jsonString); // '{"name":"John","age":30}'
let newObj = JSON.parse(jsonString); // JSON ๋ฌธ์์ด โ ๊ฐ์ฒด
console.log(newObj.name); // "John"
9. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ (Asynchronous Programming)
(1) ์ฝ๋ฐฑ ํจ์ (Callback)
function fetchData(callback) {
setTimeout(() => {
console.log("๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์๋ฃ");
callback();
}, 2000);
}
fetchData(() => console.log("๋ค์ ์์
์คํ"));
(2) Promise
let myPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve("์๋ฃ!"), 1000);
});
myPromise.then((result) => console.log(result));
(3) async/await
async function fetchData() {
return "๋ฐ์ดํฐ ๋ก๋ฉ ์๋ฃ";
}
fetchData().then(console.log);
์์ ๋๋๊ณ , ์์ฆ ๋๋ฌด ์ ์ฌ๊ณ ๋ฌ๋ ค์ ๋ฒ์์์ด ๋ฌ๋ ค ์ค๋ ๊ฒ ๊ฐ์ ๋ฐ๋ก ํ๊ฐ์ผ๋ก ๊ฐ๋ค.
์ฐฌ ๋ฐ๋ ๋ง์ผ๋๊น ์ข ์ด ๊ฒ ๊ฐ๋ค ...



Tuesday(03.25)
Ajax vs HTMX vs fetch
ํญ๋ชฉ | Ajax | HTMX | fetch |
๋ฐฉ์ | JS ์ฝ๋๋ก ์ง์ fetch๋ XMLHttpRequest ์ฌ์ฉ | HTML ํ๊ทธ์ ์์ฑ๋ง ๋ถ์ด๋ฉด ์๋ ์์ฒญ | JS ์ฝ๋๋ก fetch ์ฌ์ฉ (XHR ๋น๋์ฒด) |
์ ์ด๊ถ | ๊ฐ๋ฐ์๊ฐ ์์ ํ JS๋ก ์ ์ด | ์๋ฒ๊ฐ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด๊ณ HTMX๊ฐ ๋ฐ์ | ๊ฐ๋ฐ์๊ฐ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ์ฒ๋ฆฌํ๋ ์ฝ๋ ์์ฑ |
ํ์ต ๋์ด๋ | ์ค (JS ์ฝ๋ ํ์) | ์ฌ์ (HTML๋ก๋ง ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ) | ์ค (JavaScript ๊ธฐ๋ฐ, ๋น๋๊ธฐ ์ฒ๋ฆฌ) |
์ ์ฐ์ฑ | ์ต๊ณ (๋ณต์กํ UI ๊ฐ๋ฅ) | ์ ํ์ ์ด์ง๋ง ๊ฐ๋จํ UI์ ๊ฐํจ | ๋งค์ฐ ์ ์ฐ (๋ณต์กํ API ํตํฉ ๋ฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ) |
DOM ์กฐ์ | ์ง์ ํด์ผ ํจ | HTMX๊ฐ ์๋์ผ๋ก ํด์ค | ์ง์ ํด์ผ ํจ (์๋ต ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด DOM ์์ ) |
์คํ์ผ | JS ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ์ | HTML ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ์ | JS ์ค์ฌ ๊ฐ๋ฐ ๋ฐฉ์ |
๋น๋๊ธฐ ์ฒ๋ฆฌ | XMLHttpRequest๋ fetch๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ | HTML ํ๊ทธ ์์ฑ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ | ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ, Promise ๊ธฐ๋ฐ |
์๋ต ์ฒ๋ฆฌ | ์๋ต์ ๋ฐ์ ํ JS ์ฝ๋๋ก ์ฒ๋ฆฌ | ์๋ฒ์์ ๋ฐํํ HTML์ DOM์ ๋ฐ์ | ์๋ต์ ๋ฐ์ ํ .then()์ผ๋ก ์ฒ๋ฆฌ, ๋๋ async/await ์ฌ์ฉ |
๋ธ๋ผ์ฐ์ ํธํ์ฑ | ์ค๋๋ ๋ธ๋ผ์ฐ์ ์์๋ ์๋ | ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ | ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ |
Ajax
fetch('/chat', {
method: 'POST',
body: JSON.stringify({ prompt: "๊ธ๋ฆฌ ์์ธกํด์ค", months: 3 }),
headers: {
"Content-Type": "application/json"
}
}).then(res => res.json())
.then(data => {
// DOM ์ง์ ์์
document.getElementById("chat-box").innerHTML += `<div>${data.response}</div>`
});
- ์ง์ API ํธ์ถ + ๊ฒฐ๊ณผ ํ์ฑ + DOM ์กฐ์๊น์ง ๋ค ํด์ผ ํ๋ค.
- ๋ณต์กํ ๋ก์ง, ์กฐ๊ฑด ๋ถ๊ธฐ ๋ง์ UI์ ์ข๋ค.
HTMX
<form
hx-post="/chat"
hx-target="#chat-box"
hx-swap="beforeend"
>
<input type="text" name="prompt">
<input type="number" name="months">
<button type="submit">์ ์ก</button>
</form>
<div id="chat-box"></div>
- JS ์์ด HTML์ ์์ฑ ๋ถ์ด๋ฉด ์๋์ผ๋ก ์๋ฒ์ ์์ฒญ ๋ณด๋ด๊ณ ์๋ต์ DOM์ ๊ฝ์์ค
- ๊ฐ๋จํ UI ๊ตฌํ, ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ์ ํฉ
Fetch
fetch('/chat', {
method: 'POST',
body: JSON.stringify({ prompt: "๊ธ๋ฆฌ ์์ธกํด์ค", months: 3 }),
headers: {
"Content-Type": "application/json"
}
}).then(res => res.json())
.then(data => {
// DOM ์ง์ ์์
document.getElementById("chat-box").innerHTML += `<div>${data.response}</div>`
});
- ๋ชจ๋ํ ๋น๋๊ธฐ ์ฒ๋ฆฌ: fetch๋ Promise ๊ธฐ๋ฐ, ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐํธ
- ์ ์ฐ์ฑ: ๋ณต์กํ API ํตํฉ ๋ฐ ์ฒ๋ฆฌ ๋ก์ง
- ์๋ต ์ฒ๋ฆฌ์ ์ง๊ด์ฑ: async/await ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑ ๊ฐ๋ฅ
์ธ์ ์ฌ์ฉํ ์ง?
- AJAX: ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ฌ๋ฌ API๋ฅผ ๋์์ ํธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ
- HTMX: ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ์ ํธํ๊ฑฐ๋ ํ์ด์ง์ ์ฃผ์ ๋์์ ๊ฐ๋จํ๊ฒ ๋ง๋ค ๋
- fetch: ์๋ฒ์์ ์๋ต์ ๋ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ฑฐ๋ ๋น๋๊ธฐ ์์ฒญ ์
Wednesday(03.26)
https://koreatstm.tistory.com/274
Flask ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ์ ๋์ ์๋ฆฌ
๋ฐฑ์ค๋ ๋ฐฑ์๋๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๊ทผํ์ง ์๋ ์๋ฒ ์ธก ์์คํ ์ ์๋ฏธํ๋ฉฐ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋น์ฆ๋์ค ๋ก์ง, ์ธ์ฆ, API ์ ๊ณต ๋ฑ์ ๋ด๋นํ๋ค.๋ฐฑ์๋ ํ๋ ์์ํฌ๋?๋ฐฑ์๋ ํ๋ ์์ํฌ๋ ์น ์ ํ๋ฆฌ์ผ
koreatstm.tistory.com
Thursday(03.27)
https://koreatstm.tistory.com/275
flask with ORM
ORM (Object-Relational Mapping) ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋งคํํ๋ ๋ฐฉ๋ฒFlask-SQLAlchemy๋ Python ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์๋์ผ๋ก ์ฒ๋ฆฌ ->
koreatstm.tistory.com
Friday(03.28)
https://koreatstm.tistory.com/276
Flask์์ ํ ํ๋ฆฟ ์ฌ์ฉํ๊ธฐ
Flask๋ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํ ์ ์๋ค.ํ ํ๋ฆฟ์ HTML ํ์ผ๊ณผ ์ ์ฌํ์ง๋ง ๊ทธ ์์์ ํ์ด์ฌ ์ฝ๋(Jinja2 ํ ํ๋ฆฟ ์ธ์ด)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ์ฝ์ ํ๊ณ ์ ์ด 1.
koreatstm.tistory.com
'๐ฐ Woori FISA > ํ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 13์ฃผ์ฐจ ๊ณผ์ (0) | 2025.04.01 |
---|---|
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 11์ฃผ์ฐจ ๊ณผ์ (0) | 2025.03.17 |
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 9์ฃผ์ฐจ ๊ณผ์ (0) | 2025.03.03 |
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 8์ฃผ์ฐจ ๊ณผ์ (0) | 2025.02.27 |
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 7์ฃผ์ฐจ ๊ณผ์ (0) | 2025.02.17 |