MapleStory Finger Point

์ตœ์‹  ๊ธ€ Public

more

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Lv.1 2016๋…„

๋ฌธ์ œ : Lv.1 2016๋…„ https://school.programmers.co.kr/learn/courses/30/lessons/12901์–ธ์–ด : JAVA์ฒด๊ฐ Level : โ˜… โ˜† โ˜†Review: ๋‹ฌ๋ ฅ ๊ตด๋Ÿฌ๊ฐ€๋Š” ๋กœ์ง ์ดํ•ด ๐Ÿ’ก์ผ๋‹จ ๋ฌธ์ œ์—์„œ ์œค๋…„์ด๋ผ๊ณ  ์ฃผ์–ด์กŒ์œผ๋ฏ€๋กœ 2์›”์€ 29์ผ์ด ๋œ๋‹ค. (์œค๋…„์•„๋‹ˆ๋ฉด 28์ผ)๋‚˜๋จธ์ง€๋Š” 1~7์€ ์ง์ˆ˜์›”์ด 30์ผ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ 8~12๋ถ€ํ„ฐ๋Š” ํ™€์ˆ˜์›”์ด 30์ผ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.์ด์ ์„ ์ƒ๊ฐํ•˜๊ณ  ์ฃผ์–ด์ง„ ์›”์— ๋งž๊ฒŒ ์ผ ์ˆ˜๋ฅผ ๋ˆ„์ ํ•ด๊ฐ„๋‹ค. ํ•ด๋‹น ์›”์— ๋‹ค๋‹ค๋ฅด๋ฉด ๋ˆ„์ ์„ ๋ฉˆ์ถ”๊ณ `sum + b` ๋ฅผ ํ•ด์ค€๋‹ค. ๋ˆ„์ ๋œ ๊ฐ’์€ 7๋กœ ๋‚˜๋ˆ„๋ฉด ์š”์ผ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. (0~6)์ด๋•Œ ๋‚˜๋Š” ๋ฐฐ์—ด๋กœ ์‰ฝ๊ฒŒ ๋ฐ˜ํ™˜์‹œํ‚ค๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.1์›” 1์ผ์ด `FRI` ์˜€์œผ๋ฏ€๋กœ `FRI` ๋ถ€ํ„ฐ ์ง„ํ–‰ ๐Ÿ“ ์ด๋•Œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋Š”๋ฐ 0 ์ผ๋•Œ ์ฒ˜..

Java 2025.05.07 0

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Lv.1 ์„ฑ๊ฒฉ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๊ธฐ

๋ฌธ์ œ : Lv.1 ์„ฑ๊ฒฉ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๊ธฐ https://school.programmers.co.kr/learn/courses/30/lessons/118666์–ธ์–ด : JAVA ์ฒด๊ฐ Level : โ˜… โ˜† โ˜†Review: map ์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ๐Ÿ’ก map ์—๋Š” ๊ณ ์ •๋˜์–ด์žˆ๋Š” ์„ฑ๊ฒฉ์œ ํ˜• 8๊ฐ€์ง€๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ map2 ์—์„œ๋Š” ์„ ํƒ์ง€๋ณ„ ์นด์šดํŒ… ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค์ด๋•Œ map ์€ ์ˆœ์„œ๋Œ€๋กœ ๋„ฃ์–ด๋„ ์ˆœ์„œ ๋ณด์žฅ์ด ์•ˆ๋œ๋‹คTreeMap ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •๋ ฌ์€ ๋˜์ง€๋งŒ ์„ฑ๊ฒฉ ์œ ํ˜•์˜ ๋Œ€์นญ์— ๋งž๊ฒŒ ๋น„๊ตํ•ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ๊ตณ์ด ?๊ทธ๋ž˜์„œ list ์— ๋Œ€์นญ๋˜๋Š” ์„ฑ๊ฒฉ์œ ํ˜•์„ ๋„ฃ์–ด์„œ ๋น„๊ตํ•ด์คฌ๋‹ค.import java.util.*;class Solution { public String solution(String[] surve..

Java 2025.05.05 0

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Lv.1 ์‹ ๊ทœ์•„์ด๋”” ์ถ”์ฒœ

