MapleStory Finger Point

์ตœ์‹  ๊ธ€ Public

more

React props ๋กœ img src ๊ฒฝ๋กœ (์ƒ๋Œ€๊ฒฝ๋กœ ๋ฌธ์ œ)

์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ํ• ๋•Œ ์ƒ๊ธฐ๋Š” ์ด์Šˆ โ€ฆ.props ๋กœ ๋„˜๊ธฐ๊ฒŒ๋˜๋ฉด ํŒŒ์ผ์— ๋”ฐ๋ผ ์ƒ๋Œ€๊ฒฝ๋กœ๋„ ๋ฐ”๋€Œ๊ฒŒ๋˜์–ด์„œ ๊ทธ๋Ÿฐ๊ฒƒ ๊ฐ™๋‹ค .๊ทธ๋ƒฅ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์“ฐ์ž! ์•„๋ž˜์ฒ˜๋Ÿผ ํ•˜๋ฉด ๋˜๊ธดํ•˜๋Š”๋ฐ ๊ทธ๋ƒฅ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์“ฐ์ž!์–ด์ฐจํ”ผ ํด๋ผ์šฐ๋“œํ™” ํ• ๊ฑฐ๋ผ์„œ ~

React ์ปดํฌ๋„ŒํŠธ CSS ์ถฉ๋Œ ๋ฒ„๊ทธ

https://y-seon97.tistory.com/80https://velog.io/@conan/module-css ํ™”๋ฉด ์ „ํ™˜์‹œ ์ด์ „ css ๊ฒน์นจ ํ˜„์ƒ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•ํ™•์žฅ์ž๋ฅผ module.css๋กœ ์ž‘์„ฑํ•œ๋‹ค.  (์›ํ•˜๋Š” ํŒŒ์ผ ๋ช…).module.css  ๊ทธ ๋‹ค์Œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ import ํ•œ๋‹ค. import styles from './styles.module.css';function MyComponent() { return Hello;}

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port. ํฌํŠธ ์ถฉ๋Œ๋กœ ์ธํ•œ ์˜ค๋ฅ˜์ด๋‹ค.์ด๋ฏธ 8989 ํฌํŠธ๋ฅผ ์ ์œ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.    PowerShell ์—์„œ ํ•ด๋‹น  netstat -ano | findstr :8080  taskkill /PID 12345 /F

[Docker] Compose

๋ชฉ์ฐจ    ๐Ÿ”Compose  ๋ž€? ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์ •์˜ํ•˜๊ณ ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํˆด ์—ฌ๋Ÿฌ๊ฐœ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ์— ๋„์›€์คŒ๋ณต์žกํ•œ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์‹œํ‚ค๋˜ ๊ฑธ ๊ฐ„์†Œํ™” ์‹œํ‚จ๋‹ค. Compose ์ƒ์„ฑ    โœ…ํŒŒ์ผ๋ช…์€ `compose.yml` ์œผ๋กœ ์ƒ์„ฑ    โœ…  ` docker run --name webserver -d -p 80:80 nginx `ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์•„๋ž˜ yml ํŒŒ์ผ๋กœ ์ž‘์„ฑ ํ•œ ๊ฒƒ yml ์€ ๋“ค์—ฌ์“ฐ๊ธฐ๋กœ ๊ณ„์ธต์„ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜  Compose ์‹คํ–‰  โœ…` docker compose up ` ์„ ํ•˜๋ฉด nginx ๊ฐ€ ์‹คํ–‰๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๊ฐ„ํŽธํ•˜๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅ!ํฌ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์ด๊ธฐ ๋•Œ๋ฌธ์— (์ž‘์—…๋ถˆ๊ฐ€ ctrl + c ํƒˆ์ถœ)   โœ… ` docker compose up ` ..

๐Ÿ”ต Docker 2025.04.05 0

โšซ ์šฉ์–ด ์ •๋ฆฌ Public

more

ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜(Hexagonal Architecture) ๊ฐœ๋…

๋ชฉ์ฐจ    ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ๊ฐœ๋… ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜(Hexagonal Architecture)= ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ ์•„ํ‚คํ…์ฒ˜(Ports and Adapters Architecture)= ์œก๊ฐํ˜• ์•„ํ‚คํ…์ณ  ๐Ÿ“Œ ๋น„์ง€๋‹ˆ์Šค ๋ชจ๋ธ(๋„๋ฉ”์ธ)์„ ์™ธ๋ถ€์™€ ๊ฒฉ๋ฆฌ์‹œ์ผœ ์œ ์—ฐ+ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋น„์ง€๋‹ˆ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ์ˆ  ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌ์‹œํ‚จ๋‹ค. (๋˜ํ•œ ๊ธฐ์ˆ ์ฝ”๋“œ๋„ ์ด์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•จ) ๋น„์ง€๋‹ˆ์Šค ๋ชจ๋ธ์€ ์ค‘์•™์˜ ๋„๋ฉ”์ธ ์˜์—ญ, ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํฌํŠธ , ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์™€ ์†Œํ†ตํ•จ    ์ˆ˜์ง์  ๊ณ„์ธตํ™”์™€ ๊ธฐ๋Šฅ ๊ธฐํŒ ํŒจํ‚ค์ง€ ์•„ํ‚คํ…์ฒ˜์˜  ์žฅ์ ์„ ๋™์‹œ์— ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค !๊ณ„์ธต๊ธฐ๋ฐ˜ ํŒจํ‚ค์ง• (MVC ์•„ํ‚คํ…์ณ) + ๊ธฐ๋Šฅ๊ธฐ๋ฐ˜ ํŒจํ‚ค์ง•(๋„๋ฉ”์ธ, ์—ญํ• ๋ผ๋ฆฌ ํŒจํ‚ค์ง•)  = โญ ๊ตฌ์กฐ ,์šฉ์–ด ํด๋”๊ตฌ์กฐadapter, apllication ,dom..

