๐๋ค์ด๊ฐ๊ธฐ
๋ฆฌ์กํธ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ค.
ํ์ง๋ง, ์ด์ ๋ง๊ฒ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ์ง ์๊ณ ํจ์๋ฅผ ๋ง๋ค๊ฒ ๋๋ค๋ฉด ์์กด์ฑ์ด ๊น์ ํจ์๋ฅผ ๊ตฌํํด๋ด ์๋ํ์ง ์์ ๋ฒ๊ทธ๋ฅผ ๋ง์ฃผํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค. ๊ทธ๋์ [์ํฐ๋]ํ๋ฆฌ์จ๋ณด๋ฉ-12์์ฑ๋ฆฐ์ง๋ฅผ ์๊ฐํ๋ฉด์ ์๊ฒ ๋ ์ก์ /๊ณ์ฐ/๋ฐ์ดํฐ๋ก ๊ตฌํํ๊ธฐ๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
โจ ์ก์ / ๊ณ์ฐ / ๋ฐ์ดํฐ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ๊ตฌ๋ถํด์ผ ๋ ๊ฒ์ ๋จ 3๊ฐ์ง์ด๋ค.
- ์ก์
๐ ์คํ ์์ ๊ณผ ํ์์ ์์กด, ์ฆ ๋ถ์ํจ๊ณผ๊ฐ ์๋ ์์ํ์ง ์๋ ํจ์
ex) ์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ, ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฝ๊ธฐ- ๋จ์
- ์ธ๋ถ ์ธ๊ณ์ ์ํฅ์ ์ค ์ ์์,
- ํ ์คํธ ์ ๋ก์ง๊ณผ ์ธ๋ถ ์ธ๊ณ๋ฅผ ํจ๊ป ์ฌํํด์ผ ํ๋ ๋ฌธ์ ๋ฐ์
- ์คํํ๊ธฐ ์ ๊น์ง ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ์ ์ ์์
- ๋จ์
- ๊ณ์ฐ ๐ ์
๋ ฅ์ผ๋ก ์ถ๋ ฅ์ ๊ณ์ฐ, ์์ํจ์
ex) ์ต๋๊ฐ ์ฐพ๊ธฐ, ์ด๋ฉ์ผ ์ฃผ์๊ฐ ๋ง๋์ง ํ์ธ- ์ฅ์
- ์ฝ๊ฒ ํ ์คํธ ๊ฐ๋ฅ
- ์ฌ๋ฌ ๋ฒ ํ ์คํธํด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์
- ์กฐํฉ์ ํตํ ๋ ํฐ ๊ณ์ฐ ๊ฐ๋ฅ
- ์คํ ํ์๋ ๊ณผ๊ฑฐ/๋ฏธ๋์ ์คํ๋์๋ ๊ฒ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋จ
- ๋จ์
- ์คํํ๊ธฐ ์ ๊น์ง ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ์ ์ ์์
- ์ฅ์
- ๋ฐ์ดํฐ ๐ ์ด๋ฒคํธ์ ๋ํ ์ฌ์ค
ex) ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฉ์ผ ์ฃผ์, api ํธ์ถ๋ก ์ป์ ๋ฌ๋ฌ ์๋
ํ๋ก๊ทธ๋๋จธ๋ ์ต๋ํ ์๊ฐ์ ์์กดํ๋ ์ก์ ์์ ๊ณ์ฐ์ ๋นผ๋ด์ผํ๊ณ , ๊ณ์ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ ธ๋ ฅ์ ํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ์ก์ ์ ์ํํธ์จ์ด๊ฐ ์คํ๋๋ ์ด์ ์ด๊ธฐ์ ๋ค๋ฃจ๊ธฐ๋ ์ฝ์ง์๋ค.
์ก์ ์ ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, ์๋์ 5๊ฐ์ง๋ฅผ ๋์ฌ๊ฒจ ๋ณด์๋ผ.
- ๊ฐ๋ฅํ ์ก์ ์ ์ ๊ฒ ์ฌ์ฉ ํ๋ค.
- ๊ฐ๋ฅํ ์ก์ ์ ์๊ฒ ๋ง๋ ๋ค.
- ์ธ๋ถ ์ธ๊ณ์ ์ํธ์์ฉํ๋ ๊ฒ์ ์ ํํ๋ค.
- ํธ์ถ ์์ ์ ์์กดํ๋ ๊ฒ์ ์ ํํ๋ค.
โจ ๋ช ์์ ์ /์ถ๋ ฅ , ์๋ฌต์ ์ /์ถ๋ ฅ
ํจ์์๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์๋ค. ๊ฐ๋ฐ์๋ผ๋ฉด ์ด๊ฒ์ ๋ชจ๋ฅด๋ ์ฌ๋์ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด, ๋ช ์์ ์ /์ถ๋ ฅ & ์๋ฌต์ ์ /์ถ๋ ฅ์ ๋ํด ๋ค์ด๋ณด์๋๊ฐ ... ?
์ฑ ์์ ์ด๋ ๊ฒ ๋งํ๊ณ ์๋ค.
- ๋ช ์์ ์ ๋ ฅ ๐ ์ธ์
- ๋ช ์์ ์ถ๋ ฅ ๐ return ๊ฐ
- ์๋ฌต์ ์ ๋ ฅ ๐ ์ธ์ ์ธ ๋ค๋ฅธ ์ ๋ ฅ
- ์๋ฌต์ ์ถ๋ ฅ ๐ ๋ฆฌํด๊ฐ ์ธ ๋ค๋ฅธ ์ถ๋ ฅ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋, ์ฃผ์ํด์ผ ํ ๊ฒ์ ๋ฐ๋ก ๊ณ์ฐ๊ณผ ๋ฐ์ดํฐ๋ก ํจ์๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
์๋ํ๋ฉด ํจ์์ ์คํ ์์กด์ฑ์ ๋ฎ์ถ๊ธฐ ์ํด์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง, ์๋ฌต์ ์ /์ถ๋ ฅ์ ๊ฐ์ง ํจ์๋ฅผ ๋ง๋ค๊ฒ ๋๋ค๋ฉด ์ก์ ํจ์๋ก ๊ตฌํ๋๊ฒ ๋๋ค.
๋๋ถ์ด, ๊ฐ๋ฐ์๋ผ๋ฉด ๋๋ถ๋ถ '์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํ ๊ฐ๋ฐ' ์ ํ๊ตฌํ ๊ฒ์ด๋ค.
์ด๋ฅผ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ด ๋ฐ๋ก ํจ์์ ์ ์ถ๋ ฅ์ ๋ช ์์ ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด๋ค.
์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
- DOM ์
๋ฐ์ดํธ์ ๋น์ฆ๋์ค ๊ท์น์ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค.
๐ DOM์ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ ํจ์๋ก๋ถํฐ ์ ๋ณด๋ฅผ ๋ฐ์ ์คํ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ์ด์ง๋ง, return ๊ฐ์ด ์๋๋ฏ๋ก ์๋ฌต์ ์ถ๋ ฅ์ด๋ค. - ์ ์ญ๋ณ์๊ฐ ์์ด์ผ ํ๋ค.
- ์ ์ญ๋ณ์์ ์์กดํ์ง ์์์ผ ํ๋ค.
- DOM์ ์ฌ์ฉํ ์ ์๋ ๊ณณ์์ ์คํ๋๋ค๊ณ ๊ฐ์ ํ๋ฉด ์๋๋ค.
- ํจ์๊ฐ ๊ฒฐ๊ณผ๊ฐ์ returnํด์ผ ํ๋ค.
๐ return ํ๋ ๊ฐ์ด ์๋ ํจ์๋ ํ ์คํธ๋ ํ ์ ์๊ณ ์ฌ์ฌ์ฉ๋ ํ ์ ์๋ค.
5๊ฐ์ง ์กฐ๊ฑด์ผ๋ก ์ฐ๋ฆฌ๋ ์ก์ ์์ ๊ณ์ฐ์ ๋นผ๋ด๋ ์ฐ์ต์ ํด์ผ ํ๋ค.
๐ค ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ๋นผ๋ด๋ ค๊ณ ๋ ธ๋ ฅํด์ผ ํ๋ ๊ฑธ๊น?
๐ ๊ณ์ฐ ์ถ์ถ์ ๋จ๊ณ๋ณ๋ก ์์๋ณด๊ธฐ
์ ์ ๋ ์ธ์์ return๊ฐ์ด ๋ฐ๋์ง ์๋ ๋ถ๋ณ๊ฐ์ด์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
- ๊ณ์ฐ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ
- ์ ํจ์์ ์๋ฌต์ ์
/์ถ๋ ฅ์ ์ฐพ๊ธฐ
- ํจ์ ์ธ์๋ฅผ ํฌํจํด ํจ์ ๋ฐ์ ์๋ ๋ณ์๋ฅผ ์ฝ๊ฑฐ๋ DB์์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ ๋ ฅ
- return ๊ฐ์ ํฌํจํด ์ ์ญ๋ณ์๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ๊ณต์ ๊ฐ์ฒด๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ถ๋ ฅ
- ์๋ฌต์ ์ ๋ ฅ์ ์ธ์๋ก, ์๋ฌต์ ์ถ๋ ฅ์ return ๊ฐ์ผ๋ก ๋ณ๊ฒฝ
์์ 3๊ฐ์ง ๋จ๊ณ๋ก update_tax_dom์ ๋ณํํ๋ ๊ณผ์ ์ด๋ค.
// ๐ฅ ์ธ๊ธ์ ๊ณ์ฐํ๋ ๋ถ๋ถ์ ์ถ์ถํด๋ณด์.
function update_tax_dom(){
set_tax_dom(shopping_cart_total * 0.20);
}
// โ
์ธ๊ธ ๊ณ์ฐ ๊ธฐ๋ฅ ์ถ์ถ
function calc_tax(amount){
return amount * 0.20;
}
// ๐ ๋ฆฌํฉํฐ๋ง
function update_tax_dom(){
set_tax_dom(calc_tax(shopping_cart_total));
}
๊ณ์ฐ์ ์ถ์ถํ๊ณ , ๋ช ์์ ์ /์ถ๋ ฅ์ ํตํด ํจ์๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ ๊น์ ์์ ๋ก ์ด ๊ธ์ ์ ๋ฆฌํด๋ณด์.
์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๊ณ์ฐ์ด๋ ๋ฐ์ดํฐ๋ ์๊ณ ๋ชจ๋ ํจ์๊ฐ Action์ผ๋ก ๊ตฌํ๋์ด์๋ค.
// โ
์ ์ญ ๋ณ์๋ Action
var shopping_cart = [];
var shopping_cart_total = 0;
function add_item_to_cart(name, price){
// โ
์ ์ญ ๋ณ์๋ฅผ ๋ฐ๊พธ๋ ๊ฒ๋ Action
shopping_cart.push({name, price});
calc_cart_total();
}
function update_shopping_icons(){
// โ
DOM์ ๊ฐ์ ธ์ค๋ ๊ฒ๋ Action
const buy_btns = get_buy_btns_dom();
for(let idx = 0 ; idx < buy_btns.length ; idx++){
const current_btn = buy_btns[idx];
const current_item = current_btn.item;
// โ
DOM์ ๋ณ๊ฒฝํ๋ ๊ฒ๋ Action
if(current_item.price + shopping_cart_total >= 20){
current_btn.show_free_shopping_icon();
} else {
current_btn.hide_free_shopping_icon();
}
}
}
function update_tax_dom(){
set_tax_dom(shopping_cart_total * 0.20);
}
function calc_cart_total(){
// โ
์ ์ญ ๋ณ์๋ฅผ ๋ฐ๊พธ๋ ๊ฒ๋ Action
shopping_cart_total = 0;
for(let idx = 0 ; idx < shopping_cart.length ; idx++){
const current_item = shopping_cart[idx];
shopping_cart_total += current_item.price
}
set_cart_total_dom();
update_shopping_icons();
update_tax_dom();
}
๋จผ์ ๊ณ์ฐ์ ๋นผ๋ด๋ณด์.
var shopping_cart = [];
var shopping_cart_total = 0;
function calc_cart_total(){
// 1๏ธโฃ ์๋ธ๋ฃจํด์ ์ถ์ถํ๋ค
shopping_cart_total = calc_total(shopping_cart);
set_cart_total_dom();
update_shopping_icons();
update_tax_dom();
}
// 2๏ธโฃ ๋ช
์์ ์
์ถ๋ ฅ ์ฌ์ฉ
function calc_total(cart){
// 3๏ธโฃ ์ง์ญ๋ณ์ ์ฌ์ฉ
let total = 0;
for(let idx = 0 ; idx < cart.length ; idx++){
const current_item = cart[idx];
total += current_item.price
}
return total;
}
๋จผ์ calc_cart_total์์ ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์๋ธ๋ฃจํด์ผ๋ก ์ถ์ถํ์ฌ ํจ์๋ฅผ ์์ฑํ๋ค.
์์ฑ๋ ํจ์๊ฐ ๋ช ์์ ์ /์ถ๋ ฅ์ ์ฌ์ฉํ๋๋ก ๊ตฌํํ๊ณ , ๋ด๋ถ์์๋ ์ง์ญ๋ณ์๋ก ๊ฐ์ ๊ณ์ฐํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
๊ทธ ๊ฒฐ๊ณผ, ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์์ดํ ๋ค์ ๊ฐ๊ฒฉ ์ดํฉ์ ๊ณ์ฐํ๋ ๊ณ์ฐ ํจ์๊ฐ ์์ฑ๋์๋ค.
์ฐ๋ฆฌ๋ ์ด์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ญ ๋ณ์์ ์ ์ฅํ๋ ๊ฒ์ผ๋ก ๋ฆฌํฉํฐ๋ง์ ์งํํ ์ ์๋ค.
๋ ๋ค๋ฅธ ๊ณ์ฐ์ ๋นผ๋ด๋ณด์.
var shopping_cart = [];
var shopping_cart_total = 0;
function add_item_to_cart(name, price){
// 1๏ธโฃ ์ ์ญ๋ณ์ ์ง์ ๋ณ๊ฒฝ ๐ ๊ณ์ฐ ํจ์์ ๊ฒฐ๊ณผ๋ก ๋ณ๊ฒฝ
shopping_cart = add_item(shopping_cart, name, price);
calc_cart_total();
}
// 2๏ธโฃ ๊ณ์ฐ ํจ์ ๊ตฌํ
function add_item(cart, name, price){
// 3๏ธโฃ ๋ณต์ฌ๋ณธ ์์ฑ ํ ๋ณ๊ฒฝํ์ฌ return
const new_cart = cart.slice();
new_cart.push({name, price});
return new_cart;
}
์ ์ญ๋ณ์๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ๊ฒ ๋์ ,
๋ด๋ถ์ ๋ณต์ฌ๋ณธ์ ์ฌ์ฉํ๊ณ ๋ช ์์ ์ ์ถ๋ ฅ์ ํตํด ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๊ณ์ฐ ํจ์๋ฅผ ๊ตฌํํ์ฌ ๋ถ๋ฆฌํ ์ ์๋ค.
์ด์ธ์๋ update_shopping_icons( ) ๋ด๋ถ์ if ๋ฌธ๋ ๋น์ฆ๋์ค ๊ท์น์ผ๋ก ๊ณ์ฐ๋๋ ์ง์ ์ด๋ผ ๋ถ๋ฆฌํ ์ ์๋ค.
ํ ๋ฒ ์ง์ ํด๋ณด๊ธธ ๊ถ์ฅํ๋ค.
๐ค ์ด๋ฐ ์ค๊ณ๋ ์ ํ์ํ ๊ฒ์ผ๊น..?
์ค๋ฌด๋ฅผ ์ ํ๋ค๋ณด๋ฉด, ์ค๊ณ ์์ด ๊ธฐ๋ฅ ๊ตฌํ์ ๊ธ๊ธํ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค.
ํ์ง๋ง, ์ค๊ณ๊ฐ ์กํ์์ง ์์ ์ฝ๋์ ๊ธฐ๋ฅ์ด ๋ํด์ง๋ฉด์ ๊ด์ฌ์ฌ๊ฐ ์ฌ๋ฌ ๊ฐ ์์ฑ๋์ด ๊ฒฐ๊ตญ ์์ผ๋ฒ๋ฆฐ ํจ์๋ก ๋ณํ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ํจ์๋ฅผ ์ฌ์ฉํ ๋ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ 1๊ฐ์ ํจ์๊ฐ 1๊ฐ์ ๊ด์ฌ์ฌ๋ฅผ ๋ค๋ฃฐ ์ ์๋๋ก ์ค๊ณ ํ๋ ๊ฒ์ด ํ์ํ๋ค.
ํจ์๊ฐ ๋ง์์ง๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง,
์์ผ์๋ ๊ฒ์ ๋ถ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ํฉ์ด์ ธ์๋ ๊ฒ์ ์กฐํฉํด์ ์ฌ์ฉํ๋๊ฒ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ๋ ์ ๋ฆฌํ๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ ์คํธ์ ์ฉ์ด์ฑ์ ๋์ด๊ธฐ ์ํ ๊ธฐ์ด ๋จ๊ณ์์ ์์ง๋ง๊ณ ,
์ก์ /๊ณ์ฐ/๋ฐ์ดํฐ๋ก ๋ถ๋ฆฌํด๋ด๋ ์ฐ์ต์ ์ง์์ ์ผ๋ก ๋์ ํด๋ณด์์ผ ํ๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
'WEB > Insight' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชจ๋ธ ๊ณ์ธต์ผ๋ก ์ ์ฐํ๊ฒ ์ปดํฌ๋ํธ ๊ด๋ฆฌํ๊ธฐ ( feat.FEW ) (1) | 2024.08.11 |
---|---|
[ ์์ ๋ค์ด์ค๋ ํจ์ํ ์ฝ๋ฉ ] ๊ณ์ธตํ ์ค๊ณ (0) | 2024.01.04 |
[ ์ข์ ์ฝ๋, ๋์ ์ฝ๋ ] ๊ฐ๋ ์ฑ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ผ (0) | 2023.11.02 |
CORS (0) | 2023.07.09 |
PWA (Progressive Web App) (0) | 2023.06.29 |