๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (160)

Unfazedโ—๏ธ๐ŸŽฏ

[Java] String Pool

Java์˜ String Pool์€ JVM์ด ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๋ฌธ์ž์—ด ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.๊ธฐ๋ณธ ๊ฐœ๋…String Pool(๋˜๋Š” String Constant Pool, String Intern Pool)์€ JVM์˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์กด์žฌํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ณต๊ฐ„์œผ๋กœ, ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด ์ €์žฅ๋œ๋‹ค. String Pool์€ ๋ฌธ์ž์—ด์˜ ๋ถˆ๋ณ€์„ฑ(immutability)๊ณผ String interning์ด๋ผ๋Š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 2. ๋ฌธ์ž์—ด ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ String Pool1. ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑString s1 = "hello";String s2 = "hello"; JVM์€ str1์„ ์ƒ์„ฑํ•  ๋•Œ "..

Java 2025. 4. 9. 14:35
[Docker] Docker PostgreSQL ์—ฐ๊ฒฐ ๋ฌธ์ œ : localhost ๋ฐ”์ธ๋”ฉ ์šฐ์„ ์ˆœ์œ„์™€ 'role postgres does not exist' ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

Docker ๊ธฐ๋ฐ˜ PostgreSQL ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ค‘ DataGrip์—์„œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ ์‹œ "[28000] FATAL: role 'postgres' does not exist" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค.PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ Docker ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•˜๋˜, ๋ฐ์ดํ„ฐ๋Š” ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ๋ณผ๋ฅจ์— ์ €์žฅํ•˜๊ณ , ํ˜ธ์ŠคํŠธ์˜ 5432 ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚ด 5432 ํฌํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค. ์ƒํƒœ๋„ ์ •์ƒ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ Datagrip์—์„œ Test Connection์„ ์‹œ๋„ํ•ด ๋ณด์•˜๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด [28000] FATAL: role 'postgres' does not exist ์—๋Ÿฌ๊ฐ€..

Docker 2025. 4. 7. 19:29
[Docker] ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋… ๋ฐ ์‹คํ–‰ ๊ณผ์ •

Docker ์ด๋ฏธ์ง€์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ข…์†์„ฑ, ์„ค์ • ํŒŒ์ผ ๋“ฑ์„ ํฌํ•จํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์Šค๋ƒ…์ƒท๋‹จ์ˆœํ•œ ์ •์  ํŒŒ์ผ ๋ชจ์Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Dockerfile์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ๋œ ๋ถˆ๋ณ€(immutable)์ธ ์ฒญ์‚ฌ์ง„์ฝ๊ธฐ ์ „์šฉ(read-only)์ธ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ๋ ˆ์ด์–ด๋Š” ์ด์ „ ๋ ˆ์ด์–ด ์œ„์— ์Œ“์ด๋Š” ํ˜•ํƒœ๋กœ ์ด๋ฏธ์ง€์˜ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์ŒDocker ์ปจํ…Œ์ด๋„ˆ์ด๋ฏธ์ง€์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค์ด๋ฏธ์ง€ ์œ„์— ์ฝ๊ธฐ-์“ฐ๊ธฐ ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒ์„ฑ๋ฆฌ๋ˆ…์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ cgroups ๊ฐ™์€ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ฒฉ๋ฆฌ ๋ฐ ์ž์› ํ• ๋‹น์„ ๊ด€๋ฆฌ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ฃผ ํ”„๋กœ์„ธ์Šค(PID 1)์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋จ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์‹ค์ œ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ๊ทธ๋žจMySQL, Nginx..

Docker 2025. 4. 7. 14:06
Docker ํ•ต์‹ฌ ๋ช…๋ น์–ด ๋ฐ ์˜๋ฏธ ์ •๋ฆฌ

๊ธฐ๋ณธ ๋ช…๋ น์–ดdocker run - '์‹คํ–‰ํ•˜๋‹ค'์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹œ์ž‘์˜ˆ: docker run nginx - Nginx ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰docker pull - '๋‹น๊ธฐ๋‹ค/๊ฐ€์ ธ์˜ค๋‹ค'Docker Hub ๋˜๋Š” ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋กœ์ปฌ ์‹œ์Šคํ…œ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ์˜ˆ: docker pull ubuntu - Ubuntu ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œdocker push - '๋ฐ€๋‹ค/์˜ฌ๋ฆฌ๋‹ค'๋กœ์ปฌ์—์„œ ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ Docker Hub๋‚˜ ๋‹ค๋ฅธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œ์˜ˆ: docker push myusername/myapp - ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œdocker build - '๊ตฌ์ถ•ํ•˜๋‹ค'Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ Docker ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ์˜ˆ: docker build -t myapp . - ํ˜„์žฌ ๋””๋ ‰..

Docker 2025. 4. 6. 00:24
AWS ํ”„๋ฆฌ ํ‹ฐ์–ด ๋งŒ๋ฃŒ ํ›„, Gmail Plus Addressing์œผ๋กœ ์ƒˆ ํ”„๋ฆฌ ํ‹ฐ์–ด ์‚ฌ์šฉํ•˜๊ธฐ, free tier ๋งŒ๋ฃŒ ์—ฌ๋ถ€ ์‰ฝ๊ฒŒ ํ™•์ธ ํ•˜๋Š”๋ฒ•