TDD (Test-Driven Development) ๋ฐฉ๋ฒ•๋ก  ๊ฐœ๋…

๋ชฉ์ฐจ   TDD ๊ฐœ๋…Test-Driven Development (ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ) ์˜ ์•ฝ์ž๊ฐœ๋ฐœ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ž„  ๐Ÿ“Œ๊ธฐ์กด์˜ ๊ฐœ๋ฐœ :์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ -> ์„ค๊ณ„ -> ๊ฐœ๋ฐœ -> ํ…Œ์ŠคํŠธ -> ๋ฐฐํฌ(์žฌ์„ค๊ณ„๋กœ ์ธ ํ•œ  => ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€ ใ…œใ…œ) ๐Ÿ“Œ TDD :๋ชฉ์  ์ •์˜ -> (์ผ๋‹จ) ์‹คํŒจ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ -> ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ ์ž‘์„ฑ -> ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๋ฐ˜๋ณต)-> ๊ฐœ๋ฐœ ->  ๋ฐฐํฌ  TDD ํˆด JUnit : java ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ (์ด์™ธ์—๋„ xUnit ์ด๋ผ๊ณ  ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๋„ ์žˆ์Œ) Mockito : Mocking(๋ชจ์˜) ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ     red-green-refactoring cycle   TDD ์žฅ๋‹จ์ ์žฅ์ - ๊ฐœ๋ฐœ์ƒ์‚ฐ์„ฑ, ๊ตฌํ˜„ ๋“ฑ๋“ฑ ํšจ์œจ์ ์ž„ ๋‹จ์ -..

Library | Framework | API ๊ฐœ๋…

๋ชฉ์ฐจ    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library) ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž (ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœ) ์ฝ”๋“œ ๋ชจ์Œ์ž„์ฝ”๋“œ, ๋ชจ๋“ˆ, ํŒจํ‚ค์ง€ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋จ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ ํ๋ฆ„ ์ œ์–ด ๊ฐ€๋Šฅ  ๐Ÿ“Œ JavaScript jQuery์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DOM ์กฐ์ž‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Ajax ์š”์ฒญ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ๊ฐœ์„ Lodash์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ  ๋ฐฐ์—ด, ๊ฐ์ฒด ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์ตœ์ ํ™”Moment.js / Day.js์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ ์งœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚ ์งœ ํฌ๋งท ๋ณ€ํ™˜Axios์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ HTTP ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌREST API ํ˜ธ์ถœ   ํ”„๋ ˆ์ž„์›Œํฌ(Framework) ์ฃผ๋„๊ถŒ์ด ํ”„๋ ˆ์ž„์›Œํฌ (๊ฐœ๋ฐœ์ž๊ฐ€ ์ข…์†๋จ, ๊ทœ์น™๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ„)  ๐Ÿ“Œ ๋ฐฑ์—”๋“œSpringJava๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ, ๊ฐ์ฒด ์ง€ํ–ฅ๊ธฐ์—… ์‹œ์Šคํ…œ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜DjangoPython๋น ๋ฅธ ๊ฐœ๋ฐœ, ๋ณด์•ˆ ๊ฐ•ํ•จ๋ฐ์ดํ„ฐ ๋ถ„์„, ์Šคํƒ€ํŠธ..

HTTP(Hypertext Transfer Protocol) ๋ฉ”์„œ๋“œ์™€ ์‘๋‹ต์ฝ”๋“œ

HTTP ์ƒํƒœ ์ฝ”๋“œ ์ •๋ฆฌ1xx (์ •๋ณด ์‘๋‹ต)100 Continue: ์š”์ฒญ์„ ๊ณ„์† ์ง„ํ–‰ํ•ด๋„ ๋จ.101 Switching Protocols: ํ”„๋กœํ† ์ฝœ ๋ณ€๊ฒฝ ์š”์ฒญ ์Šน์ธ.102 Processing: ์š”์ฒญ์ด ์ฒ˜๋ฆฌ ์ค‘ (WebDAV).103 Early Hints: ๋ณธ๋ฌธ ์ „์†ก ์ „์— ๋ฏธ๋ฆฌ ํ—ค๋” ์ œ๊ณต. 2xx (์„ฑ๊ณต ์‘๋‹ต)200 OK: ์ •์ƒ ์‘๋‹ต.201 Created: ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์™„๋ฃŒ.202 Accepted: ์š”์ฒญ์ด ์ ‘์ˆ˜๋˜์—ˆ์œผ๋‚˜ ์ฒ˜๋ฆฌ ๋ฏธ์™„๋ฃŒ or ์‹œ์ž‘๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Œ203 Non-Authoritative Information: ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ถœ์ฒ˜์—์„œ ์ •๋ณด ์ œ๊ณต.204 No Content: ๋ณธ๋ฌธ ์—†์ด ์„ฑ๊ณต ์‘๋‹ต.205 Reset Content: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ทฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ.206 Partial Conte..