๋ฌธ์ œ : Lv.1 ์‹ ๊ทœ์•„์ด๋”” ์ถ”์ฒœ https://school.programmers.co.kr/learn/courses/30/lessons/72410#์–ธ์–ด : JAVA์ฒด๊ฐ Level : โ˜… โ˜… โ˜†Review: ์ •๊ทœ์‹ ํ™œ์šฉ! ๐Ÿ’ก chatAt ์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ• ๊ฑฐ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€.. ๊ทœ๋ชจ๊ฐ€ ๋ง๋„ ์•ˆ๋ ๊ฒƒ ๊ฐ™์•„์„œreplaceAll ์‚ฌ์šฉํ–ˆ๋‹ค. ์ •๊ทœํ‘œํ˜„์‹์€ ํ˜๋ช…์ด์ง€๋งŒ.. ํ•œ๋‘๊ธ€์ž ํ‹€๋ฆฌ๋ฉด ์กฐ๊ฑด์ด ๋‹ฌ๋ผ์ง€๋‹ˆ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ๐Ÿ˜“[^a-z0-9._-]a~z, 0~9, ., _, -๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž ์ œ๊ฑฐ([^...]: not ๋ฌธ์ž ํด๋ž˜์Šค)"A@b#c" โ†’ "bc"\\.{2,}๋งˆ์นจํ‘œ(.)๊ฐ€ 2๊ฐœ ์ด์ƒ ์—ฐ์†๋œ ๋ถ€๋ถ„์„ ํ•˜๋‚˜์˜ ๋งˆ์นจํ‘œ๋กœ ์น˜ํ™˜(\\.: ๋งˆ์นจํ‘œ, {2,}: 2ํšŒ ์ด์ƒ ๋ฐ˜๋ณต)"a..b...c" โ†’ "a.b.c..

Java 2025.05.03 0

๋ฆฌ๋ฒ„์Šค์ง€์˜ค (์—ญ์ง€์˜ค) โ†” ๋„์„œ๊ด€ ์ •๋ณด๋‚˜๋ฃจ dtl_region ๋งคํ•‘ ์˜ค๋ฅ˜ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

โ›” ๋ฌธ์ œ ์ƒํ™ฉ ๊ฐœ๋ฐœ์ง€์›์„ผํ„ฐ์—์„œ ๊ฐ€์ ธ์˜จ ๋ฆฌ๋ฒ„์Šค์ง€์˜ค์ฝ”๋”ฉ(์œ„๋„, ๊ฒฝ๋„ โ†’ ์ฃผ์†Œ) ๋ฅผ ํ†ตํ•ด ํ–‰์ •๊ตฌ์—ญ ์ฝ”๋“œ `adm_dr_cd` ๋ฅผ ๊ฐ€์ ธ์™€์„œ๋„์„œ๊ด€ ์ •๋ณด๋‚˜๋ฃจ์˜ ๋„์„œ๊ด€ ๊ฒ€์ƒ‰ api ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ `dtl_region` ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋„ฃ์œผ๋ ค ํ–ˆ์ง€๋งŒ,์š”์ฒญ์€ ์„ฑ๊ณตํ•˜์ง€๋งŒ .. ๊ณ„์†ํ•ด์„œ ๋„์„œ๊ด€ ๊ฐ’์„ ๋“ค๊ณ ์˜ค์ง€ ๋ชปํ•จ ๐Ÿ” ์›์ธ ๋ถ„์„ ์—ญ์ง€์˜ค ์‘๋‹ต์˜ adm_dr_cd๋Š” ์‹œ/๋„ + ์‹œ/๊ตฐ/๊ตฌ + ์/๋ฉด/๋™์ด ํ•ฉ์ณ์ง„ ์ „์ฒด ์ฝ”๋“œ (ex: 31180611) ๋ฅผ ๋„ฃ๊ณ  ์žˆ์—ˆ์Œํ•˜์ง€๋งŒ ์š”์ฒญ ์‹œ dtl_region์—๋Š” ์‹œ/๋„ + ์‹œ/๊ตฐ/๊ตฌ๊นŒ์ง€๋งŒ ์ž…๋ ฅํ•ด์•ผ ์ •์ƒ ์ž‘๋™ํ•จ (ex: 31180)=> ์ฆ‰.. ์–ด๋–ค ๊ฐ’์„ ๋„ฃ์–ด์•ผํ•˜๋Š”์ง€ .. ํ–‰์ •์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ฌด์ง€ํ–ˆ๋‹ค... ํ–‰์ •์ฝ”๋“œhttps://kimhongsi.tistory.com/entry/%ED%96%..

