ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

 

Astronaut

 

๐Ÿš€๊ณ„๊ธฐ

์—„์ฒญ ๋Œ€๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋„ ์•„๋‹ˆ๊ณ ... ๊ณต๊ฐœํ•˜๊ธฐ๋„ ๋ถ€๋„๋Ÿฝ์ง€๋งŒ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐฐ์šฐ๊ฑฐ๋‚˜ ๋Š๋‚€ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด์„œ ์˜ฌ๋ฆด ๊ณ„ํš. ๊ฐœ์ธ์ ์œผ๋กœ JS๋ฅผ ๋น ๋ฅด๊ฒŒ ์Šต๋“ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์›น์•ฑ Toyํ”„๋กœ์ ํŠธ

์ด์ „์— React๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ์ ํŠธ๋“ค์€ ์ธํ„ด ๋•Œ ์ฒ˜์Œ ๊ฒฝํ—˜ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ JS์— ๋Œ€ํ•œ ํ•™์Šต๋„ ์—†์ด React๋ฅผ ๋จผ์ € ํ•™์Šตํ–ˆ๋‹ค. ๋ฌด์ž‘์ • ๋ถ€๋”ชํžˆ๋ฉด์„œ ๋ฐฐ์šฐ๋‹ค ๋ณด๋‹ˆ ๊ธฐ๋ณธ์ ์ธ UI๋Š” ant-design, bootstrap์—์„œ ๊ฐ€์ ธ์™€ ์งœ๊น๊ธฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ JS๋ฅผ ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ UI๋งŒ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํฐ ์˜๋ฏธ๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์‹œ JS๋ฅผ ๊ณต๋ถ€ํ–ˆ๋‹ค. React๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ JS์— ๋Œ€ํ•ด ๋งŽ์€ ์ดํ•ด๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์˜ Astronaut ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์›น ์•ฑ์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํ•™์Šตํ–ˆ๋‹ค. ๊ฐ„๋‹จํ•œ JS ํ”„๋กœ์ ํŠธ์ง€๋งŒ, React๊ฐ€ UI ๊ตฌ์„ฑ์€ ์ •๋ง ํŽธํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค.. ๋˜ํ•œ JS์˜ ๋™์ž‘์›๋ฆฌ๋‚˜ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ž€ ๋ฌด์—‡์ธ์ง€ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋๋‹ค. 

 

[JS] JavaScript์˜ Event Loop

[JS] Javascript ์ž‘๋™ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ, Event Loop Javscript๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ์ด๋Ÿฐ ๋ง์„ ์ข…์ข… ๋“ฃ๋Š”๋‹ค. ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ Node.js ์ด๋Ÿฐ

asfirstalways.tistory.com

 

React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ . Reference์—” ๋” ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ๋Š” ๋งํฌ๊ฐ€ ์žˆ๋‹ค.

 

 

โšก ์•„๋ž˜ ๊ธฐ๋Šฅ๋“ค์€ github์— ์„ค๋ช…ํ•ด๋†จ์ง€๋งŒ ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์ธ ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ ๋‚ด์šฉ

1. ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ์„ ๋‹ด๋‹นํ•˜๋Š” loginForm์„ ์ด์šฉํ•  ๋•Œ, submit์„ ์š”์ฒญํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” userName์„ ๋ฐ›์•˜์„ ๋•Œ , ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜๊ธธ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

function onLoginSubmit(e) {
    e.preventDefault();
    const userName = loginInput.value;
    console.log(userName);
}
//e.preventDefault()๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ง‰์•˜๋‹ค.

 

 

2. .hidden ์ด๋ผ๋Š” display:none์†์„ฑ์„ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ login-form์—์„œ submit์„ ํ•ด์คฌ์„ ๋•Œ, ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์œ ์ €๋„ค์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด .hidden ํด๋ž˜์Šค๋ฅผ ์—†์• ์คฌ๋‹ค. ๋˜ํ•œ user์˜ ์ด๋ฆ„์„ ๊ธฐ์–ตํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ local-storage์— ์ €์žฅํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์คฌ๋‹ค. ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— USERNAME_KEY๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์œ ์ €๋„ค์ž„ ์ž…๋ ฅ๋ฐ›๋Š” loginForm์„ ๊ฐ์ถ˜๋‹ค.

function greeting(username) {
    greet.innerText = `Hello Astronaut ${username}.`;
    greet.classList.remove(HIDDEN_CLASSNAME);
}

const isUserNameSaved = localStorage.getItem(USERNAME_KEY);
if (isUserNameSaved === null) {
    loginForm.classList.remove(HIDDEN_CLASSNAME);
    loginForm.addEventListener('submit', onLoginSubmit);
} else {
    gretting(isUserNameSaved);
}

 

 

3. ์‹œ๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ๋‚ด์žฅ ํ•จ์ˆ˜์ธ padStart(2,'0')๋ฅผ ์ด์šฉํ•ด์„œ "00:00:00" ํฌ๋งท์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฆ‰, ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 2๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 2๋ณด๋‹ค ์ž‘์œผ๋ฉด 0์„ ๋ฌธ์ž์—ด ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ฑ„์›Œ ๋„ฃ๋Š”๋‹ค. ์ด๋ฅผ ์ด์šฉํ•ด ์‹œ๊ฐ„ ๊ฐ’ ํ‘œํ˜„์„ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ๋ฌธ์ž์—ด์˜ ์ด๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ฑ„์šธ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ. 

a = '83'; 
console.log( a.padStart(4, '0') ); 
//์‹คํ–‰๊ฐ’ : 0083
function getClock() {
    const date = new Date();
    const hours = String(date.getHours()).padStart(2, '0');
    const min = String(date.getMinutes()).padStart(2, '0');
    const sec = String(date.getSeconds()).padStart(2, '0');

    const time = `${hours}:${min}:${sec}`;
    clock.innerText = time;
}

 