MSA(Microservices Architecture) ๊ฐœ๋…

๋ชฉ์ฐจ    ์ด๋ฒˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ MSA ๋ฐฉ์‹์„ ๋„์ž…ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ MSA ์— ๋Œ€ํ•œ ๊ณต๋ถ€๋„ ํ•˜๊ณ  ์–ด๋ ต๊ฒŒ ํ”„๋กœ์ ํŠธ ์„ธํŒ…๊นŒ์ง€ ํ–ˆ์ง€๋งŒ.. ์ง„ํ–‰ํ•˜๋ ค๋˜ ํ”„๋กœ์ ํŠธ๊ฐ€ MSA ๋ฅผ ์‚ฌ์šฉํ•  ๋งŒํ•œ ํ”„๋กœ์ ํŠธ๋„ ์•„๋‹ ๋ฟ๋”๋Ÿฌ, ๋น„ํšจ์œจ์ ์ธ ๋ถ€๋ถ„์ด ๋งŽ์•„์„œ (์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ผœ์•ผํ•จ) ๊ฒฐ๊ตญ MSA ๋ฐฉ์‹์€ ํฌ๊ธฐํ•˜๊ฒŒ๋˜์—ˆ๋‹ค. ใ…œใ…œ ๊ทธ๋ž˜์„œ ์ด๋ก ์ด๋ผ๋„ ๋„์ ๋„์  ํ•ด ๋ณผ ์˜ˆ์ •..  ๋Œ€ํ‘œ ๊ฐœ๋… API Gateway : Spring Cloud Gateway ์™€ Webflux ๋กœ ๊ตฌํ˜„Service Discovery : Netflix Eureka ์‚ฌ์šฉ์œผ๋กœ ๊ตฌํ˜„Config Server : Spring Cloud Config ์‚ฌ์šฉ์œผ๋กœ ๊ตฌํ˜„  MSA๋ž€?MSA(Microservices Architecture, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜)๋Š”์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ..

๐ŸŸค JAVA Public

more

Persistence Framework - SQL Mapper, ORM ๊ฐœ๋…

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ”์ด๋ผ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๋ฐ˜๋ฉด์— JAVA ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ์—๋Š” ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๋งคํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Persistence Framework (ํผ์‹œ์Šคํ„ด์Šค ํ”„๋ ˆ์ž„์›Œํฌ)  : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋ฐ ๋งคํ•‘์„ ๋•๋Š” ํ”„๋ ˆ์ž„์›Œํฌ (์˜์†์„ฑ ๊ณ„์ธต) ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ MyBatis ์™€ JPA ๊ฐ€ ์žˆ๋Š”๋ฐ MyBatis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ, SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ DTO ๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋งคํ•‘ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฐ์ฒด ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค. JPA ๋ฅผ ํ™œ์šฉํ•˜๋ฉด HIbenate ์™€ ๊ฐ™์€ ORM ๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์ž๋ฐ” ๊ฐ์ฒด (์—”ํ‹ฐํ‹ฐ) ๊ฐ„์˜ ์ž๋™ ํŒจํŒ…์ด ๋˜์–ด,..

๐ŸŸค ORM & DB 2025.04.03 0

[JSP] ํ”„๋กœ์ ํŠธ ์„ธํŒ… (Eclipse, ์„œ๋ฒ„, ์‹คํ–‰๊นŒ์ง€)

๋ชฉ์ฐจ   JSP ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ intelliJ ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ๋ฌด๋ฃŒ๋ฒ„์ „์€ jsp ๋ฅผ ์ง€์›ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค.ultimate ๋งŒ ๊ฐ€๋Šฅํ•œ๊ฑธ ๊นจ๋‹ซ๊ณ .. Eclipse ๋กœ ๋‹ค์‹œ ๋Œ์•„์™”๋‹ค.๋ณต์Šต ๊ฒธ ๋‹ค์‹œ Eclipse ์„ธํŒ…๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋ณด์ž.   ์•„๋ž˜๋Š” IntelliJ ์—์„œ JSP ํ”„๋กœ์ ํŠธ ์„ธํŒ…ํ•˜๋‹ค๊ฐ€ ๋ง‰ํ˜”๋˜ ๋ถ€๋ถ„๋“ค ์ฐธ๊ณ ํ–ˆ๋˜ ๋งํฌ๋‹ค. JSP ํ”„๋กœ์ ํŠธ ์„ธํŒ…https://velog.io/@lukehongg/intellij-jsp-project add framework ~ ์•ˆ๋œฐ๋•Œhttps://goldfish2679.tistory.com/59 add Framework ์— javaEE ์ถ”๊ฐ€ํ•˜๊ธฐhttps://kkminseok.github.io/posts/Intellij_spring/    eclipse ๋‹ค์šด๋กœ๋“œ  ..

๐ŸŸค JSP 2025.01.07 0

[Spring] AOP (Aspect-Oriented Programming)