AWS ํ”„๋ฆฌ ํ‹ฐ์–ด ๋งŒ๋ฃŒ ํ›„ ๋Œ€์ฒ˜AWS ํ”„๋ฆฌํ‹ฐ์–ด๊ฐ€ ๋งŒ๋ฃŒ๋˜์–ด ์ƒˆ ๊ณ„์ •์„ ๋งŒ๋“ค๋ ค๋ฉด ์ƒˆ ์ด๋ฉ”์ผ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ Gmail ๊ณ„์ •์œผ๋กœ ๊ณ„์† ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘ Gmail์˜ 'Plus Addressing' ๊ธฐ๋Šฅ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!ํ”Œ๋Ÿฌ์Šค ์ฃผ์†Œ(plus addressing)๋ž€?๊ธฐ์กด ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ์ƒˆ๋กœ์šด AWS ๊ณ„์ •์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.์‚ฌ์šฉ๋ฒ•: ํ˜„์žฌ ์ด๋ฉ”์ผ ์ฃผ์†Œ์˜ "@" ๊ธฐํ˜ธ ์•ž์— "+"์™€ ์ถ”๊ฐ€ ๋ฌธ์ž๋ฅผ ๋„ฃ์–ด ์‚ฌ์šฉํ•œ๋‹ค.์˜ˆ์‹œ: ์›๋ž˜ ์ด๋ฉ”์ผ์ด test@gmail.com์ด๋ผ๋ฉด, test+aws1@gmail.com์œผ๋กœ ์ƒˆ AWS ๊ณ„์ •์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.์œ„ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋™์ผ gmail ๊ณ„์ •์— ์ถ”์ž๋ฌธ์ž๋ฅผ ๋ถ™์—ฌ ๊ฐ€์ž…ํ•˜์—ฌ ๋™์ผ ๋ฉ”์ผ ๊ณ„์ •์œผ๋กœ ํ”„๋ฆฌ..

AWS 2025. 4. 3. 19:50
[Java] ์ฐธ์กฐ๋ณ€์ˆ˜, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ, hash code, identity hash code

Java์—์„œ ์ฐธ์กฐ๋ณ€์ˆ˜๋Š” ๋‹จ์ˆœํžˆ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์•˜์„ ๋•Œ๋Š” ํด๋ž˜์Šค๋ช…@16์ง„์ˆ˜ ํ•ด์‹œ์ฝ”๋“œ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.ํ•ด๋‹น ๊ธ€์—์„œ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐธ์กฐํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ถœ๋ ฅ ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ํ•ด์‹œ์ฝ”๋“œ์™€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ ํ•œ๋‹ค.Java์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜์ฐธ์กฐ๋ณ€์ˆ˜๋Š” ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ง์ ‘ ์ฃผ์†Œ๊ฐ’์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ๋Œ€์‹  toString() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํด๋ž˜์Šค๋ช…@ํ•ด์‹œ์ฝ”๋“œ ํ˜•์‹์˜ ๋ฌธ์ž์—ด์ด ๋ฐ˜ํ™˜๋œ๋‹ค. ํ•ด์‹œ์ฝ”๋“œ vs ์‹ค์ œ ์ฃผ์†ŒProduct@1302068a์™€ ๊ฐ™์€ ํ•ด์‹œ์ฝ”๋“œ๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”..

Java 2025. 3. 10. 01:17
[Spring Boot] ๋ฒ„์ „ ์ฒด๊ณ„ Semantic Versioning

Semantic Versioning(SemVer)์€ ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ๊ทœ์น™์œผ๋กœ, MAJOR.MINOR.PATCH ํ˜•์‹์œผ๋กœ ๋ฒ„์ „์„ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด ์ฒด๊ณ„๋Š” API๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•˜๋ฉฐ, Spring Boot ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ ํ•ต์‹ฌ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์œผ๋กœ ์ฑ„ํƒ๋˜์—ˆ๋‹ค. Semantic Versioning ๊ธฐ๋ณธ ํ˜•์‹MAJOR.MINOR.PATCHMAJOR ๋ฒ„์ „(์ฃผ ๋ฒ„์ „): ๊ธฐ์กด ๊ธฐ๋Šฅ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋  ๋•Œ ์ฆ๊ฐ€(์˜ˆ: 1.x.x → 2.0.0)MINOR ๋ฒ„์ „(๋ถ€ ๋ฒ„์ „): ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์‹ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋  ๋•Œ ์ฆ๊ฐ€(์˜ˆ: 2.1.x → 2.2.0)PATCH ๋ฒ„์ „(ํŒจ์น˜ ๋ฒ„์ „): ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์ด ๋‚ด๋ถ€ ๊ฐœ์„ ์ด ์žˆ์„ ๋•Œ ์ฆ๊ฐ€(์˜ˆ: 2.2.0 → 2...

Web (back-end)/Spring 2025. 2. 27. 14:19
[Java] ์˜ฌ๋ฐ”๋ฅธ Optional ์‚ฌ์šฉ์œผ๋กœ API ์„ค๊ณ„ํ•˜๊ธฐ

API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋งŒ ๋ณด๊ณ ๋„ ๋ฐ˜ํ™˜๊ฐ’์ด ์„ ํƒํ˜•์ธ์ง€, ์ฆ‰ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ์‰ฝ๊ฒŒ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ์•ˆ์ „ํ•˜๊ณ  ๋ช…๋ฃŒํ•œ API๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Java 8๋ถ€ํ„ฐ ๋„์ž…๋œ Optional ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด API ์„ค๊ณ„์˜ ๋ช…ํ™•์„ฑ์„ ๋†’์ด๊ณ , NullPointerException๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค.1. Optional์˜ ๊ธฐ๋ณธ ๊ฐœ๋…public final class Optionalextends ObjectA container object which may or may not contain a non-null value. - ๊ณต์‹ ๋ฌธ์„œ ์ •์˜Java 8 ๋ถ€ํ„ฐ ๋„์ž…๋œ Optional๋Š” null์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๊ฐ์‹ธ๋Š” ๋ž˜ํผ(wrapp..

Java 2025. 2. 26. 10:32