๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(112)
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL๋ฌธ LV. 1 (2) *Oracle ๊ธฐ์ค€ ํ’€์ด 13. ์กฐ๊ฑด์— ๋งž๋Š” ํšŒ์›์ˆ˜ ๊ตฌํ•˜๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131535 ) USER_INFO ํ…Œ์ด๋ธ”์—์„œ 2021๋…„์— ๊ฐ€์ž…ํ•œ ํšŒ์› ์ค‘ ๋‚˜์ด๊ฐ€ 20์„ธ ์ด์ƒ 29์„ธ ์ดํ•˜์ธ ํšŒ์›์ด ๋ช‡ ๋ช…์ธ์ง€ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๋”๋ณด๊ธฐ SELECT COUNT(*) AS USERS FROM USER_INFO WHERE AGE>=20 AND AGE=29 THEN '์žฅ๊ธฐ ๋Œ€์—ฌ' ELSE '๋‹จ๊ธฐ ๋Œ€์—ฌ' END AS 'RENT_TYPE' FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09' ORDER BY HISTO..
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL๋ฌธ LV. 1 (1) *Oracle ๊ธฐ์ค€์œผ๋กœ ์ •๋‹ต๋ฅ  ๋†’์€ ์ˆœ์œผ๋กœ 24๋ฌธ์ œ ์ค‘ ์ƒ์œ„ 12๋ฌธ์ œ๋งŒ 1. ์•„ํ”ˆ ๋™๋ฌผ ์ฐพ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59036 ) ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋™๋ฌผ ์ค‘ ์•„ํ”ˆ ๋™๋ฌผ1์˜ ์•„์ด๋””์™€ ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์•„์ด๋”” ์ˆœ์œผ๋กœ ์กฐํšŒํ•ด์ฃผ์„ธ์š”. ๋”๋ณด๊ธฐ SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick'; 2. ์—ญ์ˆœ ์ •๋ ฌํ•˜๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/59035 ) ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋ชจ๋“  ๋™๋ฌผ์˜ ์ด๋ฆ„๊ณผ ๋ณดํ˜ธ ์‹œ์ž‘์ผ์„ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ..
DAY 3 #2.0 ~ #2.3 #2.0 SocketIO vs WebSockets https://socket.io/ SocketIO : ์‹ค์‹œ๊ฐ„, ์–‘๋ฐฉํ–ฅ, event ๊ธฐ๋ฐ˜์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” framework https://socket.io/docs/v4/ WebSocket๊ณผ์˜ ์ฐจ์ด์ ์€, webSocket์ด socketIO๊ฐ€ ์œ„์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์— ๋ถˆ๊ณผํ•˜๋ฉฐ, ๋งŒ์•ฝ WebSocket์ด ์‚ฌ์šฉ๋ชปํ•˜๊ฒŒ ๋˜๋”๋ผ๋„ socketIO๋Š” http long-polling ๋“ฑ์„ ๋Œ€์ฒดํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋‹ค. ๋‹น์žฅ webSocket์€ protocol, socketIO๋Š” framework์ด๋ผ๋Š” ์ ์—์„œ ๋‹ค๋ฅด๋‹ค.. https://www.npmjs.com/package/socket.io #2.1 Installing Socke..
DAY 2 #1.3 ~ 1.9 #1.3 WebSocket Events https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket app.js // ์ด socket์„ ์ด์šฉํ•ด์„œ frontend์—์„œ backend๋กœ ๋ฉ”์„ธ์ง€ ์ „์†ก ๊ฐ€๋Šฅ // ์—ฌ๊ธฐ socket์€ ์„œ๋ฒ„๋กœ์˜ ์—ฐ๊ฒฐ๋กœ, window.location.host๋Š” pc๋ฟ๋งŒ ์•„๋‹Œ ๋ชจ๋ฐ”์ผ์—์„œ๋„ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ํ•ด์คŒ // (http://localhost:3000์ด ์•„๋‹Œ, ์•„์˜ˆ ๊ธฐ๊ธฐ์˜ host์˜ location์œผ๋กœ ์ ‘์†) const socket = new WebSocket(`ws://${window.location.host}`); webSocket ์‚ฌ์šฉ - server : node.js ํ™˜๊ฒฝ์—์„œ ws์™€ ๊ฐ™์€ ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด webSo..
DAY 1 #0.2 ~ #1.2 ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ ์ค€๋น„๋ฅผ ์œ„ํ•ด ๋ฏธ๋ฆฌ 0.0~0.4๋ฅผ ๋“ค์–ด์•ผํ•œ๋‹ค... ์•ˆ๋“ค์—ˆ๋‹ค๊ฐ€ ์ง€๊ธˆ 1์‹œ๊ฐ„์งธ ํ—›ํƒ•์ณค๋‹ค... https://ssocoit.tistory.com/188 ์ฐธ๊ณ  #0.2 server Setup https://www.npmjs.com/package/ws ๋จผ์ € node, ws, express, pug ์„ค์น˜ ๋‚˜๋Š” ์ด๋ฏธ ๋…ธ๋“œ๋Š” ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‚˜๋จธ์ง€ ์„ธ๊ฐœ๋งŒ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•จ.. npm i ws npm i express npm i pug github์— ์˜ฌ๋ฆฐ๋‹ค๋ฉด readme ํŒŒ์ผ๋„ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ํ„ฐ๋ฏธ๋„์— npm init-y ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ญ”๊ฐ€ ์žˆ์–ด๋ณด์ด๋Š” ๊ธฐ๋ณธ package.json ํŒŒ์ผ์„ ์ž‘์—…ํ•ด์ค€๋‹ค. ๊ฑฐ๊ธฐ์— ์ถ”๊ฐ€๋กœ ๋ง๋ถ™์ด๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. nodemon๊ณผ babel์„ ์‚ฌ์šฉํ• ๊ฒƒ์ด๋‹ˆ ํ„ฐ๋ฏธ๋„..
DAY 14 #8.0 Geolocation ์šฐ์„  ๋‚ ์”จ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋ฏธ๋ฆฌ index.html์— ์ค€๋น„๋ฅผ ํ•ด์ค€๋‹ค. function onGeoOk(position){console.log(position);} function onGeoError(){alert("Can't find you. no Weather for you.");} navigator.geolocation.getCurrentPosition(onGeoOk, onGeoError); ์œ„์˜ ์ฝ”๋“œ๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋‚ด ์œ„์น˜๋ฅผ ๋ฐ›์•„์˜จ๋‹ค. ๋‹ค๋งŒ getCurrentPosition()์—๊ฒŒ๋Š” 2๊ฐœ์˜ argument๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ํ•˜๋‚˜๋Š” ๋ชจ๋“  ๊ฒŒ ์ž˜ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ์‹คํ–‰๋œ ํ•จ์ˆ˜(onGeoOk), ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋  ํ•จ์ˆ˜(onGeoError)์ด๋‹ค. ์„ฑ๊ณตํ–ˆ์„ ์‹œ์—๋Š” ํ•ด๋‹น ..
DAY 13 7.6 ~ 7.8 TO DO LIST #7.6 Deleting To Dos part One ์ €๋ฒˆ ์ฝ”๋“œ์—์„œ ์‚ญ์ œ ๊ธฐ๋Šฅ์€ ์ž˜ ์‹คํ–‰๋์œผ๋‚˜, ๋ฌธ์ œ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•ญ๋ชฉ์ด ์žˆ์„ ๋•Œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด '๋‚˜๋ฃจํ†  ๋ณด๊ธฐ'๊ฐ€ ๋‘๊ฐœ๊ฐ€ ์žˆ์„ ๋•Œ, ๋‚˜๋ฃจํ†  ๋ณด๊ธฐ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ–ˆ์„ ๋•Œ ์–ด๋–ค ๊ฒƒ์„ ์‚ญ์ œํ–ˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค. ๋•Œ๋ฌธ์— array์˜ ๊ฐ item์— id๋ฅผ ๋ถ€์—ฌํ•ด ๊ณ ์œ ์„ฑ์„ ๊ฐ–๊ฒŒํ•  ๊ฒƒ์ธ๋ฐ, ์ด ๊ณ ์œ ์„ฑ์€ Date.now() ํ•จ์ˆ˜๋กœ ๋ถ€์—ฌํ•  ๊ฒƒ์ด๋‹ค. Date.now()๋Š” ๋ฐ€๋ฆฌ์ดˆ(1000/1์ดˆ)๋ฅผ ์ฃผ๋Š” ํ•จ์ˆ˜๋กœ, ์ด๋ฅผ ๊ฐ item์—๊ฒŒ ๊ณ ์œ ํ•œ ์•„์ด๋”” ๊ฐ’์œผ๋กœ ๋ถ€์—ฌํ•  ๊ฒƒ์ด๋‹ค. handleToDoSubmit function handleToDoSubmit(event) { event.preventDefault(); const newTodo = toDo..
DAY 12 7.0 ~ 7.5 TO DO LIST (์–‘์ด ๋งŽ์•„ DAY 12์—๋Š” 7.0~7.5, DAY 13์—๋Š” 7.6~7.8, DAY 14์—๋Š” 8.0~8.2๋กœ ๋‚˜๋ˆˆ๋‹ค.) #7.0 Setup index.html todo-form ๋‚ด์˜ input์—๋Š” ํ•  ์ผ์„ ์ž…๋ ฅ๋ฐ›๊ณ , ul ํƒœ๊ทธ์—๋Š” ์ €์žฅํ•œ text๊ฐ€ ๋‚˜์—ด๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. todo.js const toDoForm = document.getElementById("todo-form"); const toDoInput = document.querySelector("#todo-form input"); // const toDoInput = toDoForm.querySelector("input"); // ์ด๋Ÿฐ ์‹์œผ๋กœ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. const toDoList = document.g..