JPA save() ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹ ์‚ฌ์šฉ ์‹œ @CreatedDate ์˜ created_at ๊ฐ’์ด null ์ด ๋˜๋Š” ์ด์Šˆ

โ›” ๋ฌธ์ œ ์ƒํ™ฉJPA์—์„œ save() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ,@CreatedDate๊ฐ€ ์„ค์ •๋œ created_at ํ•„๋“œ๊ฐ€ null๋กœ ์ €์žฅ๋˜๋Š” ์ด์Šˆ ๐Ÿ” ์›์ธ ๋ถ„์„Spring Data JPA์˜ @CreatedDate๋Š” JPA Auditing ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๊ฐ’์„ ์ฃผ์ž…๋ฐ›๋Š”๋‹ค.์ด๋•Œ Insert ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‚˜ Update ์‹œ์—๋Š” @CreatedDate ๊ฐ€ ์„ค์ •๋œ ํ•„๋“œ์— Null ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฒ„๋ฆฐ๋‹ค. ๐Ÿ› ๏ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ฒ€์ƒ‰ํ•ด๋ณธ ๊ฒฐ๊ณผ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์„ ๊ณ ๋ คํ•ด๋ดค์œผ๋‚˜ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ.์—”ํ‹ฐํ‹ฐ์— @EntityListeners(AuditingEntityListener.class)๊ฐ€ ์—†์Œํ•ด๋‹น ํ•„๋“œ์— @CreatedDate๋งŒ ์„ ์–ธ๋˜๊ณ , ํด๋ž˜์Šค๊ฐ€ JPA๋กœ ๊ด€๋ฆฌ๋˜๋„๋ก ์ œ๋Œ€๋กœ ์„ค์ •๋˜์ง€ ์•Š์ŒSpring Bo..

โšซ ์šฉ์–ด ์ •๋ฆฌ 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

[AWS] EC2 & ECR (+ docker)

๋ชฉ์ฐจย ย ย ย ย AWS EC2 (Elastic Compute Cloud)์ปดํ“จํ„ฐ๋ฅผ ๋นŒ๋ ค์„œ ์›๊ฒฉ์œผ๋กœ ์ ‘์†ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์ŠคEC2 = ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์ž„ย ๋ฐฐํฌ: ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒlocal host ์ฃผ์†Œ๋กœ ํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœํ–ˆ๋˜ ๊ฒƒ์€ , ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ๋ฐฐํฌ๋ฅผ ํ•˜๋ฉด ๊ณ ์œ ์˜ ์ฃผ์†Œ๋ฅผ ๋ฐ›๊ฒŒ ๋จย ๋‚ด ์ปดํ“จํ„ฐ๋กœ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๋ฉด 24์‹œ๊ฐ„ ์ผœ๋†”์•ผํ•˜๋Š”๋ฐ โ†’ ๋ณด์•ˆ, ๋ฒˆ๊ฑฐ๋กœ์›€ ๋“ฑEC2 ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž„ (์ฃผ๋กœ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๋ฐฐํฌ)ย ย ย ย  Region (๋ฆฌ์ „)ย ๋กœ๊ทธ์ธ โ†’ EC2 ์ ‘์† โ†’ ์œ„์ชฝ ๋ฆฌ์ „ ์„ ํƒย ๋ฆฌ์ „์ด๋ž€ ์ธํ”„๋ผ๋ฅผ ์ง€๋ฆฌ์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ฐฐํฌํ•œ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์ปดํ“จํ„ฐ๋“ค์ด ์œ„์น˜ํ•œ ์œ„์น˜๋ฅผ ๋ฆฌ์ „์ด๋ผ๊ณ  ๋งํ•œ๋‹ค.๋‹ค์–‘ํ•œ ๋ฆฌ์ „์„ ๋ณด์œ ๋ฆฌ์ „์€ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ๋ฆฌ์ „๋งˆ๋‹ค EC2 ๊ฐ€ ๋”ฐ๋กœ ๊ด€๋ฆฌ๋จย ๋„คํŠธ์›Œํฌ..

โšซ AWS 2025.04.06 0

[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

๐Ÿ”ด 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