4. ํ™”๋ฉด์„ ์ถ•์†Œ์‹œ์ผฐ์„ ๋•Œ ์ด๋ฏธ์ง€ ์ž˜๋ฆผ ํ˜„์ƒ๊ณผ ์Šค๋งˆํŠธํฐ ๋“ฑ์—์„œ ์ž‘๋™์„ ํ–ˆ์„ ๋•Œ, UI๊ฐ€ ๋ถˆ์•ˆ์ •ํ–ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค CSS ์„ค์ •์ด ๊ต‰์žฅํžˆ ์–ด๋ ค์› ๋‹ค. ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งž์ถ”๊ธด ํ–ˆ๋Š”๋ฐ, ํ™”๋ฉด์˜ ๊ทœ๊ฒฉ๋งˆ๋‹ค CSS๋ฅผ ์–ด๋–ป๊ฒŒ ํ™”๋ฉด์ด ๋‹ฌ๋ผ์ ธ๋„ ๋˜‘๊ฐ™์ด ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.. (ํ™”๋ฉด ๊ทœ๊ฒฉ์— ๋”ฐ๋ผ์„œ px ๋‹จ์œ„๋กœ ๊ณ„์‚ฐ์„ ํ•˜๋Š” ๊ฑด๊ฐ€..?) ํ˜„์žฌ ๋‚ด ์ฝ”๋“œ๋Š” ์‚ฌ์ดํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์กŒ์„ ๋•Œ ์ƒ๊ฐํ•ด์•ผ ๋  ๋ฌธ์ œ๋„ ๋งŽ๊ณ  ์ž์ž˜ํ•œ CSS ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ์ƒ๊ธธ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„์—์„  React๊ฐ€ UI๋ฅผ ๋งŒ๋“ค๊ธฐ ๊ต‰์žฅํžˆ ์†์‰ฌ์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.  (๋ฏธ๋””์–ด์ฟผ๋ฆฌ)

const body = document.querySelector('body');

putImg = `img/${chosenImage}`;
body.style.backgroundImage = `url(${putImg})`;
body.style.backgroundSize = '100% 100%';

 

 

 

5. OpenWeather API ํ‚ค๋ฅผ ๊ณต๊ฐœํ•ด๋„ ๋˜๋Š”๊ฐ€?

์‚ฌ์‹ค ์•„์ง๋„ ํŒ๋‹จ์ด ์ž˜ ์•ˆ ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. Open api์ด๊ณ , ํ•ด๋‹น ์‚ฌ์ดํŠธ์—์„œ ๋‚˜์˜ ์ •๋ณด๋ฅผ ์š”๊ตฌํ•œ ๋ถ€๋ถ„๋„ ๋งŽ์ง€ ์•Š๋‹ค. ๊ทธ๋ž˜์„œ ๊ณต๊ฐœ๋ฅผ ํ•ด๋„ ์ƒ๊ด€์ด ์—†์ง€ ์•Š๋‚˜ ์ƒ๊ฐ์ด ๋“ ๋‹ค... ํ•˜์ง€๋งŒ ํ™•์‹คํ•˜์ง€ ์•Š์•„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค. 

๋Œ€์•ˆ์€?

API ํ‚ค๋Š” ๋ณด์•ˆ์„ ์ž˜ ์œ ์ง€ํ•˜๋ฉฐ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ ์ธก์— KEY๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์œ ํŠœ๋ธŒ ์„œ๋ฒ„๋กœ ๋ฐ”๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” KEY๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์—†๋‹ค. ์š”์ฒญ URL์— '&key=MY_API_KEY'์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋‚ด API ํ‚ค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐœ๋  ์ˆ˜๋ฐ–์— ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ KEY๋ฅผ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•„๋‹Œ ๊ณณ์— KEY๋ฅผ ๋ณด๊ด€ํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€์•ˆ์€ ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.

์ด ์‚ฌ์ดํŠธ์—์„œ ์œ ํŠœ๋ธŒ api ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด API_KEY๋ฅผ ์ˆจ๊ธฐ๋Š” ๊ณผ์ •์ด๋‹ค. ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋งŽ์ด ๋๋‹ค. ์œ ํŠœ๋ธŒ ์ „์šฉ api ์˜คํ”ˆ์†Œ์Šค๋ผ ๋‚ด๊ฐ€ ์•„์ง ์‚ฌ์šฉ์€ ํ•  ์ˆ˜ ์—†๋‹ค. Express๋ฅผ ํ•™์Šต ์ค‘์ด๋ผ ์ถ”ํ›„์— ์ € ์˜คํ”ˆ์†Œ์Šค๋ฅผ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋ด์•ผ๊ฒ ๋‹ค.

 

 

๐Ÿ“• Reference

https://environmentset.github.io/2019/02/13/Why-use-React/ 

https://365kim.tistory.com/93#2.-netlify%EB%A1%9C-10%EB%B6%84-%EB%A7%8C%EC%97%90-api-%ED%82%A4-%EC%88%A8%EA%B8%B0%EA%B8%B0 

https://yeongjin13.tistory.com/50 

728x90
๋ฐ˜์‘ํ˜•

'Project' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] Astronaut-shop ์‚ฝ์งˆ ๊ฐœ๋ฐœ์ผ์ง€2  (0) 2021.08.19
[React] Astronaut-shop ์‚ฝ์งˆ ๊ฐœ๋ฐœ์ผ์ง€1  (0) 2021.08.08
๋Œ“๊ธ€