AOP ๋ž€AOP ๋ž€ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.๊ด€์‹ฌ์‚ฌ (Aspect) ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹(์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์— ํšจ๊ณผ์ )  Spring ์—์„œ๋Š” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์ด ์•„๋‹Œ ์ด์™ธ์˜ `๋ณด์•ˆ, ๋กœ๊ทธ, ํŠธ๋ž™์žญ์…˜ ๋“ฑ`์„ `ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ (cross-concern)` ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹คSpring ์€ ์ด ํšก๋‹จ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์—…๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค.  โœ… ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐ โœ… ์ปดํŒŒ์ผ or ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๊ฒฐํ•ฉ โœ… ๊ธฐ์กด ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด, ์›ํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๊ฒฐํ•ฉ  AOP ํ‚ค์›Œ๋“œAspect (๊ด€์ ) ๊ณตํ†ต ๊ธฐ๋Šฅ(๋กœ๊น…, ๋ณด์•ˆ ๋“ฑ)์„ ๋ชจ๋“ˆํ™”ํ•œ ๊ฐ์ฒด JoinPoint (์กฐ์ธํฌ์ธํŠธ) AOP๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ์ง€์  (๋ฉ”์„œ๋“œ ์‹ค..

๐ŸŸค Spring 2024.12.16 0

[JAVA] ์ปดํŒŒ์ผ / ๋Ÿฐํƒ€์ž„ / JVM ๊ตฌ์กฐ

์ปดํŒŒ์ผ (Compile)์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ • (์ปดํŒŒ์ผ๋Ÿฌ javac๊ฐ€ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜)`.java` -> `.class`  ๋Ÿฐํƒ€์ž„ (Runtime)ํ”„๋กœ๊ทธ๋žจ์ด ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š” ์‹œ๊ฐ„ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ JVM ์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ์‹œ์   ์ปดํŒŒ์ผ๊ณผ ๋Ÿฐํƒ€์ž„์˜ ์ฐจ์ด์ ์‹œ์ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „์—, ์ฝ”๋“œ ์ž‘์„ฑ ํ›„ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฐœ์ƒํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒ๋ชฉ์ ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ณ , ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ๋™์  ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฌธ๋ฒ• ์˜ค๋ฅ˜, ํƒ€์ž… ์˜ค๋ฅ˜, ์ฒดํฌ ์˜ˆ์™ธ ๋ฏธ์ฒ˜๋ฆฌ ๋“ฑ (์ปดํŒŒ์ผ ์‹œ ๋ฐœ์ƒ)๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ(๋ฐฐ์—ด ์ธ๋ฑ์Šค ์ดˆ๊ณผ, null ์ฐธ์กฐ ๋“ฑ) (์‹คํ–‰ ์‹œ ๋ฐœ์ƒ)์˜ˆ์‹œ ์˜ค๋ฅ˜๊ตฌ๋ฌธ ์˜ค๋ฅ˜, ํƒ€์ž… ์˜ค๋ฅ˜, ์ฒดํฌ ์˜ˆ์™ธ ๋ฏธ์ฒ˜๋ฆฌNullPointerException, ArrayIndexOutO..

[JAVA] Exception ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๋ชฉ์ฐจ    ์˜ˆ์™ธ ๋ž€?ํ”„๋กœ๊ทธ๋žจ์˜ ์ •์ƒ์ ์ธ ํ๋ฆ„์„ ๋ฐฉํ•ดํ•˜๋Š” ๋ฌธ์ œ ์ƒํ™ฉ (ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์—์„œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ , ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜) ์—๋Ÿฌ๋Š” ๊ทธ๋ณด๋‹ค ๋” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ (ํ”„๋กœ๊ทธ๋žจ ์ค‘๋‹จ ๋“ฑ์˜ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ , JVM / ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ)  ์˜ˆ์™ธ ์ข…๋ฅ˜์ฒดํฌ ์˜ˆ์™ธ : ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ์˜ˆ์™ธ ๊ฐ•์ œ ์ฒ˜๋ฆฌ์–ธ์ฒดํฌ ์˜ˆ์™ธ : ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—์„œ ๋ฐœ์ƒ (์ปดํŒŒ์ผ ์‹œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ฐ•์ œ ๋˜์ง€ ์•Š์Œ)    ์˜ˆ์™ธ ๊ณ„์ธต ๊ตฌ์กฐ  `Throwable` ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ์˜ˆ์™ธ์™€ ์˜ค๋ฅ˜์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค  `getMessage()`: ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.`printStackTrace()`: ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.`getCause()`: ์˜ˆ์™ธ์˜ ์›์ธ(๋‹ค๋ฅธ ์˜ˆ์™ธ)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.   ๊ธฐ๋ณธ ์˜ˆ์™ธ์ฒ˜๋ฆฌ  (try-catch) `try`  ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ`cat..

โšช DevOps Public

more

[Docker] Compose

๋ชฉ์ฐจ    ๐Ÿ”Compose  ๋ž€? ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์ •์˜ํ•˜๊ณ ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํˆด ์—ฌ๋Ÿฌ๊ฐœ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ์— ๋„์›€์คŒ๋ณต์žกํ•œ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์‹œํ‚ค๋˜ ๊ฑธ ๊ฐ„์†Œํ™” ์‹œํ‚จ๋‹ค. Compose ์ƒ์„ฑ    โœ…ํŒŒ์ผ๋ช…์€ `compose.yml` ์œผ๋กœ ์ƒ์„ฑ    โœ…  ` docker run --name webserver -d -p 80:80 nginx `ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์•„๋ž˜ yml ํŒŒ์ผ๋กœ ์ž‘์„ฑ ํ•œ ๊ฒƒ yml ์€ ๋“ค์—ฌ์“ฐ๊ธฐ๋กœ ๊ณ„์ธต์„ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜  Compose ์‹คํ–‰  โœ…` docker compose up ` ์„ ํ•˜๋ฉด nginx ๊ฐ€ ์‹คํ–‰๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๊ฐ„ํŽธํ•˜๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅ!ํฌ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰์ด๊ธฐ ๋•Œ๋ฌธ์— (์ž‘์—…๋ถˆ๊ฐ€ ctrl + c ํƒˆ์ถœ)   โœ… ` docker compose up ` ..

๐Ÿ”ต Docker 2025.04.05 0

[Docker] Docker ์—์„œ Spring Boot + MySQL ํ”„๋กœ์ ํŠธ ์‹คํ–‰ (+ Compose ์‚ฌ์šฉ)

๋ชฉ์ฐจ    Spring Boot ํ”„๋กœ์ ํŠธ Docker์—์„œ ์‹คํ–‰์‹œํ‚ค๊ธฐ  โœ… SpringBoot ํ”„๋กœ์ ํŠธ๋ฅผ ์ค€๋น„ํ•ด์ค€๋‹ค.      โœ… ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ Docker ๋กœ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š”  ํ”„๋กœ์ ํŠธ๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ• > Dockerfile ์ƒ์„ฑํ•˜๊ธฐ์ƒ์„ฑํ•˜๊ธฐ์ „์— ๊ผญ! `./gradlew clean build ` ๋ช…๋ น์–ด๋กœ ๋นŒ๋“œ       โœ… Dockerfile ์ƒ์„ฑ `FROM openjdk:17-jdk` ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋Š” ์Šคํ”„๋งํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ jdk ์œผ๋กœ ์„ธํŒ… COPY ๋นŒ๋“œํ•œ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณต์‚ฌ ํ›„ ์ปจํ…Œ์ด๋„ˆ์—์„œ jar ์‹คํ–‰  app.jar ์€ ์ƒ๋Œ€๊ฒฝ๋กœ์ธ ์ƒํƒœ /app.jar ์€ ์ ˆ๋Œ€๊ฒฝ๋กœ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ์—๋Š” jar ํŒŒ์ผ์„ jdk ๋กœ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ๋ช…๋ น์–ด ์ž…๋ ฅ  ์šฐ๋ฆฌ๋Š” ์ฆ‰, build ํŒŒ์ผ์„  ..

๐Ÿ”ต Docker 2025.04.05 0

[Docker] Dockerfile (๋„์ปคํŒŒ์ผ)

๋ชฉ์ฐจ     ๐Ÿ”Ž Dockerfile ์ด๋ž€DockerHub ์— ์˜ฌ๋ ค์ ธ ์žˆ๋Š” ์ด๋ฏธ์ง€๋“ค๋„ Dockerfile ์„ ํ™œ์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ž„์ฆ‰, ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ฒŒ ํ•ด์ฃผ๋Š” ํŒŒ์ผ์ž„   FROM :: ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ƒ์„ฑ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•จ  (ํŠน์ • ์ดˆ๊ธฐ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”๊ฐ€์ ์ธ ์„ธํŒ…์„ ํ•  ์ˆ˜ ์žˆ์Œ)๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”๊ฐ€ ์„ธํŒ…์„ ํ•˜๋Š” ๊ฒƒ.ํ•„์š”์— ๋”ฐ๋ผ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ๊ณจ๋ผ์ฃผ๋ฉด ๋จ  โœ…  FROM ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ƒ์„ฑ `Dockerfile` ๋กœ ํŒŒ์ผ ์ƒ์„ฑ  `FROM [์ด๋ฏธ์ง€๋ช…]``FROM [์ด๋ฏธ์ง€๋ช…] : [ํƒœ๊ทธ๋ช…]`ํƒœ๊ทธ๋ช… ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์‹ ๋ฒ„์ „ ์‚ฌ์šฉ  `FROM openjdk:17-jdk` ๋ฒ ์ด์Šค๋กœ ์ƒ์„ฑํ•      โœ… ์ด๋ฏธ์ง€ ์ƒ์„ฑ  `-t [์ด๋ฏธ์ง€๋ช…] [๋„์ปคํŒŒ์ผ์œ„์น˜๊ฒฝ๋กœ] `์ด๋ฏธ์ง€ ๋ช…์„ ์–ด๋–ป๊ฒŒ ํ• ๊ฑด์ง€ ์ƒ..

๐Ÿ”ต Docker 2025.04.05 0

๐Ÿ”ด WEB Public

more

[GraphQL] ๊ธฐ์ดˆ ๊ฐœ๋…, ๋ฌธ๋ฒ•

GraphQL ์ด๋ž€?GraphQL ์€ Facebook ์—์„œ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ์†Œ์Šค ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ์ž„API๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ  GraphQL ์™œ ์‚ฌ์šฉํ• ๊นŒ?๊ธฐ์กด REST API ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•จ   GraphQL ์š”์ฒญ๋ฐฉ์‹REST API : ํŠน์ • ์—”๋“œํฌ์ธํŠธ(URL)์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.GraphQL : ๋‹จ์ผ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ๋กœ ์š”์ฒญ (ํ•œ๋ฒˆ์— ์š”์ฒญ ๊ฐ€๋Šฅ)  GraphQL ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ ๋ฐฉ์‹REST API : ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๊ณผ๋‹ค์š”์ฒญ(Over-fetching) , ์—ฌ๋Ÿฌ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์„ ์ˆ˜ ์žˆ๋Š” ๋ถ€์กฑํ•œ ์š”์ฒญ(Under-fetching)GraphQL : ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๊ฐ€๋Šฅ, ํ•œ๋ฒˆ์˜ ์š”์ฒญ์œผ๋กœ ์›ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํฌํ•จ ๊ฐ€๋Šฅ  GraphQL ์—”๋“œํฌ์ธํŠธ..

๐Ÿ”ด GraphQL 2025.04.03 0

[React] Ajax (์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ํ†ต์‹ )

Ajax ?AJAX ( Asynchronous Javascript and XML) ์€ ์›น ํŽ˜์ด์ง€์˜ ์ด๋™์—†์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „์†กํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์„œ๋ฒ„์ชฝ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ajax๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.์ด ์ž‘์—…์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.๋น„๋™๊ธฐ(asynchronous)๋Š” ์š”์ฒญ์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.๋‚˜์ค‘์— react์—์„œ๋Š” ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ REST API์™€ ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  ES6 fetch ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (๋ฆฌ์•กํŠธ)Promise = fetch(์š”์ฒญ์ฃผ์†Œ) ๐Ÿ“ ์ด๋ฒคํŠธ ํด๋ฆญ์‹œ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ useState()์— ์ €์žฅํ•˜๋Š” ์ž‘..

๐Ÿ”ต React 2024.08.31 0

[React] ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

โ—ˆ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐpackage.json >> build.gradle / pom.xml ๊ณผ ๋™์ผ (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ , ๋ฒ„์ „ ๋ช…์‹œ)๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ทธ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ญ๋ชฉ dependency  : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ทธ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ญ๋ชฉ  scripts ๋ช…๋ น๋ฌธ : ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ •์˜ํ•˜์—ฌ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•ญ๋ชฉeslintConfig : ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ ๋„์›€ (์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด JavaScript ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋„๊ตฌ์ธ ESLint์˜ ๊ธฐ๋ณธ ์„ค์ •์„ ์ •์˜ํ•˜๋Š” ํ•ญ๋ชฉ)browserlist : ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฒ”์œ„๋ฅผ ๋ช…์‹œ ( ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜ )โ—ˆ  web pack loader์ž๋™ ๋ฆฌ๋กœ๋“œ๋จ (..

๐Ÿ”ต React 2024.08.29 0

[JS ES6] JS ES6 ๋ฌธ๋ฒ• Promise, async, await

ํ”„๋กœ๋ฏธ์Šค๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝ์— ๋‚ด์žฅ๋œ ๋‚ด์žฅ๊ฐ์ฒด ์ž…๋‹ˆ๋‹คํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด์—์„œ๋Š” 2๊ฐ€์ง€๋ฅผ ํ˜•ํƒœ๋ฅผ ์ง€๋‹™๋‹ˆ๋‹ค. 1. ์ƒํƒœ(state) pending : ์ˆ˜ํ–‰์ค‘fullfilled : ์„ฑ๊ณต์  ์™„๋ฃŒrejected : ์‹คํŒจ2. ํ”„๋กœ๋“€์„œ - ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ œ๊ณต์ž(์ฆ‰, Promise)    ์ปจ์Šˆ๋จธ - ์‚ฌ์šฉ์ž(์ฆ‰, ํ˜ธ์ถœํ•˜๋Š”์‚ฌ๋žŒ) ํ”„๋กœ๋ฏธ์Šค ์ƒ์„ฑexecutor์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋ฉฐ executor์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ๋‹ค์‹œ resolveํ•จ์ˆ˜์™€ rejectํ•จ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.//๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ปจ์Šˆ๋จธ๊ฐ€ ๋ถ„๋ช… ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ• ๊ฑฐ์•ผ!(๊ทธ ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ๋ฆฌํ„ดํ•ด์ค„๊ฒŒ!)let promise = new Promise( (success, fail) => { //producer ์ž…์žฅ์—์„œ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ์„ฑ๊ณต์„ ์•Œ๋ฆฌ๋Š” ํ•จ์ˆ˜ success("success"); //..

๐ŸŸก JavaScript 2024.08.29 0

[React] React๋ผ์šฐํ„ฐ

๐Ÿ˜บ React ๋ผ์šฐํ„ฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— SPA ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๐Ÿ“ SPA๋ž€? (single page application)ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜๋ฏธํ•œ๋‹ค.์ „ํ†ต์ ์ธ ๋ฐฉ์‹์€ Server๊ฐ€ html ํŒŒ์ผ ๋งŒ๋“ค๊ณ  data ์‹ค์–ด์„œ ์‘๋‹ตํ•˜์ง€๋งŒ,spa ๋ฐฉ์‹์€ ํด๋ผ์ด์–ธํŠธ์— html ์„ธ์›Œ๋‘๊ณ  ๋ฐ์ดํ„ฐ๋งŒ ์š”์ฒญ์‘๋‹ต์„ ํ†ตํ•ด ๋ฐ”๊พผ๋‹ค.  SPA๋Š” htmlํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ € ์ธก์—์„œ ๋กœ๋“œํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” API์™€ ajaxํ†ต์‹ ์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋ฉด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธ ํ•ด์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.๋ฉ€ํ‹ฐํ”Œ๋žซํผ Android, IOS์— ๋Œ€์‘ํ•˜์—ฌ ์›น๋ทฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ“ SPA์˜ ๋‹จ์  (CSR๋ฐฉ์‹)์•ฑ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด, JSํŒŒ์ผ๋„ ๋„ˆ๋ฌด ์ปค์ ธ์„œ ๋กœ๋”ฉ์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ..

๐Ÿ”ต React 2024.08.28 0

Project Public

more

[Project] WebSocket ์›น ์†Œ์ผ“ ๊ตฌํ˜„ (์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ •๋ณด)

๋ชฉ์ฐจ   WebSocket ์„ ์จ๋ณด์ž ํ”„๋กœ์ ํŠธ์—์„œ ์‹ค์‹œ๊ฐ„ ์œ„์น˜์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. โœ… ์›น์†Œ์ผ“์— ์ ‘์†ํ•˜๋ฉด ์ ‘์†ํ•œ ์œ ์ € ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.โœ… ์‚ฌ์šฉ์ž ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์†Œ์ผ“์œผ๋กœ ์œ„์น˜์ •๋ณด๋ฅผ ๋ณด๋‚ด๋ฉด, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์œ„์น˜์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.โœ… ์ด๋•Œ, ์†Œ์ผ“์œผ๋กœ userId ๋ฅผ ๋ณด๋‚ด๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๋ฐ›์•„์˜จ ์œ„์น˜(์œ„๋„,๊ฒฝ๋„)๋„ ํ•จ๊ป˜ ํฌํ•จํ•ด์„œ ๋‹ค๋ฅธ ์†Œ์ผ“ ์œ ์ €๋“ค์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.   ์‹ค์‹œ๊ฐ„ ์œ„์น˜์ •๋ณด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณ„์†ํ•ด์„œ ์œ„์น˜๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•œ๋ฐ...์ด๊ฑธ HTTP ๋กœ ๊ตฌํ˜„ ํ•˜๊ธฐ์—๋Š” ๋งค์šฐ ํž˜๋“ค๋‹ค. HTTP ์˜ ํŠน์ง• ๋•Œ๋ฌธ์ธ๋ฐ, ๋‹จ๋ฐฉํ–ฅํ†ต์‹ ์ธ ์  (์š”์ฒญ์„ ํ•ด์•ผ๋งŒ ์‘๋‹ต์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ)์š”์ฒญ์„ ํ• ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ์—ฐ๊ฒฐํ•ด์•ผํ•˜๋Š” ๋“ฑ ๋งŽ์€ ๋‹จ์ ์ด ์žˆ๋‹ค. ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜..

[Project] React Calendar ํ™œ์šฉํ•˜๊ธฐ (Date, Time, disabled)

๋ชฉ์ฐจ        ์œ„์™€ ๊ฐ™์ด ๋ฆฌ์•กํŠธ ์บ˜๋ฆฐ๋”๋ฅผ ์ด์šฉํ•ด์„œ ๋‚ ์งœ๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์‹œ๊ฐ„์„ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.ํŠน์ • ๋‚ ์งœ๋Š” ๋น„ํ™œ์„ฑํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ๋‹ค.(์šฐ๋ฆฌ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์•ฝ์ด ๊ฝ‰์ฐจ๊ฑฐ๋‚˜, ํœด๋ฌด์ผ์ด๊ฑฐ๋‚˜ , ์ง€๊ธˆ์œผ๋กœ๋ถ€ํ„ฐ 3๊ฐœ์›” ๋‚ด ์ด์™ธ์˜ ๊ฐ’์€ disabled ๋œ๋‹ค.)    1) ๋ฆฌ์•กํŠธ ์บ˜๋ฆฐ๋” ์„ค์น˜ (install) npm install react-calendar   2) ๋ฆฌ์•กํŠธ ์บ˜๋ฆฐ๋” ์‚ฌ์šฉ (import) import Calendar from 'react-calendar'; import "./Calendar.css";  `react-calendar` ์™€ `css` import ์‹œ์ผœ์ฃผ๊ธฐ     3) ๋‚ ์งœ ๊ฐ€์ ธ์˜ค๊ธฐ (Date seleted)  moment(date).format('D')} f..

[Project] ๋‚ ์งœ ๋ณ„ ์˜ˆ์•ฝ ๊ฑด์ˆ˜(Slot) ๊ด€๋ฆฌ (React Calendar)

๋ชฉ์ฐจ  1) ํŽ˜์ด์ง€ ๊ตฌ์ƒ  1. ์ƒํ’ˆ๋ณ„ ->  ๋‚ ์งœ๋ณ„ ->  ์‹œ๊ฐ„๋ณ„ ->  ์˜ˆ์•ฝ ๊ฑด์ˆ˜(Slot)๋ฅผ ์ œํ•œํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. (๋งˆ์น˜ ๋„ค์ด๋ฒ„ ์˜ˆ์•ฝ์ฒ˜๋Ÿผ!)(๋ณดํ†ต ์ฃผ๋ฌธ์ œ์ž‘ ์ผ€์ดํฌ, ๊ฝƒ์ง‘์€ ๋ฐฉ๋ฌธ ๋‚ ์งœ์™€ ์‹œ๊ฐ„๋„ ๋ฏธ๋ฆฌ ์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ ์‹ถ์—ˆ๋‹ค.)๋‹ค๋ฅธ ์˜ˆ์•ฝ ํ”Œ๋žซํผ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ์„ธ๋ถ€์ ์ธ ๋กœ์ง์€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ,์ด ๊ฒฝ์šฐ ๋‚ ์งœ, ์‹œ๊ฐ„ ์ „๋ถ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋‚ ์งœ + ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ณ„ ์Šฌ๋กฏ๋“ค์„ ์ „๋ถ€ ๊ด€๋ฆฌํ•ด์•ผํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๊ฒŒ ํœด๋ฌด์ผ์ด ๋ฐ”๋€Œ๋‹ค๋˜๊ฐ€ (์ง€์ •ํœด๋ฌด์™€ ๊ณ ์ •ํœด๋ฌด ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ—€๋‹ค.)๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค๋„ ์Šฌ๋กฏ์— ์˜ํ–ฅ์„ ์คฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์ˆ˜์ •์ด๋‚˜ ์ด๋ž˜์ €๋ž˜ ๋„ˆ๋ฌด ๊ทœ๋ชจ๊ฐ€ ์ปค์ ธ์„œ ๊ฒฐ๊ตญ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค.2. (ํ™•์ •) ๋‚ ์งœ๋ณ„๋กœ ๋ฐ›์„ ์˜ˆ์•ฝ ๊ฑด์ˆ˜๋ฅผ ์ง€์ •ํ•˜์ž. โญ๋Œ€์‹  ์‹œ๊ฐ„๋Œ€๋Š” ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค.. โ†’..

[Project] ์ฃผ๋ฌธ ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๊ตฌํ˜„ [2] (์ฃผ๋ฌธ ๋“ฑ๋ก ๋ถ€๋ถ„)

๋ชฉ์ฐจ    ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ฃผ๋ฌธ์ œ์ž‘ ์†Œ์ƒ๊ณต์ธ๋“ค์„ ์œ„ํ•œ ์ฃผ๋ฌธ ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊นƒํ—ˆ๋ธŒ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” :)https://github.com/hyejux/Neez\ GitHub - hyejux/Neez: ์˜ˆ์•ฝ ์ด์   ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ, ๊ด€๋ฆฌ๋„ ์†์‰ฝ๊ฒŒ NEEZ ์—์„œ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”! ใ€Œ์ฃผ๋ฌธ ์ œ์ž‘ ์˜ˆ์˜ˆ์•ฝ ์ด์   ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ, ๊ด€๋ฆฌ๋„ ์†์‰ฝ๊ฒŒ NEEZ ์—์„œ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”! ใ€Œ์ฃผ๋ฌธ ์ œ์ž‘ ์˜ˆ์•ฝ ์„œ๋น„์Šค "NEEZ "ใ€ - hyejux/Neezgithub.com   [1ํƒ„]https://hyejux.tistory.com/828 [ํ”„๋กœ์ ํŠธ/Spring Boot/Reactjs] ์ฃผ๋ฌธ ์‹œ์Šคํ…œ ๊ตฌํ˜„ (์นดํ…Œ๊ณ ๋ฆฌ ๋ถ€๋ถ„)๋ชฉ์ฐจ     ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ฃผ๋ฌธ์ œ์ž‘ ์†Œ์ƒ๊ณต์ธ๋“ค์„ ์œ„ํ•œ ์ฃผ๋ฌธ ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ..

[Proejct] ์ฃผ๋ฌธ ์˜ˆ์•ฝ ์‹œ์Šคํ…œ ๊ตฌํ˜„ [1] (์นดํ…Œ๊ณ ๋ฆฌ ๋ถ€๋ถ„)

๋ชฉ์ฐจ     ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ฃผ๋ฌธ์ œ์ž‘ ์†Œ์ƒ๊ณต์ธ๋“ค์„ ์œ„ํ•œ ์ฃผ๋ฌธ ํ”Œ๋žซํผ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊นƒํ—ˆ๋ธŒ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” :)https://github.com/hyejux/Neez GitHub - hyejux/Neez: ์˜ˆ์•ฝ ์ด์   ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ, ๊ด€๋ฆฌ๋„ ์†์‰ฝ๊ฒŒ NEEZ ์—์„œ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”! ใ€Œ์ฃผ๋ฌธ ์ œ์ž‘ ์˜ˆ์˜ˆ์•ฝ ์ด์   ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ, ๊ด€๋ฆฌ๋„ ์†์‰ฝ๊ฒŒ NEEZ ์—์„œ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”! ใ€Œ์ฃผ๋ฌธ ์ œ์ž‘ ์˜ˆ์•ฝ ์„œ๋น„์Šค "NEEZ "ใ€ - hyejux/Neezgithub.com     ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.     1) ํŽ˜์ด์ง€ ๋””์ž์ธ ๊ตฌ์ƒ  [๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๋””์ž์ธ]       [์œ ์ € ํŽ˜์ด์ง€ ๋””์ž์ธ]      ์ผ๋‹จ ์ฃผ๋ฌธ์˜ˆ์•ฝ ํผ ํŽ˜์ด์ง€ ์ดˆ๊ธฐ ๋””์ž์ธ์€ ์ด๋Ÿฌํ–ˆ๋‹ค.  ๋Œ€์ถฉ ์œ ์ €ํŽ˜์ด์ง€๋Š” ๋ฐฐ๋‹ฌ์˜ ๋ฏผ..