{"@attributes":{"version":"2.0"},"channel":{"title":"yeseul.log","link":"https:\/\/yeseul-dev.tistory.com\/","description":{},"language":"ko","pubDate":"Wed, 6 May 2026 22:51:33 +0900","generator":"TISTORY","ttl":"100","managingEditor":" \uc608\uc2ac","item":[{"title":"[spring-batch] \uc0dd\uc5d0 \ucc98\uc74c\uc73c\ub85c \uc624\ud508 \uc18c\uc2a4\uc5d0 \uae30\uc5ec\ub97c \ud574\ubcf4\ub2e4","link":"https:\/\/yeseul-dev.tistory.com\/99","description":"<p data-ke-size=\"size16\">\uc624\ud508 \uc18c\uc2a4\ub77c\ub294 \uc874\uc7ac\uc5d0 \ub300\ud574\uc11c\ub294 \"\uc5b8\uc81c \ud55c\ubc88\ucbe4\uc740 \uae30\uc5ec\ud574\ubcf4\uace0 \uc2f6\ub2e4\"\ub294 \ub9c8\uc74c\uc740 \ud56d\uc0c1\uc788\uc5c8\uc9c0\ub9cc,<\/p>\n<p data-ke-size=\"size16\">\ub9c9\uc5f0\ud558\uac8c\ub9cc \uc0dd\uac01\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub7ec\ub2e4 \uc6b0\uc5f0\ud788 <b>\uc624\ud508\uc18c\uc2a4 \uae30\uc5ec \ubaa8\uc784<\/b>\uc774\ub77c\ub294 \uacf3\uc744 \uc54c\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 8.31.20.png\" data-origin-width=\"2580\" data-origin-height=\"1628\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/dbQsnH\/dJMcacPwCFM\/1fbUq901WWNOL1146lieck\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/dbQsnH\/dJMcacPwCFM\/1fbUq901WWNOL1146lieck\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/dbQsnH\/dJMcacPwCFM\/1fbUq901WWNOL1146lieck\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbQsnH%2FdJMcacPwCFM%2F1fbUq901WWNOL1146lieck%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"2580\" height=\"1628\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 8.31.20.png\" data-origin-width=\"2580\" data-origin-height=\"1628\"\/><\/span><\/figure>\n<\/p>\n<figure id=\"og_1770118301448\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"website\" data-og-title=\"\uc624\ud508\uc18c\uc2a4 \uae30\uc5ec\ubaa8\uc784\" data-og-description=\"&ldquo;\ub204\uad6c\ub098 \uc6d0\ud558\ub294 \uc624\ud508\uc18c\uc2a4\uc5d0 \uae30\uc5ec\ub97c&rdquo; \ud560 \uc218 \uc788\uac8c \uae30\uc5ec\ub97c \uc9c1\uc811 \ub3d5\uc2b5\ub2c8\ub2e4!\" data-og-host=\"medium.com\" data-og-source-url=\"https:\/\/medium.com\/opensource-contributors\" data-og-url=\"https:\/\/medium.com\/opensource-contributors\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/AAJ4d\/dJMb83koaTA\/41NlEuzQGaahtu2K3ifvb0\/img.png?width=600&amp;height=599&amp;face=0_0_600_599\"><a href=\"https:\/\/medium.com\/opensource-contributors\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/medium.com\/opensource-contributors\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/AAJ4d\/dJMb83koaTA\/41NlEuzQGaahtu2K3ifvb0\/img.png?width=600&amp;height=599&amp;face=0_0_600_599');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">\uc624\ud508\uc18c\uc2a4 \uae30\uc5ec\ubaa8\uc784<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">&ldquo;\ub204\uad6c\ub098 \uc6d0\ud558\ub294 \uc624\ud508\uc18c\uc2a4\uc5d0 \uae30\uc5ec\ub97c&rdquo; \ud560 \uc218 \uc788\uac8c \uae30\uc5ec\ub97c \uc9c1\uc811 \ub3d5\uc2b5\ub2c8\ub2e4!<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">medium.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ucd08\uc2ec\uc790 \ubd84\ub4e4\uaed8\ub3c4 \uccb4\uacc4\uc801\uc73c\ub85c \uac00\uc774\ub4dc\ub97c \uc8fc\uc2e0\ub2e4\ub294 \ud6c4\uae30\ub97c \ubd24\uae30 \ub54c\ubb38\uc5d0 \uc774\ubc88\uc5d0\ub294 \uaf2d \uc624\ud508 \uc18c\uc2a4\uc5d0 \uae30\uc5ec\ub97c \ud574\ubcf4\uaca0\ub2e4\ub294 \uc0dd\uac01\uc73c\ub85c \uc77c\ub2e8 \ucc38\uac00\ubd80\ud130 \ud588\ub358 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<blockquote data-ke-style=\"style1\">\n<p data-ke-size=\"size16\"><a href=\"https:\/\/medium.com\/opensource-contributors\/%EB%AA%A8%EC%A7%91%EC%A4%91-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-%EA%B8%B0%EC%97%AC-%EB%AA%A8%EC%9E%84-10%EA%B8%B0-%EC%B0%B8%EA%B0%80%EC%9E%90%EB%A5%BC-%EB%AA%A8%EC%A7%91%ED%95%A9%EB%8B%88%EB%8B%A4-2026-01-%EC%A7%84%ED%96%89-%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4-%ED%82%A4%EB%A7%81-%EA%B5%BF%EC%A6%88-%EC%84%A0%EB%AC%BC%EA%B9%8C%EC%A7%80-e95a8e528056\">\uc624\ud508\uc18c\uc2a4 \uae30\uc5ec \ubaa8\uc784 10\uae30 \ubaa8\uc9d1 \uae00<\/a><\/p>\n<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">Spring Batch\ub97c \uc120\ud0dd\ud55c \uc774\uc720<\/h2>\n<p data-ke-size=\"size16\">\uae30\uc5ec\ud560 \ud504\ub85c\uc81d\ud2b8\ub97c \uace0\ub97c \ub54c, \uace0\ubbfc \uc5c6\uc774 <b>spring-batch<\/b>\ub97c \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">spring-batch\ub294 \uc800\uc5d0\uac8c \uaf64 \ud2b9\ubcc4\ud55c \ud504\ub85c\uc81d\ud2b8\uc785\ub2c8\ub2e4. \ubcf8\uaca9\uc801\uc778 \uac1c\ubc1c \uc2a4\ud130\ub514\ub97c \uc2dc\uc791\ud55c \uac8c \ubc14\ub85c spring-batch \uc2a4\ud130\ub514\uc600\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud2b9\ud788 \ucd5c\uadfc\uc5d0 \uc2a4\ud504\ub9c1 \ubc30\uce58 \uad00\ub828 \ucc45\uc744 \uc7a0\uc2dc \uc77d\uc73c\uba74\uc11c \ub354\uc6b1 \ud765\ubbf8\ub97c \uac00\uc9c0\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc815\ud655\ud788 \uae30\uc5b5\uc740 \uc548\ub098\uc9c0\ub9cc, \ucc45\uc758 \uc11c\ubb38\uc5d0\uc11c \"\ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ud56d\uc0c1 \ub3cc\uc544\uac00\uace0 \uc788\uc9c0\ub9cc - \uc720\uc800\ub294 \ub290\ub07c\uc9c0 \ubabb\ud558\ub294 \uc11c\ube44\uc2a4\"\ub77c\ub294 \ud45c\ud604 \ub54c\ubb38\uc774\uc5c8\ub358 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc774 \ud45c\ud604\uc744 \ubcf4\uace0 \ubc30\uce58 \uc11c\ube44\uc2a4\uc57c\ub9d0\ub85c \uc9c4\uc9dc '\ubc31\uc5d4\ub4dc'\ub77c\ub294 \ub290\ub08c\uc774\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \ubc31\uc5d4\ub4dc \uac1c\ubc1c\uc790\ub85c\uc11c \uadf8\ub7f0 \ubd80\ubd84\uc744 \ub354 \uae4a\uc774 \uc774\ud574\ud558\uace0 \uc2f6\uc5b4 \uc790\uc5f0\uc2a4\ub7fd\uac8c spring-batch \ud504\ub85c\uc81d\ud2b8\uc5d0 \uae30\uc5ec\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">\uadf8\ub7f0\ub370... \"\uae30\uc5ec\ud560 \uc218 \uc788\ub294 \uc774\uc288\uac00 \uc5c6\ub2e4\"<\/h2>\n<p data-ke-size=\"size16\">\uae30\uc5ec \ubaa8\uc784\uc774 \uc2dc\uc791\ud558\uae30 \uc804\ubd80\ud130 \ubd88\uc548\ud568\uc774 \ucef8\uae30 \ub54c\ubb38\uc5d0, spring-batch\uc5d0 \uae30\uc5ec\ud558\uc2e0 \ubd84\ub4e4\uc758 \ud6c4\uae30\ub97c \uba3c\uc800 \ucc3e\uc544\ubcf4\uc5c8\uc2b5\ub2c8\ub2e4. \ubaa8\uc784\uc7a5\uc774\uc2e0 <a href=\"https:\/\/medium.com\/opensource-contributors\/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98-pr-%EA%B8%B0%EC%97%AC-flowbuilder-next-%EC%9D%98-%EB%AC%B4%ED%95%9C%EB%A3%A8%ED%94%84-%EB%B2%84%EA%B7%B8-%EA%B3%A0%EC%B9%98%EA%B8%B0-3cac3237f44c\" target=\"_blank\" rel=\"noopener\">\uc778\uc81c\ub2d8\uaed8\uc11c spring-batch \uae30\uc5ec\uc5d0 \ub300\ud574 \uc9c1\uc811 \uae00\uc744 \ub0a8\uae30\uc2e0 \uac8c<\/a> \uc788\uc5c8\uace0, \ubc14\ub85c \uce74\ud1a1\uc73c\ub85c \uc870\uc5b8\uc744 \uad6c\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"704\" data-origin-height=\"880\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/befiqu\/dJMcabXmDg6\/RWVscZIXNKh8KdwCdvebc0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/befiqu\/dJMcabXmDg6\/RWVscZIXNKh8KdwCdvebc0\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/befiqu\/dJMcabXmDg6\/RWVscZIXNKh8KdwCdvebc0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbefiqu%2FdJMcabXmDg6%2FRWVscZIXNKh8KdwCdvebc0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"320\" height=\"400\" data-origin-width=\"704\" data-origin-height=\"880\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><s><span style=\"color: #9d9d9d;\"><i>\uc815\ub9d0 \ubcc4 \ub9d0\uc500 \uc548\ub4dc\ub838\ub294\ub370\ub3c4 \uc5c4\uccad\ub09c \uc9c0\uc9c0\ub97c \ud574\uc8fc\uc2e0 \uc778\uc81c\ub2d8&hellip; \ucc9c\uc0ac\uc774\uc2ec\uc774 \ud2c0\ub9bc\uc5c6\uc73c\uc2e0 \uac83\uac19 \uc2b5\ub2c8\ub2e4. \uc2e4\uc81c \ubaa8\uc784\uc5d0\uc11c\ub3c4 500\uba85\uc774 \ub118\ub294 \uc778\uc6d0\ub4e4 \uc804\ubd80 \ucf00\uc5b4\ub97c \ud574\uc8fc\uc168\uc73c\ub2c8&hellip; \ub300\ub2e8\ud558\uc2e0 \ubd84\uc774\uc2ed\ub2c8\ub2e4. \ubcc4\ub85c \uc5ec\ucb64\ubcf8 \uac83\ub3c4 \uc5c6\ub294\ub370 \uc5c4\uccad\ub09c \uc751\uc6d0\uc744 \ud574\uc8fc\uc154\uc11c \ubb34\ucc99 \uac10\uc0ac\ud588\uc2b5\ub2c8\ub2e4..<\/i><\/span><\/s><\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub9ac\uace0 \uc2e4\uc81c\ub85c \uc624\ud508\uc18c\uc2a4 \ubaa8\uc784\uc774 \uc2dc\uc791\ub418\uace0, \uc800\ub294 1\ud68c\ucc28 \uc624\ud504\ub77c\uc778 \ubaa8\uc784\uc5d0 \ucc38\uac00\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc624\ud508\uc18c\uc2a4 \uae30\uc5ec \ubaa8\uc784\uc5d0\uc11c\ub294 AI\ub97c \uc801\uadf9 \ud65c\uc6a9\ud558\uae30\ub97c \uad8c\uc7a5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uae30\uc5ec\ub97c \uc6d0\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\ub9cc \uc120\uc815\ud55c\ub2e4\uba74 AI\uac00 \uc774\uc288 \uc120\uc815\ubd80\ud130 \ud574\uacb0\uae4c\uc9c0 \uac00\uc774\ub4dc\ub97c \ud574\uc8fc\ub294 \ubc29\uc2dd\uc73c\ub85c \uc9c4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uccab \ubc88\uc9f8 \uacfc\uc815\uc778 \uc774\uc288 \uc120\uc815\ud558\ub294 \uac83\ub3c4 AI\uc640 \ud568\uaed8 \uc9c4\ud589\ud558\uac8c \ub418\ub294\ub370\uc694, \uae30\uc5ec\ud558\uace0 \uc2f6\uc5c8\ub358 spring-batch \ud504\ub85c\uc81d\ud2b8\ub294 \uc624\ub798\ub410\uae30 \ub54c\ubb38\uc5d0 \uc774\ubbf8 \uc131\uc219\ub3c4\uac00 \ub192\uc544 \ucd08\uc2ec\uc790\uac00 \uc190\ub300\uae30 \uc5b4\ub824\uc6b4 \uc774\uc288\ub4e4\uc774 \ub300\ubd80\ubd84\uc774\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"1354\" data-origin-height=\"796\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cEJBGv\/dJMcadt38fg\/aoRwKWM9uKqcTJBP3pQGBk\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cEJBGv\/dJMcadt38fg\/aoRwKWM9uKqcTJBP3pQGBk\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cEJBGv\/dJMcadt38fg\/aoRwKWM9uKqcTJBP3pQGBk\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEJBGv%2FdJMcadt38fg%2FaoRwKWM9uKqcTJBP3pQGBk%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"556\" height=\"327\" data-origin-width=\"1354\" data-origin-height=\"796\"\/><\/span><\/figure>\n<figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"1688\" data-origin-height=\"906\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bpuWh8\/dJMcadnjnde\/oqoFjIcu19vrbcJ6M33QS1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bpuWh8\/dJMcadnjnde\/oqoFjIcu19vrbcJ6M33QS1\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bpuWh8\/dJMcadnjnde\/oqoFjIcu19vrbcJ6M33QS1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpuWh8%2FdJMcadnjnde%2FoqoFjIcu19vrbcJ6M33QS1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"570\" height=\"306\" data-origin-width=\"1688\" data-origin-height=\"906\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<blockquote data-ke-style=\"style1\"><span style=\"font-family: 'Noto Serif KR';\">\uc801\ud569\ud55c \uc774\uc288\uac00 \ud558\ub098\ub3c4 \uc5c6\ub2e4.<\/span><\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<blockquote data-ke-style=\"style2\">\ucda9\uaca9<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc5ec\ub7ec \ucf54\uba58\ud2b8\ub4e4\uc744 \ub4e4\uc73c\uba74\uc11c '\ub098\ub294 spring-batch \ud504\ub85c\uc81d\ud2b8\uc5d0 \uae30\uc5ec\ud560 \uc218 \uc5c6\uaca0\uad6c\ub098', '\ub098\ub294 \uc65c \uc774\ub7f0 \uc2e4\ub825\uc744 \uac16\uace0\uc788\ub294 \uac70\uc9c0' \ud558\ub294 \uc0dd\uac01\uc5d0 \uac11\uc790\uae30 \ub108\ubb34 \uc6b0\uc6b8\ud574\uc838\uc11c \ud63c\uc220\uae4c\uc9c0 \ud588\ub358 \uae30\uc5b5\uc774 \ub0a9\ub2c8\ub2e4. \u314b\u314b\u314b\u314b<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc624\ud504\ub77c\uc778 \ubaa8\uc784\uc5d0\uc11c \uc778\uc81c\ub2d8\uacfc \uc598\uae30\ub97c \ud558\uba74\uc11c \uadf8\ub098\ub9c8 \ucd08\uc2ec\uc790\uac00 \uc9c4\ud589 \ud558\uae30\uc5d0 \uc801\ud569\ud55c \uc774\uc288\ub97c \uc120\uc815 \ud574\uc8fc\uc168\uace0, \uac1c\uc778\uc801\uc73c\ub85c \uc9c4\ud589\ud55c \ud6c4\uc5d0 \uac1c\uc778 \ube0c\ub79c\uce58\uc5d0 \ud478\uc2dc \ud6c4 \ud53c\ub4dc\ubc31\uc744 \ubc1b\uae30\ub85c \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub54c \uc778\uc81c\ub2d8\uaed8 \ud639\uc2dc \ub2e4\ub978 \ud504\ub85c\uc81d\ud2b8\ub97c \uc120\uc815 \ud574\uc57c\ud560\uc9c0 \uace0\ubbfc\uc744 \ub9d0\uc500\ub4dc\ub838\ub294\ub370, <span style=\"color: #333333; text-align: start;\"><span>&nbsp;<\/span>\"\uadf8\ub798\ub3c4 \ubcf8\uc778\uc774 \uc81c\uc77c \ud558\uace0 \uc2f6\uc740 \ud504\ub85c\uc81d\ud2b8\uc5d0 \uae30\uc5ec\ud558\ub294 \uac8c \uc81c\uc77c \uc88b\uc8e0\"\ub77c\uace0 \ud558\uc2dc\uba70 \ub3c4\uc6c0\uc744 \uc8fc\uc168\uace0, \uadf8\ub54c \uc120\uc815\ud55c \uc774\uc288\uac00 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">\uc120\uc815\ud55c \uc774\uc288<\/h3>\n<figure id=\"og_1770119748564\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"object\" data-og-title=\"MetaDataInstanceFactory default values cause StepContext collision in StepScopeTestUtils when @SpringBatchTest is active &middot; Issu\" data-og-description=\"Bug description: There is a logical collision in StepSynchronizationManager when using StepScopeTestUtils in a test environment managed by @SpringBatchTest. StepExecution determines equality based ...\" data-og-host=\"github.com\" data-og-source-url=\"https:\/\/github.com\/spring-projects\/spring-batch\/issues\/5181\" data-og-url=\"https:\/\/github.com\/spring-projects\/spring-batch\/issues\/5181\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/UzU7J\/dJMb9lL6Pgh\/SsSd6CE41mdkDzE4NKBqt0\/img.png?width=1200&amp;height=600&amp;face=0_0_1200_600,https:\/\/scrap.kakaocdn.net\/dn\/dfxQ1T\/dJMb9iaMnKb\/5aR0wEfNL2KZKTyfQ4JJQk\/img.png?width=1200&amp;height=600&amp;face=0_0_1200_600\"><a href=\"https:\/\/github.com\/spring-projects\/spring-batch\/issues\/5181\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/github.com\/spring-projects\/spring-batch\/issues\/5181\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/UzU7J\/dJMb9lL6Pgh\/SsSd6CE41mdkDzE4NKBqt0\/img.png?width=1200&amp;height=600&amp;face=0_0_1200_600,https:\/\/scrap.kakaocdn.net\/dn\/dfxQ1T\/dJMb9iaMnKb\/5aR0wEfNL2KZKTyfQ4JJQk\/img.png?width=1200&amp;height=600&amp;face=0_0_1200_600');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">MetaDataInstanceFactory default values cause StepContext collision in StepScopeTestUtils when @SpringBatchTest is active &middot; Issu<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">Bug description: There is a logical collision in StepSynchronizationManager when using StepScopeTestUtils in a test environment managed by @SpringBatchTest. StepExecution determines equality based ...<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">github.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\"><a style=\"background-color: #e6f5ff; color: #0070d1; text-align: start;\" href=\"https:\/\/github.com\/spring-projects\/spring-batch\/issues\/5181\">MetaDataInstanceFactory default values cause StepContext collision in StepScopeTestUtils when @SpringBatchTest is active<span>&nbsp;<\/span><\/a><a style=\"background-color: #e6f5ff; color: #0070d1;\" href=\"https:\/\/github.com\/spring-projects\/spring-batch\/issues\/5181\">#5181<\/a><\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uac04\ub2e8\ud788 \uc124\uba85\ud558\uba74, @SpringBatchTest\uc640 StepScopeTestUtils\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud588\uc744 \ub54c, MetaDataInstanceFactory\uac00 \uace0\uc815\ub41c ID(1234L)\ub85c StepExecution\uc744 \uc0dd\uc131\ud558\uba74\uc11c \ucee8\ud14d\uc2a4\ud2b8\uac00 \ucda9\ub3cc\ud558\ub294 \ubc84\uadf8\uc600\uc2b5\ub2c8\ub2e4. \uc774\ub85c \uc778\ud574 \ud14c\uc2a4\ud2b8\uc5d0\uc11c JobParameters\uac00 \uc81c\ub300\ub85c \uc8fc\uc785\ub418\uc9c0 \ubabb\ud558\ub294 \ubb38\uc81c\uac00 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\uc288 \uc791\uc131\uc790 \ubd84\uc774 \uc7ac\ud604 \ucf54\ub4dc\uae4c\uc9c0 \uaf3c\uaf3c\ud788 \ub0a8\uaca8 \uc8fc\uc154\uc11c \uc774\ud574\ud558\uac70\ub098 \ud574\uacb0\ud558\ub294 \ub370 \uc218\uc6d4\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">AI\uc640 \ud568\uaed8 \uacf5\ubd80\ud558\uace0, \uc774\ud574\ud558\ub294 \uacfc\uc815<\/h2>\n<p data-ke-size=\"size16\">\uc774\uc288\ub97c \ud574\uacb0\ud558\ub824\uba74 spring-batch\uc758 \ud14c\uc2a4\ud2b8 \uad00\ub828 \ud074\ub798\uc2a4\ub4e4\uc744 \uc5b4\ub290 \uc815\ub3c4\ub294 \uc774\ud574\ud574\uc57c \ud588\uc5c8\uc2b5\ub2c8\ub2e4. \ud3c9\uc18c\uc5d0 spring-batch \ub97c \uc774\uc6a9\ud55c \uc11c\ube44\uc2a4 \uac1c\ubc1c\uc744 \ud574\ubcf8 \uac74 \ub9de\uc9c0\ub9cc, \ud14c\uc2a4\ud2b8 \uc720\ud2f8\ub9ac\ud2f0 \ud074\ub798\uc2a4\ub4e4\uc740 \uac70\uc758 \uc0ac\uc6a9\ud574\ubcf8 \uc801\uc774 \uc5c6\uc5c8\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\ub54c AI\uc5d0\uac8c \"spring-batch \ud14c\uc2a4\ud2b8 \ud074\ub798\uc2a4\ub97c \uacf5\ubd80\ud558\ub824\ub294\ub370, \uc5b4\ub5a4 \uc21c\uc11c\ub300\ub85c \ubd10\uc57c\ud560\uae4c?\"\ub77c\uace0 \ubb3c\uc5b4\ubcf4\ub2c8 \ud559\uc2b5 \uacbd\ub85c\uae4c\uc9c0 \uc815\ub9ac\ud574\uc8fc\uc5c8\uc2b5\ub2c8\ub2e4. \ud070 \uadf8\ub9bc\uc744 \uc7a1\uace0, \uac01 \ud074\ub798\uc2a4\ub97c \ud558\ub098\uc529 \ub4e4\uc5b4\uac00\uba70 \uc77d\uace0, \uc774\ud574\uac00 \uc548 \ub418\ub294 \ubd80\ubd84\uc740 \ub2e4\uc2dc AI\uc640 \uc598\uae30\ud558\uba70 \ubc18\ubcf5\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc9c4\ud589\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uacf5\ubd80\ud55c \uc8fc\uc694 \ud074\ub798\uc2a4\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>MetaDataInstanceFactory<\/b> &mdash; \ud14c\uc2a4\ud2b8\uc6a9 Job\/Step \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \ud575\uc2ec \uc720\ud2f8\ub9ac\ud2f0<\/li>\n<li><b>ExecutionContextTestUtils<\/b> &mdash; ExecutionContext\uc5d0\uc11c \uac12\uc744 \ud3b8\ub9ac\ud558\uac8c \uaebc\ub0b4\ub294 \ud14c\uc2a4\ud2b8 \uc720\ud2f8\ub9ac\ud2f0<\/li>\n<li><b>JobOperatorTestUtils<\/b> &mdash; Job \uc2e4\ud589\uacfc \ub2e8\uc77c Step \ud14c\uc2a4\ud2b8\ub97c \uc704\ud55c \ud5ec\ud37c (\uae30\uc874 JobLauncherTestUtils\uc758 \ud6c4\uc18d)<\/li>\n<li><b>JobRepositoryTestUtils<\/b> &mdash; \ubc30\uce58 \uba54\ud0c0\ub370\uc774\ud130 \uc800\uc7a5\uc18c\uc758 \ud14c\uc2a4\ud2b8 \uc720\ud2f8\ub9ac\ud2f0<\/li>\n<li><b>StepScopeTestExecutionListener<\/b> &mdash; @StepScope\/@JobScope \ube48\uc744 \ub2e8\uc704 \ud14c\uc2a4\ud2b8\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud558\uac8c \ud574\uc8fc\ub294 \ub9ac\uc2a4\ub108<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">\uc774\ub807\uac8c \ud14c\uc2a4\ud2b8 \ud074\ub798\uc2a4\ub4e4\uc744 \uacf5\ubd80\ud558\uace0 \ub098\ub2c8, \uc774\uc288\uac00 \uc65c \ubc1c\uc0dd\ud55c \uac74\uc9c0 \uadf8\ub9ac\uace0 \uc5b4\ub5bb\uac8c \uc811\uadfc\ud560 \uc218 \uc788\ub294\uc9c0\uac00 \uc870\uae08\uc529 \ubcf4\uc774\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">PR\uacfc merge &mdash; \uc2e4\uc81c \uae30\uc5ec\ud55c \ub0b4\uc6a9<\/h2>\n<h3 data-ke-size=\"size23\">\uc811\uadfc \ubc29\ud5a5<\/h3>\n<p data-ke-size=\"size16\">\uc774\uc288\uc5d0\uc11c\ub3c4 \uc5b8\uae09\ub418\uc5c8\ub4ef\uc774 \ud574\uacb0 \ubc29\ubc95\uc740 \uc5ec\ub7ec \uac00\uc9c0\uc785\ub2c8\ub2e4. ID \uc0dd\uc131 \uc804\ub7b5\uc744 \ubc14\uafb8\uac70\ub098, \uc911\ubcf5 \ub4f1\ub85d \ud68c\ud53c \ub85c\uc9c1\uc744 \ucd94\uac00\ud558\uac70\ub098, \uc0ac\uc6a9\uc790\uc5d0\uac8c ID\ub97c \uc9c1\uc811 \ubc1b\ub3c4\ub85d \ud558\ub294 \ub4f1\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc800\ub294 <b>\uc218\uc815\uc744 \ucd5c\uc18c\ud654<\/b>\ud558\ub294 \ubc29\ud5a5\uc744 \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4. \uae30\uc874\uc5d0 \uc0ac\uc6a9\ub418\ub358 \uc0c1\uc218\uac12\uc744 \uadf8\ub300\ub85c \uc720\uc9c0\ud558\ub418, \uc0c8\ub85c\uc6b4 ID\ub97c \uc0dd\uc131\ud560 \ub54c\ub9c8\ub2e4 \ud574\ub2f9 \uc0c1\uc218\uc5d0 \uae30\ubc18\ud558\uc5ec \ub9e4\ubc88 \uace0\uc720\ud55c ID\ub97c \uc81c\uacf5\ud558\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">AtomicLong<\/h3>\n<p data-ke-size=\"size16\">\uc774 \uacfc\uc815\uc5d0\uc11c AtomigLong\uc744 \uc0ac\uc6a9\ud560 \ud544\uc694\uac00 \uc0dd\uacbc\ub294\ub370, \uc0ac\uc2e4 \ud68c\uc0ac\uc5d0\uc11c \uc11c\ube44\uc2a4\ub97c \uad6c\ud604\ud558\uba74\uc11c Long\uc740 \ub9ce\uc774 \uc0ac\uc6a9\ud558\uc9c0\ub9cc AtomicXXX\ub77c\ub294 \ud074\ub798\uc2a4\ub294 \ucc98\uc74c \uc811\ud574\ubcf4\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">spring-batch \ucf54\ub4dc\ub97c \ub4e4\uc5ec\ub2e4\ubcf4\uba74\uc11c \uadf8 \uc874\uc7ac\ub97c \uc54c\uac8c \ub418\uc5c8\uace0, \uba40\ud2f0 \uc2a4\ub808\ub4dc \ud658\uacbd\uc5d0\uc11c long \uac12\uc758 \uc815\ud569\uc131\uc744 \uc720\uc9c0\ud558\uae30 \uc704\ud574 \uc774 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud55c\ub2e4\ub294 \uac83\uc744 \uc54c\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">PR \uc81c\ucd9c<\/h3>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 9.24.14.png\" data-origin-width=\"3312\" data-origin-height=\"1968\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bvqvze\/dJMcabpyb7W\/mTcxdRiKalWaTIzHTp4rK0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bvqvze\/dJMcabpyb7W\/mTcxdRiKalWaTIzHTp4rK0\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bvqvze\/dJMcabpyb7W\/mTcxdRiKalWaTIzHTp4rK0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvqvze%2FdJMcabpyb7W%2FmTcxdRiKalWaTIzHTp4rK0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"3312\" height=\"1968\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 9.24.14.png\" data-origin-width=\"3312\" data-origin-height=\"1968\"\/><\/span><\/figure>\n<figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cAJlnc\/dJMcaiB97xP\/yUuGMh0SheC9VH4OjSGVyK\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cAJlnc\/dJMcaiB97xP\/yUuGMh0SheC9VH4OjSGVyK\/img.png\" data-origin-width=\"1816\" data-origin-height=\"534\" data-is-animation=\"false\" style=\"width: 44.3192%; margin-right: 10px;\" data-widthpercent=\"44.84\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cAJlnc\/dJMcaiB97xP\/yUuGMh0SheC9VH4OjSGVyK\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAJlnc%2FdJMcaiB97xP%2FyUuGMh0SheC9VH4OjSGVyK%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1816\" height=\"534\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/upfnT\/dJMcafeqALo\/glFN5KKPyGn0SMHimnowg1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/upfnT\/dJMcafeqALo\/glFN5KKPyGn0SMHimnowg1\/img.png\" data-origin-width=\"1004\" data-origin-height=\"240\" data-is-animation=\"false\" width=\"626\" height=\"150\" style=\"width: 54.518%;\" data-widthpercent=\"55.16\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/upfnT\/dJMcafeqALo\/glFN5KKPyGn0SMHimnowg1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FupfnT%2FdJMcafeqALo%2FglFN5KKPyGn0SMHimnowg1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1004\" height=\"240\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><a href=\"https:\/\/github.com\/spring-projects\/spring-batch\/pull\/5208\">PR #5208<\/a><\/p>\n<figure id=\"og_1770120169797\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"object\" data-og-title=\"Fix ID collision in MetaDataInstanceFactory for test scenarios with @SpringBatchTest by HongYeseul &middot; Pull Request #5208 &middot; spri\" data-og-description=\"Problem Tests using StepScopeTestUtils with @SpringBatchTest failed with ClassCastException due to ID collisions. MetaDataInstanceFactory always created instances with the same default IDs (123L), ...\" data-og-host=\"github.com\" data-og-source-url=\"https:\/\/github.com\/spring-projects\/spring-batch\/pull\/5208\" data-og-url=\"https:\/\/github.com\/spring-projects\/spring-batch\/pull\/5208\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/NINUk\/dJMb8YXGIeS\/vj8kDMdJxUeulS0A8acP61\/img.png?width=1200&amp;height=600&amp;face=982_110_1036_170,https:\/\/scrap.kakaocdn.net\/dn\/bLswy2\/dJMb8RjXaBb\/NQexHkWXTwFQHYReGKT4E1\/img.png?width=1200&amp;height=600&amp;face=982_110_1036_170\"><a href=\"https:\/\/github.com\/spring-projects\/spring-batch\/pull\/5208\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/github.com\/spring-projects\/spring-batch\/pull\/5208\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/NINUk\/dJMb8YXGIeS\/vj8kDMdJxUeulS0A8acP61\/img.png?width=1200&amp;height=600&amp;face=982_110_1036_170,https:\/\/scrap.kakaocdn.net\/dn\/bLswy2\/dJMb8RjXaBb\/NQexHkWXTwFQHYReGKT4E1\/img.png?width=1200&amp;height=600&amp;face=982_110_1036_170');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">Fix ID collision in MetaDataInstanceFactory for test scenarios with @SpringBatchTest by HongYeseul &middot; Pull Request #5208 &middot; spri<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">Problem Tests using StepScopeTestUtils with @SpringBatchTest failed with ClassCastException due to ID collisions. MetaDataInstanceFactory always created instances with the same default IDs (123L), ...<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">github.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\"\ub0b4\uac00 \uc774\ub7f0 \uacf3\uc5d0 \uae30\uc5ec\ub97c \ud560 \uc218 \uc788\ub294 \uac74\uac00?\"\ub77c\ub294 \uc0dd\uac01\uc774 \ub9ce\uc774 \ub4e4\uc5c8\uc9c0\ub9cc, \uc778\uc81c\ub2d8\uc758 \uc751\uc6d0 \ub355\ubd84\uc5d0 \uc6a9\uae30\ub97c \ub0b4\uc5b4 PR\uc744 \uc62c\ub9b4 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">merge\uac00 \ub418\ub2e4<\/h3>\n<p data-ke-size=\"size16\">PR\uc744 \uc62c\ub9b0 \ud6c4, \uc57d \uc5f4\ud758 \uc815\ub3c4\uac00 \uc9c0\ub098\uace0 \uc774\uba54\uc77c \uc54c\ub9bc\uc774 \ud558\ub098 \ub0a0\uc544\uc654\uc2b5\ub2c8\ub2e4.<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 9.04.44.png\" data-origin-width=\"2366\" data-origin-height=\"1206\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/b2YbFn\/dJMcaac58vj\/u916aaPFnVXVeOKrao4R5K\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/b2YbFn\/dJMcaac58vj\/u916aaPFnVXVeOKrao4R5K\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/b2YbFn\/dJMcaac58vj\/u916aaPFnVXVeOKrao4R5K\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2YbFn%2FdJMcaac58vj%2Fu916aaPFnVXVeOKrao4R5K%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"2366\" height=\"1206\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 9.04.44.png\" data-origin-width=\"2366\" data-origin-height=\"1206\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 9.05.24.png\" data-origin-width=\"1932\" data-origin-height=\"566\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cqlteP\/dJMcacoq7zB\/I97MJKOkLoywWpwX14Uui1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cqlteP\/dJMcacoq7zB\/I97MJKOkLoywWpwX14Uui1\/img.png\" data-alt=\"\uc9dc\ub9bf\ud588\ub358 \uba54\uc778\ud14c\uc774\ub108 \ubd84\uaed8 LGTM \ubc1b\uae30\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cqlteP\/dJMcacoq7zB\/I97MJKOkLoywWpwX14Uui1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqlteP%2FdJMcacoq7zB%2FI97MJKOkLoywWpwX14Uui1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"665\" height=\"195\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-02-03 \u110b\u1169\u1112\u116e 9.05.24.png\" data-origin-width=\"1932\" data-origin-height=\"566\"\/><\/span><figcaption>\uc9dc\ub9bf\ud588\ub358 \uba54\uc778\ud14c\uc774\ub108 \ubd84\uaed8 LGTM \ubc1b\uae30<\/figcaption>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774 \ub54c, \ud300\uc6d0 \ud55c \ubd84\uacfc \ud68c\uc758 \uc911\uc774\uc5c8\ub294\ub370 \ub108\ubb34 \uae30\ubed0\uc11c \ubc14\ub85c \uc790\ub791\ud588\ub358 \uae30\uc5b5\uc774 \ub0a9\ub2c8\ub2e4. \uc0dd\uc5d0 \uccab \uc624\ud508 \uc18c\uc2a4 \uae30\uc5ec\ub77c\ub2c8.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"2140\" data-origin-height=\"950\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/boPyQg\/dJMcahJ4ych\/wBzToThVIpRo2uk4m1XC7K\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/boPyQg\/dJMcahJ4ych\/wBzToThVIpRo2uk4m1XC7K\/img.png\" data-alt=\"\uc5b4\ub5a4 \uae30\uc900\uc73c\ub85c \ud504\ub85c\ud544\uc774 \ub728\ub294 \uac74\uc9c4 \ubaa8\ub974\uaca0\uc9c0\ub9cc \ubc14\ub85c \ub450\ubc88\uc9f8 \uc5b8\uae09\uc5d0\uc11c \ud504\ub85c\ud544\uc744 \ucc3e\uc544 \ubcfc \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/boPyQg\/dJMcahJ4ych\/wBzToThVIpRo2uk4m1XC7K\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboPyQg%2FdJMcahJ4ych%2FwBzToThVIpRo2uk4m1XC7K%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"738\" height=\"328\" data-origin-width=\"2140\" data-origin-height=\"950\"\/><\/span><figcaption>\uc5b4\ub5a4 \uae30\uc900\uc73c\ub85c \ud504\ub85c\ud544\uc774 \ub728\ub294 \uac74\uc9c4 \ubaa8\ub974\uaca0\uc9c0\ub9cc \ubc14\ub85c \ub450\ubc88\uc9f8 \uc5b8\uae09\uc5d0\uc11c \ud504\ub85c\ud544\uc744 \ucc3e\uc544 \ubcfc \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4<\/figcaption>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><a href=\"https:\/\/github.com\/spring-projects\/spring-batch\/releases\/tag\/v6.0.2\">spring-batch v6.0.2 \ub9b4\ub9ac\uc988<\/a>\uc5d0\uc11c \uc800\uc758 \ucee4\ubc0b \ub0b4\uc6a9\uc774 \ubc18\uc601\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub7ec\uace0 \uadf8 \ub2e4\uc74c \uc628\ub77c\uc778 \ubaa8\uc784\uc5d0 \ucc38\uc5ec\ud588\uc744 \ub54c<\/p>\n<p data-ke-size=\"size16\">\uc778\uc81c\ub2d8\uaed8\uc11c \uc2a4\ud504\ub9c1 \ubc30\uce58 \uae30\uc5ec \ucd95\ud558\ub4dc\ub9b0\ub2e4\uba74\uc11c \uc0e4\ub77c\uc6c3 ..! \uae4c\uc9c0 \ud574\uc8fc\uc2dc\uace0 \uac10\uc0ac\ud588\uc2b5\ub2c8\ub2e4 \u314e\u314e<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"674\" data-origin-height=\"920\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/OtZ2Y\/dJMcabwhQf8\/AlNOZgCjvFs1k7BO6WpCb0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/OtZ2Y\/dJMcabwhQf8\/AlNOZgCjvFs1k7BO6WpCb0\/img.png\" data-alt=\"\ud55c\uad6d \uc2a4\ud504\ub9c1 \uc0ac\uc6a9\uc790 \ubaa8\uc784\uc5d0\uc11c\ub3c4 \ub9b4\ub9ac\uc988 \ub410\uc744 \ub54c \uc5b8\uae09\ud574\uc8fc\uc2e0 \ubd84\ub3c4 \uacc4\uc154\uc11c \ubc18\uac00\uc6e0\ub2f5\ub2c8\ub2e4.\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/OtZ2Y\/dJMcabwhQf8\/AlNOZgCjvFs1k7BO6WpCb0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOtZ2Y%2FdJMcabwhQf8%2FAlNOZgCjvFs1k7BO6WpCb0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"339\" height=\"463\" data-origin-width=\"674\" data-origin-height=\"920\"\/><\/span><figcaption>\ud55c\uad6d \uc2a4\ud504\ub9c1 \uc0ac\uc6a9\uc790 \ubaa8\uc784\uc5d0\uc11c\ub3c4 \ub9b4\ub9ac\uc988 \ub410\uc744 \ub54c \uc5b8\uae09\ud574\uc8fc\uc2e0 \ubd84\ub3c4 \uacc4\uc154\uc11c \ubc18\uac00\uc6e0\ub2f5\ub2c8\ub2e4.<\/figcaption>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ubb54\uac00 \uc624\ud508\uc18c\uc2a4 \ubaa8\uc784\uc774 \uc9c4\ud589\ub420 \ub54c\ub294 spring-batch\ub97c \uae30\uc5ec\ud558\uaca0\ub2e4\ub294 \uae00\uc740 \ubabb \ubcf8 \uac83 \uac19\uc740\ub370\ub3c4 \ub9ce\uc740 \uad00\uc2ec\uc744 \uac00\uc838\uc8fc\uc154\uc11c \uac10\uc0ac\ud588\ub358 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\ud2b9\ud788 \uc778\uc81c\ub2d8\uaed8\uc11c \ud574\ub2f9 \ud504\ub85c\uc81d\ud2b8\uc758 \uacbd\uc6b0 \uba54\uc778\ud14c\uc774\ub108 \ud55c \ubd84\uaed8\uc11c \uc804\ubd80 \uac80\ud1a0\ud558\uace0 \uacc4\uc2dc\uae30 \ub54c\ubb38\uc5d0 \uba38\uc9c0\uae4c\uc9c0 \uc5c4\uccad\ub09c \uc2dc\uac04\uc774 \uac78\ub9ac\ub294 \uacbd\uc6b0\uac00 \uc7a6\ub2e4\ub294\ub370 \uc6b4\ub3c4 \uc5c4\uccad \uc88b\uc558\ub358 \ucf00\uc774\uc2a4\ub77c\uace0 \ud574\uc8fc\uc168\uc2b5\ub2c8\ub2e4.  <\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">\uadf8\ub9ac\uace0...<\/h2>\n<p data-ke-size=\"size16\">\uc774\ubc88 \uae30\uc5ec\ub85c \"\uc624\ud508\uc18c\uc2a4\uc5d0 \uae30\uc5ec\ud574\ubcf4\uace0 \uc2f6\ub2e4\"\ub77c\ub294 \uba87 \ub144\uac04\uc758 \uc219\uc81c(??)\ub97c \ud558\ub098 \ub118\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\ub610\ud55c \uae30\uc5ec\ud558\ub294 \uac83 \uc790\uccb4\uc5d0 \ub300\ud55c \ub450\ub824\uc6c0\uc774 \ub9ce\uc774 \uc5c6\uc5b4\uc84c\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc55e\uc73c\ub85c\ub294 \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\uc5d0 \uae30\uc5ec\ud558\uba74\uc11c, \ucf54\ub4dc\ub97c \ub9ce\uc774 \uc77d\uace0 \ub808\uac70\uc2dc\ud55c \ud504\ub85c\uc81d\ud2b8\ub3c4 \ube60\ub974\uac8c \ud30c\uc545\ud560 \uc218 \uc788\ub294 \uac1c\ubc1c\uc790\uac00 \ub418\uace0 \uc2f6\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uae30\uc5ec\ub97c \ud1b5\ud574\uc11c \uc6b4\uc601\uc9c4 \uc5ed\ud560\uae4c\uc9c0 \ub9e1\uc744 \uc218 \uc788\ub294 \uc0ac\ub78c\uc774 \ub418\uace0 \uc2f6\ub2e4\ub294 \ubaa9\ud45c\ub3c4 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc774 \uacfc\uc815 \uc804\ubc18\uc5d0\uc11c \uc5c4\uccad\ub09c \ub3c4\uc6c0\uc744 \uc8fc\uc2e0 \uc6b4\uc601\uc9c4 \ubd84\ub4e4, \ud2b9\ud788 <b>\uc778\uc81c\ub2d8<\/b>\uaed8 \uc815\ub9d0 \ud070 \uac10\uc0ac\uc758 \uc778\uc0ac\ub97c \ub4dc\ub9ac\uace0 \uc2f6\uc2b5\ub2c8\ub2e4. \ub355\ubd84\uc5d0 \uc624\ud508\uc18c\uc2a4 \uae30\uc5ec\uc5d0 \ub300\ud55c \uc790\uc2e0\uac10\uc744 \uac00\uc9c8 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub2e4\uc74c \uae30\uc218\uc5d0\ub3c4, \uadf8 \ub2e4\uc74c \uae30\uc218\uc5d0\ub3c4 \ubc18\ub4dc\uc2dc \ucc38\uc5ec\ud558\uace0 \uc2f6\uc740 \ub9c8\uc74c\uc785\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc624\ud508 \uc18c\uc2a4\uc5d0 \uc870\uae08\uc774\ub77c\ub3c4 \uae30\uc5ec\ud558\uace0 \uc2f6\ub2e4\ub294 \ub9c8\uc74c\uc774 \uc788\ub2e4\uba74 \uaf2d \ub2e4\ub4e4 \ucc38\uc5ec \ud574\ubcf4\uc168\uc73c\uba74 \uc88b\uaca0\uc2b5\ub2c8\ub2e4!  <\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc77d\uc5b4\uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4.<\/p>","category":"\uae30\ud0c0\/\uc77c\uae30","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/99","comments":"https:\/\/yeseul-dev.tistory.com\/99#entry99comment","pubDate":"Tue, 3 Feb 2026 21:25:13 +0900"},{"title":"Spring Boot\uc5d0\uc11c HTTP \uc694\uccad\/\uc751\ub2f5 \ub85c\uae45 \ud544\ud130 \uad6c\ud604\ud558\uae30","link":"https:\/\/yeseul-dev.tistory.com\/98","description":"<h2 data-ke-size=\"size26\">\ubc30\uacbd<\/h2>\n<p data-ke-size=\"size16\">\uc11c\ube44\uc2a4\ub97c \uc6b4\uc601\ud558\uba74\uc11c \ub514\ubc84\uae45 \uc2dc \uc5b4\ub824\uc6c0\uc744 \uacaa\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud2b9\ud788 <b>\uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\uc558\uc9c0\ub9cc \uc624\ub958\uc778 \uacbd\uc6b0<\/b>\ub97c \ud30c\uc545\ud558\uae30 \uc5b4\ub824\uc6e0\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc0ac\uc6a9\uc790\ub294 A \uc635\uc158\uc744 \uc120\ud0dd\ud588\ub2e4\uace0 \uc0dd\uac01\ud588\uc73c\ub098 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc571\uc5d0\uc11c \uc798\ubabb \ucc98\ub9ac\ub418\uc5b4 B\ub85c \uc804\uc1a1\ub418\ub294 \uacbd\uc6b0\uac00 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \uc0c1\ud669\uc5d0\uc11c\ub294 \uc11c\ubc84 \uc785\uc7a5\uc5d0\uc11c \uc815\uc0c1\uc801\uc73c\ub85c \ucc98\ub9ac\ub418\uae30 \ub54c\ubb38\uc5d0 \uc608\uc678 \ub85c\uadf8\uac00 \ub0a8\uc9c0 \uc54a\uc9c0\ub9cc, \uc2e4\uc81c\ub85c\ub294 \uc0ac\uc6a9\uc790 \uc758\ub3c4\uc640 \ub2e4\ub978 \uacb0\uacfc\uac00 \ubc1c\uc0dd\ud558\ub294 \ubb38\uc81c\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><br \/>\uae30\uc874\uc5d0\ub294 \uc0ac\uc6a9\uc790\uac00 \uc5b4\ub5a4 \uc694\uccad\uc744 \ud588\ub294\uc9c0 \ub85c\uadf8 \ud3ec\ub9f7\uc774 \ub530\ub85c \uc815\ud574\uc838 \uc788\uc9c0 \uc54a\uc544 \ud544\uc694\ud55c \uc2dc\uc810\uc5d0 \uac1c\ubcc4\uc801\uc73c\ub85c \ub85c\uadf8\ub97c \ucd94\uac00\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\uc5c5\ud588\uae30 \ub54c\ubb38\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc81c\uc810\uc774 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>API \uc694\uccad\/\uc751\ub2f5 \ud750\ub984\uc744 \ucd94\uc801\ud558\uae30 \uc5b4\ub824\uc6c0<\/li>\n<li>\uc77c\uad00\ub418\uc9c0 \uc54a\uc740 \ub85c\uadf8 \ud615\uc2dd<\/li>\n<li>\ubb38\uc81c \ubc1c\uc0dd \uc2dc \uc6d0\uc778 \ud30c\uc545\uc5d0 \uc2dc\uac04\uc774 \uc624\ub798 \uac78\ub9bc<\/li>\n<li>\uc0c8\ub85c\uc6b4 \ub85c\uadf8\uac00 \ud544\uc694\ud558\ub2e4\uba74 \uc7ac\ubc30\ud3ec\uac00 \ud544\uc694\ud568<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\ud574\uacb0 \ubc29\ubc95<\/h2>\n<h3 data-ke-size=\"size23\">HTTP \uc694\uccad\uc758 \ud2b9\uc131\uacfc \ubb38\uc81c\uc810<\/h3>\n<p data-ke-size=\"size16\">HTTP \uc694\uccad\uc758 InputStream\uc740 <b>\ud55c \ubc88\ub9cc \uc77d\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4<\/b>.<\/p>\n<p data-ke-size=\"size16\">\ub530\ub77c\uc11c \ud544\ud130\uc5d0\uc11c body\ub97c \uc77d\uc5b4\ubc84\ub9ac\uba74 \uc2e4\uc81c \ucee8\ud2b8\ub864\ub7ec\uc5d0\uc11c\ub294 \ud574\ub2f9 \ub0b4\uc6a9\uc744 \uc77d\uc744 \uc218 \uc5c6\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">ContentCachingWrapper \ud65c\uc6a9<\/h3>\n<p data-ke-size=\"size16\">Spring\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ub2e4\uc74c \ud074\ub798\uc2a4\ub4e4\uc744 \uc0ac\uc6a9\ud558\uba74 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"ebnf\"><code>ContentCachingRequestWrapper\nContentCachingResponseWrapper\n<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774 Wrapper\ub4e4\uc740 \uc694\uccad\/\uc751\ub2f5\uc758 \ub0b4\uc6a9\uc744 <b>\ub0b4\ubd80 \ubc84\ud37c\uc5d0 \uce90\uc2f1<\/b>\ud558\uc5ec, \uc5ec\ub7ec \ubc88 \uc77d\uc744 \uc218 \uc788\ub3c4\ub85d \ud574\uc90d\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">LoggingFilter \uad6c\ud604<\/h3>\n<p data-ke-size=\"size16\">\ubaa8\ub4e0 API \uc694\uccad\uc774 LoggingFilter\ub97c \uac70\uce58\ub3c4\ub85d \uc124\uc815\ud558\uace0, Wrapper\ub97c \ud65c\uc6a9\ud558\uc5ec \ub2e4\uc74c \uc815\ubcf4\ub4e4\uc744 \ub85c\uadf8\ub85c \ub0a8\uacbc\uc2b5\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>HTTP Method<\/li>\n<li>\uc694\uccad URL<\/li>\n<li>\uc694\uccad Body<\/li>\n<li>\uc751\ub2f5 Body<\/li>\n<li>HTTP \uc0c1\ud0dc \ucf54\ub4dc<\/li>\n<li>API \uc2e4\ud589 \uc2dc\uac04<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\uad6c\ud604 \uacb0\uacfc<\/h2>\n<h3 data-ke-size=\"size23\">\ub85c\uadf8 \uc608\uc2dc<\/h3>\n<pre class=\"routeros\"><code>[INFO] [GET] \/api\/v1\/products - Status: 200 - 45ms\nRequest: {\"language\": \"ko\"}\nResponse: {\"products\": [...]}\n<\/code><\/pre>\n<h3 data-ke-size=\"size23\">\uc7a5\uc810<\/h3>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li><b>\uc77c\uad00\ub41c \ub85c\uadf8 \ud615\uc2dd<\/b>: \ubaa8\ub4e0 API\uc5d0 \ub300\ud574 \ub3d9\uc77c\ud55c \ud615\uc2dd\uc73c\ub85c \ub85c\uae45<\/li>\n<li><b>\ub514\ubc84\uae45 \ud6a8\uc728\uc131 \ud5a5\uc0c1<\/b>: \uc694\uccad\/\uc751\ub2f5\uc744 \ud55c\ub208\uc5d0 \ud655\uc778 \uac00\ub2a5<\/li>\n<li><b>CloudWatch \ud65c\uc6a9<\/b>: \ub85c\uadf8 \uac80\uc0c9 \ubc0f \ud544\ud130\ub9c1\uc774 \uc6a9\uc774\ud574\uc9d0<\/li>\n<li><b>\uc131\ub2a5 \ubaa8\ub2c8\ud130\ub9c1<\/b>: API\ubcc4 \uc2e4\ud589 \uc2dc\uac04 \ucd94\uc801 \uac00\ub2a5<\/li>\n<li><b>\uc720\uc800\ubcc4 \ubaa8\ub2c8\ud130\ub9c1<\/b>: API\ubcc4 \uc5b4\ub5a4 \uc0ac\uc6a9\uc790\uac00 \uc5b4\ub5a4 \uc694\uccad\uc744 \ud588\ub294\uc9c0 \ucd94\uc801 \uac00\ub2a5<\/li>\n<\/ol>\n<p data-ke-size=\"size16\">LoggingFilter\ub9cc INFO \ub808\ubca8 \uc720\uc9c0\ud558\uace0<\/p>\n<p data-ke-size=\"size16\">\ub2e4\ub978 \ub85c\uac70\ub4e4\uc740 WARN \ub610\ub294 ERROR \ub808\ubca8\ub85c \uc0c1\ud5a5 \uc870\uc815\ud55c\ub2e4\uba74 \ubd88\ud544\uc694\ud55c \ub85c\uadf8 \ucd9c\ub825 \ucd5c\uc18c\ud654\ub85c \uc131\ub2a5 \uac1c\uc120\ub3c4 \ud560 \uc218 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\ub9c8\uce58\uba70<\/h2>\n<p data-ke-size=\"size16\">\uac04\ub2e8\ud55c \ud544\ud130 \uad6c\ud604\ub9cc\uc73c\ub85c\ub3c4 \ub514\ubc84\uae45\uacfc \ubaa8\ub2c8\ud130\ub9c1\uc774 \ud6e8\uc52c \uc218\uc6d4\ud574\uc84c\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><span>\uc774\uc81c\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8-\uc11c\ubc84 \uac04 \ub370\uc774\ud130 \ubd88\uc77c\uce58\ub098 \uc608\uc0c1\uce58 \ubabb\ud55c \ub3d9\uc791\uc744 \ub85c\uadf8\ub9cc\uc73c\ub85c\ub3c4 \ube60\ub974\uac8c \ud30c\uc545\ud560 \uc218 \uc788\uc5b4<\/span><\/p>\n<p data-ke-size=\"size16\"><span>\uc2e4\uc81c \uc11c\ube44\uc2a4 \ud658\uacbd\uc5d0\uc11c\uc758 \uc774\uc288 \ub300\uc751 \uc2dc\uac04\uc774 \ud06c\uac8c \ub2e8\ucd95\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub610\ud55c \uc608\uc804\uc5d0\ub294 \uc774\uc288 \ud30c\uc545\uc744 \uc704\ud574 \uc5ec\ub7ec \uacf3\uc5d0 \uc784\uc2dc \ub85c\uadf8\ub97c \ucd94\uac00\ud558\uace0 \uc7ac\ubc30\ud3ec\ud574\uc57c \ud588\ub2e4\uba74,&nbsp;<br \/>\uc774\uc81c\ub294&nbsp;CloudWatch\uc5d0\uc11c&nbsp;\uc694\uccad\/\uc751\ub2f5\uc744&nbsp;\ubc14\ub85c&nbsp;\ud655\uc778\ud558\uba70&nbsp;\ubb38\uc81c\ub97c&nbsp;\ud574\uacb0\ud560&nbsp;\uc218&nbsp;\uc788\uac8c&nbsp;\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud558\ub098\uc758 \uac1c\uc120\ub9cc\uc73c\ub85c \ub9ce\uc740 \uac83\ub4e4\uc744 \ud3b8\ub9ac\ud558\uac8c \ub514\ubc84\uae45 \ud560 \uc218 \uc788\uac8c \ub418\uc5b4 \ub9e4\uc6b0 \ub9cc\uc871\ud55c \uac1c\uc120 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4  <\/p>","category":"\ud504\ub85c\uc81d\ud2b8\/\ud504\ub85c\uc81d\ud2b8 \uacfc\uc815","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/98","comments":"https:\/\/yeseul-dev.tistory.com\/98#entry98comment","pubDate":"Sat, 3 Jan 2026 17:01:06 +0900"},{"title":"[K-DEVCON] \uc2dc\uc2a4\ud15c \ub514\uc790\uc778 \uc2a4\ud130\ub5142 - 3\uc8fc\ucc28 \ud6c4\uae30(3\uc7a5 \uad6c\uae00 \ub9f5)","link":"https:\/\/yeseul-dev.tistory.com\/97","description":"<blockquote data-ke-style=\"style3\">\uc774 \uae00\uc740 2025\ub144 12\uc6d4\ubd80\ud130 K-DEVCON\uc5d0\uc11c \uc9c4\ud589\ub41c \uc2dc\uc2a4\ud15c \ub514\uc790\uc778 \uc2a4\ud130\ub514 \uc2dc\uc98c2\uc758 \ub0b4\uc6a9\uc744 \uc815\ub9ac\ud55c \uae00\uc785\ub2c8\ub2e4.<br \/><br \/>'\uac00\uc0c1 \uba74\uc811 \uc0ac\ub840\ub85c \ubc30\uc6b0\ub294 \ub300\uaddc\ubaa8 \uc2dc\uc2a4\ud15c \uc124\uacc4 \uae30\ucd08 2\uad8c'\uc744 \ud568\uaed8 \uc77d\uace0 \ud1a0\ub860\ud558\ub294 \ud615\uc2dd\uc73c\ub85c \uc9c4\ud589\ub418\ub294 \uc2a4\ud130\ub514\ub85c,<br \/>\ucc45 \ub0b4\uc6a9\uc744 \uadf8\ub300\ub85c \uc62e\uae34 \uac83\uc774 \uc544\ub2c8\ub77c \uc2a4\ud130\ub514\uc5d0\uc11c \ub17c\uc758\ub41c \ub0b4\uc6a9\uacfc \uc81c\uac00 \ucd94\uac00\ub85c \ucc3e\uc544\ubcf8 \ub0b4\uc6a9\uc744 \ud568\uaed8 \ub2f4\uc558\uc2b5\ub2c8\ub2e4.<br \/><br \/>\uc88b\uc740 \uc2a4\ud130\ub514\ub97c \ub9cc\ub4e4\uc5b4\uc8fc\uc2e0 K-DEVCON \uc6b4\uc601\uc9c4 \ubd84\ub4e4\uaed8 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4!<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\ub4e4\uc5b4\uac00\uba70<\/h2>\n<p data-ke-size=\"size16\">2025\ub144 12\uc6d4\ubd80\ud130 K-DEVCON\uc5d0\uc11c \uc9c4\ud589\ub41c \uc2dc\uc2a4\ud15c \ub514\uc790\uc778 \uc2a4\ud130\ub514 \uc2dc\uc98c2\uc5d0 \ucc38\uc5ec\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">'\uac00\uc0c1 \uba74\uc811 \uc0ac\ub840\ub85c \ubc30\uc6b0\ub294 \ub300\uaddc\ubaa8 \uc2dc\uc2a4\ud15c \uc124\uacc4 \uae30\ucd08 2\uad8c'\uc744 \ud568\uaed8 \uc77d\uace0 \ud1a0\ub860\ud558\ub294 \uc2a4\ud130\ub514\uc778\ub370\uc694, \uc774\ubc88 \uc8fc \uc8fc\uc81c\ub294 3\uc7a5 - \uad6c\uae00 \ub9f5\uc774\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc2a4\ud130\ub514\ub97c \ub9c8\uce58\uace0 \uad81\uae08\ud588\ub358 \ubd80\ubd84\ub4e4\uc744 \uc9c1\uc811 \ucc3e\uc544\ubcf4\uba74\uc11c \uc815\ub9ac\ud574\ubcf4\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\uc65c \uc9c0\ub3c4 \ud0c0\uc77c\uc740 \uc774\ubbf8\uc9c0\ub85c \uc81c\uacf5\ud558\ub294 \uac83\uc77c\uae4c?<\/h2>\n<p data-ke-size=\"size16\">\uc9c0\ub3c4\ub294 N&times;N\uac1c\uc758 \uc791\uc740 \ud0c0\uc77c(tile)\ub4e4\uc774 \ubaa8\uc5ec\uc11c \ud558\ub098\uc758 \ud070 \uc9c0\ub3c4\ub97c \ub9cc\ub4dc\ub294 \uad6c\uc870\uc778\ub370\uc694,<\/p>\n<p data-ke-size=\"size16\">\uc774 \ud0c0\uc77c\ub4e4\uc774 \uc8fc\ub85c PNG \uac19\uc740 \uc774\ubbf8\uc9c0 \ud615\uc2dd\uc73c\ub85c \uc81c\uacf5\ub41c\ub2e4\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><span style=\"font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;\">\uac8c\uc784\uc5d0\uc11c\ub294 \ubca1\ud130\ub97c \ub9ce\uc774 \uc4f0\ub294\ub370 \uc65c \uad6c\uae00 \ub9f5\uc740 PNG \uc774\ubbf8\uc9c0 \ud0c0\uc77c\uc744 \uc4f8\uae4c? \ub77c\ub294 \uc0dd\uac01\uc774 \ub4e4\uc5c8\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p data-ke-size=\"size16\">\ucc3e\uc544\ubcf4\ub2c8 \ub798\uc2a4\ud130 \ud0c0\uc77c\uacfc \ubca1\ud130 \ud0c0\uc77c\uc740 \uac01\uac01 \uba85\ud655\ud55c \uc7a5\ub2e8\uc810\uc774 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"3360\" data-origin-height=\"1715\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/ef7W5D\/dJMcaaDVB4T\/mueKheq9tqEEgKgCpMwcq0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/ef7W5D\/dJMcaaDVB4T\/mueKheq9tqEEgKgCpMwcq0\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/ef7W5D\/dJMcaaDVB4T\/mueKheq9tqEEgKgCpMwcq0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fef7W5D%2FdJMcaaDVB4T%2FmueKheq9tqEEgKgCpMwcq0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"3360\" height=\"1715\" data-origin-width=\"3360\" data-origin-height=\"1715\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\ub798\uc2a4\ud130 \ud0c0\uc77c(PNG\/JPG)\uc758 \uc7a5\uc810:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ubaa8\ub4e0 \ub514\ubc14\uc774\uc2a4\uc5d0\uc11c \ub80c\ub354\ub9c1\uc774 \uc27d\ub2e4 - \uadf8\ub0e5 \uc774\ubbf8\uc9c0\ub2c8\uae4c<\/li>\n<li>\uc11c\ubc84\uc5d0\uc11c \ubbf8\ub9ac \ub80c\ub354\ub9c1\ud574\ub450\uae30 \ub54c\ubb38\uc5d0 \ud074\ub77c\uc774\uc5b8\ud2b8 \ubd80\ud558\uac00 \uc801\ub2e4<\/li>\n<li>\ubcf5\uc7a1\ud55c \uc2a4\ud0c0\uc77c\uacfc \ub514\ud14c\uc77c \ud45c\ud604\uc774 \uc790\uc720\ub86d\ub2e4<\/li>\n<\/ul>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"1280\" data-origin-height=\"502\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/d63njK\/dJMcacaFZK8\/1Mea9XQQejJbSfRFAUx1d0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/d63njK\/dJMcacaFZK8\/1Mea9XQQejJbSfRFAUx1d0\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/d63njK\/dJMcacaFZK8\/1Mea9XQQejJbSfRFAUx1d0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd63njK%2FdJMcacaFZK8%2F1Mea9XQQejJbSfRFAUx1d0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1280\" height=\"502\" data-origin-width=\"1280\" data-origin-height=\"502\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\ubca1\ud130 \ud0c0\uc77c\uc758 \uc7a5\uc810:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ud30c\uc77c \ud06c\uae30\uac00 20-50% \ub354 \uc791\ub2e4<\/li>\n<li>\ud655\ub300\/\ucd95\uc18c\ud574\ub3c4 \uae54\ub054\ud558\ub2e4 (\ud53d\uc140\ub808\uc774\uc158 \uc5c6\uc74c)<\/li>\n<li>\uc2a4\ud0c0\uc77c\uc744 \ub3d9\uc801\uc73c\ub85c \ubcc0\uacbd\ud560 \uc218 \uc788\ub2e4<\/li>\n<li>\ud558\uc9c0\ub9cc... \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \uc2e4\uc2dc\uac04 \ub80c\ub354\ub9c1\uc774 \ud544\uc694\ud558\ub2e4 &rarr; \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \ud558\ub4dc\uc6e8\uc5b4 \uc131\ub2a5\uc774 \uc88b\uc544\uc57c \ud55c\ub2e4 <s>&rarr; \uac8c\uc784\uc744 \ud560 \ub54c \uc88b\uc740 PC\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\ub3c4 \uc774 \uacbd\uc6b0\uc5d0 \ud3ec\ud568\ub418\ub294 \uac8c \uc544\ub2d0\uae4c.......?<\/s><\/li>\n<\/ul>\n<p data-ke-size=\"size16\">\uacb0\uad6d <b>\uc11c\ubc84 \ub9ac\uc18c\uc2a4 vs \ud074\ub77c\uc774\uc5b8\ud2b8 \ub9ac\uc18c\uc2a4\uc758 \ud2b8\ub808\uc774\ub4dc\uc624\ud504<\/b>\uc600\uc2b5\ub2c8\ub2e4. \uad6c\uae00 \ub9f5\ucc98\ub7fc \uc218\uc5b5 \uba85\uc774 \uc0ac\uc6a9\ud558\ub294 \uc11c\ube44\uc2a4\ub77c\uba74, \uc11c\ubc84\uc5d0\uc11c \ud55c \ubc88 \ub80c\ub354\ub9c1\ud574\uc11c CDN\uc5d0 \uc62c\ub824\ub450\uace0 \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \ub2e8\uc21c\ud788 \uc774\ubbf8\uc9c0\ub9cc \ubc1b\uc544 \ud45c\uc2dc\ud558\ub294 \uac8c \ud6e8\uc52c \ud6a8\uc728\uc801\uc774\uaca0\uc8e0. \ud2b9\ud788 \uc800\uc0ac\uc591 \ub514\ubc14\uc774\uc2a4\uae4c\uc9c0 \uace0\ub824\ud558\uba74 \ub798\uc2a4\ud130 \ud0c0\uc77c\uc774 \ud569\ub9ac\uc801\uc778 \uc120\ud0dd\uc774\ub77c\ub294 \uc0dd\uac01\uc774 \ub4e4\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub798\uc11c \uacbd\ub85c \uc548\ub0b4\uc6a9 \ud0c0\uc77c\uc740 \ubca1\ud130 \uae30\ubc18(\uc774\uc9c4 \ud30c\uc77c)\uc73c\ub85c \ub530\ub85c \uc81c\uacf5\ud558\ub294 \uad6c\uc870\uc778 \uac83 \uac19\uc544 \ubcf4\uc785\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\uad00\ub828 \uc544\ud2f0\ud074:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><a href=\"https:\/\/docs.maptiler.com\/guides\/general\/raster-vs-vector-map-tiles-what-is-the-difference-between-the-two-data-types\/\">Raster vs Vector Map Tiles - MapTiler<\/a><\/li>\n<li><a href=\"https:\/\/docs.stadiamaps.com\/guides\/switching-your-maps-from-raster-to-vector-tiles\/\">Switching from Raster to Vector Maps - Stadia Maps<\/a><\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">HTTP Keep-Alive, \uc0dd\uac01\ubcf4\ub2e4 \uc911\uc694\ud558\ub2e4<\/h2>\n<p data-ke-size=\"size16\">\ucc45\uc5d0\uc11c \uc704\uce58 \uc11c\ube44\uc2a4\uac00 HTTP\ub97c keep-alive \uc635\uc158\uacfc \ud568\uaed8 \uc0ac\uc6a9\ud558\uba74 <b>\ud6a8\uc728\uc801\uc774\ub2e4<\/b>\ub77c\uace0 \ub098\uc640\uc11c \"\uc774\uac8c \uc65c \ud6a8\uc728\uc801\uc778\uac70\uc9c0?\" \uc2f6\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>HTTP Keep-Alive<\/b>\ub780 \ud55c \ubc88 \uc5f0\uacb0\ud55c TCP \ucee4\ub125\uc158\uc744 \uc5ec\ub7ec HTTP \uc694\uccad\/\uc751\ub2f5\uc5d0 \uc7ac\uc0ac\uc6a9\ud558\ub294 \uac83\uc778\ub370\uc694, \ucc28\uc774\ub97c \ube44\uad50\ud574\ubcf4\uba74 \uc774\ub807\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>Keep-Alive \uc5c6\uc774 \ub9e4\ubc88 \uc0c8 \uc5f0\uacb0\uc744 \ub9cc\ub4e4\uba74<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc694\uccad 1\uac1c = TCP \uc5f0\uacb0 \uc0dd\uc131 + \uc694\uccad + \uc751\ub2f5 + TCP \uc5f0\uacb0 \uc885\ub8cc<\/li>\n<li>\uc694\uccad 10\uac1c = \uc704\uc758 \uacfc\uc815 &times; 10<\/li>\n<\/ul>\n<p data-ke-size=\"size16\"><b>Keep-Alive\ub97c \uc4f0\uba74<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>TCP \uc5f0\uacb0 \uc0dd\uc131 (1\ud68c) + \uc694\uccad 10\uac1c + \uc751\ub2f5 10\uac1c + TCP \uc5f0\uacb0 \uc885\ub8cc (1\ud68c)<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud2b9\ud788 SSL\/TLS\ub97c \uc4f0\ub294 HTTPS\uc5d0\uc11c\ub294 \ud578\ub4dc\uc170\uc774\ud06c \ube44\uc6a9\uc774 \ub354 \ud06c\uae30 \ub54c\ubb38\uc5d0 \ud6a8\uacfc\uac00 \uc0c1\ub2f9\ud558\ub2e4\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc704\uce58 \uc815\ubcf4\ucc98\ub7fc \uc9e7\uc740 \uc8fc\uae30\ub85c \uacc4\uc18d \uc5c5\ub370\uc774\ud2b8\ub418\ub294 \ub370\uc774\ud130\uc5d0\ub294 \ud544\uc218\uc801\uc778 \uae30\ub2a5\uc774\uc5c8\ub358 \uac70\uc8e0.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ucc38\uace0\ub85c HTTP\/1.1\ubd80\ud130\ub294 \uae30\ubcf8\uac12\uc774 keep-alive\uc785\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">HTTP\/1.0\uc5d0\uc11c\ub294 \uba85\uc2dc\uc801\uc73c\ub85c <code>Connection: keep-alive<\/code> \ud5e4\ub354\ub97c \ubcf4\ub0b4\uc57c \ud588\ub2e4\uace0 \ud558\ub124\uc694.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\uad00\ub828 \uc544\ud2f0\ud074:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP_persistent_connection\">HTTP persistent connection - Wikipedia<\/a><\/li>\n<li><a href=\"https:\/\/www.imperva.com\/learn\/performance\/http-keep-alive\/\">What is HTTP Keep-Alive? - Imperva<\/a><\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">\uadf8\ub807\ub2e4\uba74 HTTP\/3\ub294?<\/h3>\n<p data-ke-size=\"size16\">\uc2a4\ud130\ub514 \uc911\uc5d0 HTTP\/3 \uc598\uae30\uac00 \ub098\uc654\ub294\ub370, \uad6c\uae00\uc774 \ub9cc\ub4e0 QUIC \ud504\ub85c\ud1a0\ucf5c \uae30\ubc18\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">UDP \ud3ec\ud2b8\ub97c \ud558\ub098 \ub354 \uc5f4\uc5b4\uc57c \ud55c\ub2e4\ub294 \uac8c \uc778\uc0c1\uc801\uc774\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>HTTP\/3\uc758 \ud575\uc2ec:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>TCP \ub300\uc2e0 <b>UDP \uae30\ubc18<\/b><\/li>\n<li>Head-of-line blocking \ubb38\uc81c \ud574\uacb0<\/li>\n<li>\uae30\ubcf8 \uc554\ud638\ud654 (TLS 1.3 \ub0b4\uc7a5)<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">YouTube\uc5d0\uc11c \uc774\ubbf8 \uc0ac\uc6a9 \uc911\uc774\ub77c\uace0 \ud558\ub294\ub370, HTTP\/3\ub294 \uc544\uc9c1 \uc81c\uac00 \uc798 \ubab0\ub77c\uc11c \ub098\uc911\uc5d0 \uc880 \ub354 \uacf5\ubd80\ud574\ubd10\uc57c \ud560 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\uac00\uc7a5 \uad81\uae08\ud588\ub358 \uac83: \uacbd\ub85c \uc54c\uace0\ub9ac\uc998\uc774 \uacfc\uc5f0 \ud2b8\ub798\ud53d\uc744 \ubd84\uc0b0\uc2dc\ud0ac\uae4c?<\/h2>\n<p data-ke-size=\"size16\">\uc774\uac8c \uc81c\uc77c \uad81\uae08\ud588\ub358 \ubd80\ubd84\uc785\ub2c8\ub2e4.<\/p>\n<blockquote data-ke-style=\"style1\">\n<p data-ke-size=\"size16\"><b>\"\ubaa8\ub450\uac00 \uac19\uc740 \uc2dc\uac04\uc5d0 \ub124\ube44\uac8c\uc774\uc158\uc744 \ucf1c\uba74 \uc804\ubd80 A \uacbd\ub85c\ub85c \ubab0\ub9ac\ub294 \uac70 \uc544\ub2cc\uac00?\"<\/b><\/p>\n<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><br \/>\ucc3e\uc544\ubcf4\ub2c8 \uad6c\uae00 \ub9f5\uc758 \uacbd\ub85c \uc120\ud0dd \ubc29\uc2dd\uc740 \uc0dd\uac01\ubcf4\ub2e4 \ud6e8\uc52c \uc815\uad50\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">Google Maps\uc758 \uacbd\ub85c \uc120\ud0dd \ubc29\uc2dd<\/h3>\n<p data-ke-size=\"size16\"><b>1. \uacfc\uac70 \ud328\ud134 + \uc2e4\uc2dc\uac04 \uad50\ud1b5 \uc0c1\ud669 \uacb0\ud569<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uacfc\uac70 \ub370\uc774\ud130: \"280\ubc88 \uace0\uc18d\ub3c4\ub85c\ub294 \uc624\uc804 6-7\uc2dc\uc5d0 \uc2dc\uc18d 65mph, \uc624\ud6c4\uc5d0\ub294 15-20mph\"<\/li>\n<li>\uc2e4\uc2dc\uac04 \ub370\uc774\ud130: \uc9c0\uae08 \uc774 \ub3c4\ub85c\uc758 \uad50\ud1b5 \uc0c1\ud669<\/li>\n<\/ul>\n<p data-ke-size=\"size16\"><b>2. \uba38\uc2e0\ub7ec\ub2dd\uc73c\ub85c \ubbf8\ub798 \uad50\ud1b5 \uc608\uce21 (10-20\ubd84 \ud6c4)<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>DeepMind\uc640 \ud611\uc5c5\ud55c Graph Neural Networks \ud65c\uc6a9<\/li>\n<li>ETA<span style=\"color: #333333; text-align: start;\">(\ub3c4\ucc29 \uc608\uc815 \uc2dc\uac04 - Estimated Time of Arrival)<span>&nbsp;<\/span><\/span>\uc815\ud655\ub3c4\ub97c 97% \uc774\uc0c1\uc73c\ub85c \uac1c\uc120<\/li>\n<li>\ud2b9\ud788 \ubca0\ub97c\ub9b0, \uc790\uce74\ub974\ud0c0, \uc0c1\ud30c\uc6b8\ub8e8, \uc2dc\ub4dc\ub2c8, \ub3c4\ucfc4, \uc6cc\uc2f1\ud134 DC\uc5d0\uc11c \ud070 \uac1c\uc120<\/li>\n<\/ul>\n<p data-ke-size=\"size16\"><b>3. \ub2e4\uc591\ud55c \uc694\uc18c \uace0\ub824<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ub3c4\ub85c \ud488\uc9c8 (\ud3ec\uc7a5\/\ube44\ud3ec\uc7a5\/\uc790\uac08\/\uc9c4\ud759)<\/li>\n<li>\ub3c4\ub85c \ud06c\uae30\uc640 \uc9c1\uc9c4\uc131<\/li>\n<li>\uc2e4\uc2dc\uac04 \uc0ac\uace0\/\uacf5\uc0ac \uc815\ubcf4<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\ud575\uc2ec\uc740 \"\uc608\uce21\"<\/b><\/p>\n<pre class=\"angelscript\"><code>\ud604\uc7ac: A \uacbd\ub85c\uac00 \uac00\uc7a5 \ube60\ub984 (10\ubd84)\n30\ubd84 \ud6c4 \uc608\uce21: A \uacbd\ub85c\uc5d0 \uc815\uccb4 \ubc1c\uc0dd \uc608\uc0c1 (25\ubd84)\n            B \uacbd\ub85c\ub294 \uc5ec\uc804\ud788 \uc6d0\ud65c (15\ubd84)\n&rarr; B \uacbd\ub85c \ucd94\ucc9c<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc2e4\uc81c \uc608\uc2dc<\/p>\n<blockquote data-ke-style=\"style3\">\n<p data-ke-size=\"size16\">\ubcd1\uc6d0 \uc608\uc57d \uc2dc\uac04\uc5d0 \ub9de\ucdb0 \ucd9c\ubc1c\ud588\ub294\ub370, \ud604\uc7ac\ub294 \uc6d0\ud65c\ud558\uc9c0\ub9cc 30\ubd84 \ud6c4 \uc608\uc0c1\ub418\ub294 \uc815\uccb4\ub97c \uad6c\uae00 \ub9f5\uc774 \ubbf8\ub9ac \uc608\uce21\ud558\uace0 \uc6b0\ud68c \uacbd\ub85c\ub97c \uc81c\uc548\ud55c\ub2e4.<\/p>\n<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">\uadf8\ub807\ub2e4\uba74 \ubaa8\ub4e0 \uc0ac\ub78c\uc774 \uac19\uc740 \uacbd\ub85c\ub85c \ubab0\ub9ac\ub294 \ubb38\uc81c\ub294?<\/h3>\n<p data-ke-size=\"size16\">\uc2e4\uc81c\ub85c\ub294 \uc5ec\ub7ec \uc774\uc720\ub85c\uc778\ud574 \ubcf5\ud569\uc801\uc73c\ub85c \uc791\uc6a9\ub418\uc5b4 \uc790\uc5f0\uc2a4\ub7fd\uac8c \ubd84\uc0b0\ub429\ub2c8\ub2e4.<\/p>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li><b>\uc2dc\uac04\ucc28 \ucd9c\ubc1c<\/b> - \ubaa8\ub450\uac00 \uc815\ud655\ud788 \uac19\uc740 \uc2dc\uac04\uc5d0 \ucd9c\ubc1c\ud558\uc9c0 \uc54a\uc74c<\/li>\n<li><b>\uc608\uce21 \uae30\ubc18 \uc7ac\ubd84\ubc30<\/b> - \uc774\ubbf8 \ub9ce\uc774 \uc120\ud0dd\ub41c \uacbd\ub85c\ub294 \"\uace7 \ud63c\uc7a1\" \uc608\uce21<\/li>\n<li><b>\uac1c\uc778 \uc124\uc815<\/b> - \uc720\ub8cc\ub3c4\ub85c \ud68c\ud53c, \uace0\uc18d\ub3c4\ub85c \uc120\ud638 \ub4f1<\/li>\n<li><b>\uc2e4\uc2dc\uac04 \uc7ac\uacc4\uc0b0<\/b> - \uc8fc\ud589 \uc911\uc5d0\ub3c4 \uacc4\uc18d \uacbd\ub85c \uc7ac\ud3c9\uac00<\/li>\n<\/ol>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ubb3c\ub860 \uc774 \ub0b4\uc6a9 \ub9d0\uace0\ub3c4 \ub354 \ub9ce\uc740 \uc774\uc720\ub4e4\uc774 \uc788\uaca0\uc9c0\ub9cc...<\/p>\n<p data-ke-size=\"size16\">\uc194\uc9c1\ud788 \uc5b4\ub824\uc6cc\uc11c \uc644\uc804\ud788 \uc774\ud574\ud558\uc9c0\ub294 \ubabb\ud55c \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\"><b><br \/>\uad00\ub828 \uc544\ud2f0\ud074:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><a style=\"color: #0070d1;\" href=\"https:\/\/blog.google\/products\/maps\/google-maps-101-how-ai-helps-predict-traffic-and-determine-routes\/\">Google Maps 101: How AI helps predict traffic<\/a><\/li>\n<li><a style=\"color: #0070d1;\" href=\"https:\/\/www.altexsoft.com\/blog\/traffic-prediction\/\">Traffic Prediction with Machine Learning - AltexSoft<\/a><\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\uc9c0\ub3c4 \ud0c0\uc77c \uce90\uc2f1 - \uac74\ubb3c \uc815\ubcf4\uac00 \ubc14\ub00c\uba74 \uc5b4\ub5bb\uac8c \ub418\uc9c0?<\/h2>\n<blockquote data-ke-style=\"style3\">\uc9c0\ub3c4 \uc774\ubbf8\uc9c0\ub97c CDN\uc5d0 \uce90\uc2f1\ud558\ub294\ub370, \uac74\ubb3c\uc774 \uc0c8\ub85c \uc0dd\uae30\uac70\ub098 \ub3c4\ub85c\uac00 \ubc14\ub00c\uba74 \uc5b4\ub5bb\uac8c \uc5c5\ub370\uc774\ud2b8\ud560\uae4c\uc694?<br \/>TTL\ub3c4 \ub108\ubb34 \uae38\uba74 \ubb38\uc81c\uac00 \ub420 \uac83 \uac19\uc740\ub370 \ub9d0\uc774\uc8e0.<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>TTL\uc740 \ub370\uc774\ud130 \ud2b9\uc131\uc5d0 \ub530\ub77c \ub2e4\ub974\uac8c<\/b><b><\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>\uae30\ubcf8 \uc9c0\ub3c4<\/b>: 24~48\uc2dc\uac04 (\uac74\ubb3c, \ub3c4\ub85c \ub4f1\uc740 \uc790\uc8fc \uc548 \ubc14\ub01c)<\/li>\n<li><b>\uad50\ud1b5 \uc815\ubcf4<\/b>: 5~15\ubd84 (\uc2e4\uc2dc\uac04\uc131\uc774 \uc911\uc694)<\/li>\n<li><b>\ub0a0\uc528 \ub808\uc774\uc5b4<\/b>: 1\uc2dc\uac04 \uc815\ub3c4<\/li>\n<\/ul>\n<p data-ke-size=\"size16\"><b>\uc5c5\ub370\uc774\ud2b8\uac00 \ud544\uc694\ud560\ub54c\ub294?<\/b><\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\ubc84\uc804 \uae30\ubc18 \ubb34\ud6a8\ud654<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ud0c0\uc784\uc2a4\ud0ec\ud504 \ub610\ub294 \ud574\uc2dc \uae30\ubc18 \uce90\uc2dc \ud0a4<\/li>\n<li>\uc18c\uc2a4 \ub370\uc774\ud130 \ubcc0\uacbd \uc2dc \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8<\/li>\n<li>\uc911\uc694 \uc5c5\ub370\uc774\ud2b8(\ub3c4\ub85c \ud3d0\uc1c4, \uac74\ubb3c \ubcc0\uacbd)\ub294 \uc989\uc2dc \ubb34\ud6a8\ud654<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">TTL\uc774 48\uc2dc\uac04\uc774\uc5b4\ub3c4 \ub3c4\ub85c\uac00 \ubc14\ub00c\uba74 \ubc14\ub85c \ubc18\uc601\ud574\uc57c\uaca0\uc8e0. \uc774\ub54c \uc0ac\uc6a9\ud558\ub294 \uc804\ub7b5\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li><b>\ubc84\uc804 \uae30\ubc18 \ubb34\ud6a8\ud654<\/b><br \/>URL\uc5d0 \ubc84\uc804\uc744 \ubd99\uc5ec\uc11c \/tiles\/v2\/{z}\/{x}\/{y}.png \uc774\ub7f0 \uc2dd\uc73c\ub85c \uad00\ub9ac\ud558\uba74, \ubc84\uc804\ub9cc \uc62c\ub824\ub3c4 \uc804\uccb4 \uce90\uc2dc\uac00 \uc0c8\ub85c\uace0\uce68\ub429\ub2c8\ub2e4.<\/li>\n<li><b>\uc9c0\uc5ed\ubcc4 \ubb34\ud6a8\ud654<br \/><\/b><span style=\"font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;\">\uac15\ub0a8\uc5ed \uadfc\ucc98 \uac74\ubb3c \ud558\ub098 \ubc14\ub00c\uc5c8\ub2e4\uace0 \uc11c\uc6b8 \uc804\uccb4 \ud0c0\uc77c\uc744 \uac31\uc2e0\ud560 \ud544\uc694 \uc5c6\uc774, \ud574\ub2f9 \uc88c\ud45c \ubc94\uc704\uc758 \ud0c0\uc77c\ub9cc \uc120\ud0dd\uc801\uc73c\ub85c \uc0ad\uc81c\ud569\ub2c8\ub2e4.<\/span><\/li>\n<\/ol>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<div data-start-index=\"870\">\n<p data-ke-size=\"size16\"><b>Stale-While-Revalidate \uc804\ub7b5<\/b>\uc73c\ub85c \ub9cc\ub8cc \uc9c1\uc804 \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ubbf8\ub9ac \uc0c8\ub85c\uace0\uce68\ud574\ub450\uba74, \uc0ac\uc6a9\uc790\ub294 \ube48 \ud654\uba74 \uc5c6\uc774 \ubd80\ub4dc\ub7ec\uc6b4 \uacbd\ud5d8\uc744 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc778\uae30 \uc788\ub294 \ud0c0\uc77c\uc774 \ub9cc\ub8cc\ub418\uae30 \uc804\uc5d0 \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ubbf8\ub9ac \uc0c8\ub85c\uace0\uce68(Background refresh)\uc744 \uc218\ud589\ud558\uc5ec \uce90\uc2dc \ud788\ud2b8\uc728\uc744 85% \uc774\uc0c1\uc73c\ub85c \uc720\uc9c0\ud558\uba74\uc11c\ub3c4 \ub370\uc774\ud130 \uc815\ud655\uc131\uc744 \ud655\ubcf4\ud558\ub294 \uac83\uc774\uc8e0.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<\/div>\n<p data-ke-size=\"size16\"><b>\uad00\ub828 \uc544\ud2f0\ud074:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><a href=\"https:\/\/www.maplibrary.org\/1387\/comparison-of-tile-map-caching-methods\/\">8 Tile Map Caching Methods<\/a><\/li>\n<li><a href=\"https:\/\/www.maplibrary.org\/10552\/how-to-enhance-map-performance-using-caching-layers\/\">7 Ways to Enhance Map Performance Using Caching Layers<\/a><\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\ub9c8\uce58\uba70<\/h2>\n<p data-ke-size=\"size16\">\ud3c9\uc18c\uc5d0 \ub9e4\uc77c <span style=\"color: #333333; text-align: start;\">\ub2f9\uc5f0\ud558\uac8c<span>&nbsp;<\/span><\/span>\uc0ac\uc6a9\ud558\ub294 \uc9c0\ub3c4 \uc11c\ube44\uc2a4\uc778\ub370, \uc2dc\uc2a4\ud15c \uc124\uacc4 \uad00\uc810\uc5d0\uc11c \ubcf4\ub2c8 \uc815\ub9d0 \ub9ce\uc740 \uace0\ubbfc\uacfc \ucd5c\uc801\ud654\uac00 \uc228\uc5b4\uc788\ub294 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud2b9\ud788 \uc9c0\ub3c4 \uc11c\ube44\uc2a4\ub294 \uc218\ud559\uc801\uc778 \uac1c\ub150\uc774 \ub9ce\uc774 \ub4e4\uc5b4\uc788\uc5b4\uc11c \ub2e4\ub978 \uc8fc\uc81c\ubcf4\ub2e4 \uc880 \ub354 \uc5b4\ub835\uac8c \ub290\uaef4\uc84c\ub294\ub370\uc694,<\/p>\n<p data-ke-size=\"size16\">\ub2e4\uc74c \uc2a4\ud130\ub514\uc5d0\uc11c\ub294 \ub4dc\ub514\uc5b4 3\uc8fc\uac04\uc758 \uc9c0\ub3c4 \uc2dc\ub9ac\uc988\ub97c \ub9c8\uce58\uace0 \ub2e4\ub978 \uc8fc\uc81c\ub97c \uacf5\ubd80\ud558\uac8c \ub418\uc5b4 \uae30\ub300 \uc911\uc785\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\uadf8 \uc678 \ucc38\uace0\ud558\uba74 \uc88b\uc740 \uc544\ud2f0\ud074:<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uce74\uce74\uc624\ub9f5\uc774 \ucd5c\uc801 \uacbd\ub85c\ub97c \uacb0\uc815\ud558\ub294 \ub370\uae4c\uc9c0<\/li>\n<\/ul>\n<figure id=\"og_1767054652695\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"article\" data-og-title=\"\uce74\uce74\uc624\ub9f5\uc774 \ucd5c\uc801 \uacbd\ub85c\ub97c \uacb0\uc815\ud558\ub294 \ub370\uae4c\uc9c0\" data-og-description=\"\uce74\uce74\uc624\ub9f5\uc5d0\uc11c \ubd88\ud3b8\ud568\uc744 \ub290\ub07c\uace0, \uad81\uae08\uc99d\uc744 \ud574\uacb0\ud558\ub2e4.&nbsp;&nbsp;&nbsp;\uc548\ub155\ud558\uc138\uc694! NewCodes\uc785\ub2c8\ub2e4!!&nbsp;\uc6b0\uc120 \uc774\uc804 \ud3ec\uc2a4\ud305\uc5d0\uc11c\uc81c\uac00 \uac00\uc84c\ub358 \uad81\uae08\uc99d\uc5d0 \ub300\ud574 \ub2e4\uc2dc \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;&nbsp;&nbsp;\uc704 \uadf8\ub9bc\uc740 \uc81c\uac00 \uc0ac\ub294 \ub3d9\ub124\uc785\ub2c8\" data-og-host=\"newcodes.tistory.com\" data-og-source-url=\"https:\/\/newcodes.tistory.com\/entry\/%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A7%B5%EC%9D%B4-%EC%B5%9C%EC%A0%81-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EA%B2%B0%EC%A0%95%ED%95%98%EB%8A%94-%EB%8D%B0%EA%B9%8C%EC%A7%80#google_vignette\" data-og-url=\"https:\/\/newcodes.tistory.com\/entry\/%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A7%B5%EC%9D%B4-%EC%B5%9C%EC%A0%81-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EA%B2%B0%EC%A0%95%ED%95%98%EB%8A%94-%EB%8D%B0%EA%B9%8C%EC%A7%80\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/bl3jTe\/hyZQWPGZus\/9AumJOasY8R3XmthyGE0IK\/img.jpg?width=800&amp;height=418&amp;face=0_0_800_418,https:\/\/scrap.kakaocdn.net\/dn\/MWFHf\/hyZQrcCkG2\/aqFRv0oZKNgl60LNsYHpj1\/img.jpg?width=800&amp;height=418&amp;face=0_0_800_418,https:\/\/scrap.kakaocdn.net\/dn\/53kMr\/hyZQxDTpnP\/cSI5pomuNP2vxfpKhgn5qK\/img.png?width=1132&amp;height=1336&amp;face=0_0_1132_1336\"><a href=\"https:\/\/newcodes.tistory.com\/entry\/%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A7%B5%EC%9D%B4-%EC%B5%9C%EC%A0%81-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EA%B2%B0%EC%A0%95%ED%95%98%EB%8A%94-%EB%8D%B0%EA%B9%8C%EC%A7%80#google_vignette\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/newcodes.tistory.com\/entry\/%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A7%B5%EC%9D%B4-%EC%B5%9C%EC%A0%81-%EA%B2%BD%EB%A1%9C%EB%A5%BC-%EA%B2%B0%EC%A0%95%ED%95%98%EB%8A%94-%EB%8D%B0%EA%B9%8C%EC%A7%80#google_vignette\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/bl3jTe\/hyZQWPGZus\/9AumJOasY8R3XmthyGE0IK\/img.jpg?width=800&amp;height=418&amp;face=0_0_800_418,https:\/\/scrap.kakaocdn.net\/dn\/MWFHf\/hyZQrcCkG2\/aqFRv0oZKNgl60LNsYHpj1\/img.jpg?width=800&amp;height=418&amp;face=0_0_800_418,https:\/\/scrap.kakaocdn.net\/dn\/53kMr\/hyZQxDTpnP\/cSI5pomuNP2vxfpKhgn5qK\/img.png?width=1132&amp;height=1336&amp;face=0_0_1132_1336');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">\uce74\uce74\uc624\ub9f5\uc774 \ucd5c\uc801 \uacbd\ub85c\ub97c \uacb0\uc815\ud558\ub294 \ub370\uae4c\uc9c0<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">\uce74\uce74\uc624\ub9f5\uc5d0\uc11c \ubd88\ud3b8\ud568\uc744 \ub290\ub07c\uace0, \uad81\uae08\uc99d\uc744 \ud574\uacb0\ud558\ub2e4.&nbsp;&nbsp;&nbsp;\uc548\ub155\ud558\uc138\uc694! NewCodes\uc785\ub2c8\ub2e4!!&nbsp;\uc6b0\uc120 \uc774\uc804 \ud3ec\uc2a4\ud305\uc5d0\uc11c\uc81c\uac00 \uac00\uc84c\ub358 \uad81\uae08\uc99d\uc5d0 \ub300\ud574 \ub2e4\uc2dc \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;&nbsp;&nbsp;\uc704 \uadf8\ub9bc\uc740 \uc81c\uac00 \uc0ac\ub294 \ub3d9\ub124\uc785\ub2c8<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">newcodes.tistory.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uce74\uce74\uc624\ub9f5\uc774 \ube60\ub974\uac8c \uae38\uc744 \ucc3e\uc544\uc8fc\ub294 \ubc29\ubc95: CCH\ub97c \uc774\uc6a9\ud55c \uac1c\ud3b8\uae30 - kakao \uae30\uc220 \ube14\ub85c\uadf8<\/li>\n<\/ul>\n<figure id=\"og_1767054770115\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"article\" data-og-title=\"\uce74\uce74\uc624\ub9f5\uc774 \ube60\ub974\uac8c \uae38\uc744 \ucc3e\uc544\uc8fc\ub294 \ubc29\ubc95: CCH\ub97c \uc774\uc6a9\ud55c \uac1c\ud3b8\uae30 - tech.kakao.com\" data-og-description=\"\uce74\uce74\uc624\ub9f5\uc5d0\uc11c\ub294 \ub3c4\ubcf4&middot;\uc790\uc804\uac70 \uae38\ucc3e\uae30 \uc11c\ube44\uc2a4\ub97c \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \uae38\ucc3e\uae30 ...\" data-og-host=\"tech.kakao.com\" data-og-source-url=\"https:\/\/tech.kakao.com\/posts\/436\" data-og-url=\"https:\/\/tech.kakao.com\/posts\/436\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/lpzMi\/hyZPDqEM2e\/gZzQi9B4WSD7PdhTN6mZEk\/img.png?width=896&amp;height=372&amp;face=0_0_896_372,https:\/\/scrap.kakaocdn.net\/dn\/BIzVu\/hyZQyCLFB2\/KFUCTQu9n2spAFNktCnB21\/img.png?width=896&amp;height=372&amp;face=0_0_896_372,https:\/\/scrap.kakaocdn.net\/dn\/K8FFe\/hyZQzuW0pK\/y8ypeDZTfLfZeGwOROgKp0\/img.png?width=896&amp;height=372&amp;face=0_0_896_372\"><a href=\"https:\/\/tech.kakao.com\/posts\/436\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/tech.kakao.com\/posts\/436\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/lpzMi\/hyZPDqEM2e\/gZzQi9B4WSD7PdhTN6mZEk\/img.png?width=896&amp;height=372&amp;face=0_0_896_372,https:\/\/scrap.kakaocdn.net\/dn\/BIzVu\/hyZQyCLFB2\/KFUCTQu9n2spAFNktCnB21\/img.png?width=896&amp;height=372&amp;face=0_0_896_372,https:\/\/scrap.kakaocdn.net\/dn\/K8FFe\/hyZQzuW0pK\/y8ypeDZTfLfZeGwOROgKp0\/img.png?width=896&amp;height=372&amp;face=0_0_896_372');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">\uce74\uce74\uc624\ub9f5\uc774 \ube60\ub974\uac8c \uae38\uc744 \ucc3e\uc544\uc8fc\ub294 \ubc29\ubc95: CCH\ub97c \uc774\uc6a9\ud55c \uac1c\ud3b8\uae30 - tech.kakao.com<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">\uce74\uce74\uc624\ub9f5\uc5d0\uc11c\ub294 \ub3c4\ubcf4&middot;\uc790\uc804\uac70 \uae38\ucc3e\uae30 \uc11c\ube44\uc2a4\ub97c \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \uae38\ucc3e\uae30 ...<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">tech.kakao.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">&nbsp;<\/p>","category":"\uc54c\uc544\ub450\uba74 \uc88b\uc740 \uac1c\ubc1c \uc9c0\uc2dd\/\uc2a4\ud130\ub514","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/97","comments":"https:\/\/yeseul-dev.tistory.com\/97#entry97comment","pubDate":"Tue, 30 Dec 2025 09:26:13 +0900"},{"title":"Java\/Kotlin \uc774\ubbf8\uc9c0 \ub9ac\uc0ac\uc774\uc9d5 \ub77c\uc774\ube0c\ub7ec\ub9ac \uac04\ub2e8 \uc131\ub2a5 \ube44\uad50 \ubc0f \ud14c\uc2a4\ud2b8","link":"https:\/\/yeseul-dev.tistory.com\/96","description":"<div>\n<div>\n<p data-ke-size=\"size16\">\uc81c\uac00 \uac1c\ubc1c\ud558\uace0 \uc788\ub294 \uc11c\ube44\uc2a4\ub294 \uc774\ubbf8\uc9c0\ub97c \ub9ce\uc774 \ub2e4\ub8e8\uae30 \ub54c\ubb38\uc5d0 \uc378\ub124\uc77c \uc11c\ubc84\uac00 \ud544\uc218\uc801\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<div>\n<div>\n<p data-ke-size=\"size16\">\uae30\uc874\uc5d0\ub294 \uc90c(zum.com)\uc758 \uc378\ub124\uc77c \uc11c\ubc84\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud588\uc73c\ub098,<\/p>\n<p data-ke-size=\"size16\">\uc0ac\uc6a9 \uc911 \uc774\uc288\uac00 \ubc1c\uc0dd\ud588\uace0 \uc678\ubd80 \uc758\uc874\uc131\uc744 \uc81c\uac70\ud558\uae30 \uc704\ud574 \uc378\ub124\uc77c \uc791\uc5c5\uc744 \uc790\uccb4\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\uae30\ub85c \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<\/div>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><span style=\"font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;\">\uadf8\ub798\uc11c \uad6c\uae00\ub9c1\uc744 \ud1b5\ud574 \ucc3e\uc744 \uc218 \uc788\uc5c8\ub358 \ub300\ud45c\uc801\uc778 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc744 \ube44\uad50\ud574\uc11c \uc801\ud569\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc120\ud0dd\ud558\uae30\ub85c \ud588\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<div>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\ube44\uad50 \ub300\uc0c1 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/h2>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li><b>Graphics2D<\/b> - Java \uae30\ubcf8 API<\/li>\n<li><b>Image.getScaledInstance()<\/b> - Java \uae30\ubcf8 API<\/li>\n<li><b>Imgscalr<\/b> - \uac04\ub2e8\ud558\uace0 \ud6a8\uc728\uc801\uc778 \ub9ac\uc0ac\uc774\uc9d5 \uc804\uc6a9 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/li>\n<li><b>Thumbnailator<\/b> - \uc0ac\uc6a9\ud558\uae30 \uc27d\uace0 \uae30\ub2a5\uc774 \ud48d\ubd80\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac<\/li>\n<li><b>Marvin<\/b> - \uc774\ubbf8\uc9c0 \ucc98\ub9ac \ud504\ub808\uc784\uc6cc\ud06c<\/li>\n<\/ol>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<\/div>\n<p data-ke-size=\"size16\">\uc774 \uc911\uc5d0\uc11c \uc800\ud76c \uc11c\ube44\uc2a4\ub294 <b>Imgscalr<\/b>\ub97c \uc0ac\uc6a9\ud558\uae30\ub85c \ud588\ub294\ub370\uc694,<\/p>\n<p data-ke-size=\"size16\">\uc544\ub798\ub294 \uac04\ub2e8\ud558\uac8c \ud14c\uc2a4\ud2b8\ub97c \uac70\uce5c \ud6c4 \uc65c \uc801\uc6a9\ud558\uac8c \ub418\uc5c8\ub294\uc9c0 \uc801\uc5b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">1. JDK \uae30\ubcf8 \uc81c\uacf5 \ubc29\uc2dd<\/h2>\n<h3 data-ke-size=\"size23\">1.1 Graphics2D<\/h3>\n<p data-ke-size=\"size16\">Java\uc758 \uae30\ubcf8 \uadf8\ub798\ud53d \ub77c\uc774\ube0c\ub7ec\ub9ac\uc778 AWT(Abstract Window Toolkit)\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>java.awt.Graphics2D<\/li>\n<li>\uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc758\uc874\uc131 \uc5c6\uc74c<\/li>\n<li>\uc138\ubc00\ud55c \ub80c\ub354\ub9c1 \uc635\uc158 \uc81c\uc5b4 \uac00\ub2a5<\/li>\n<li>\uad6c\ud604\uc774 \ub2e4\uc18c \ubcf5\uc7a1\ud560 \uc218 \uc788\ub2e4<\/li>\n<\/ul>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>import java.awt.RenderingHints\nimport java.awt.image.BufferedImage\nimport java.io.File\nimport javax.imageio.ImageIO\n\nfun resizeWithGraphics2D(inputFile: File, targetWidth: Int): BufferedImage {\n    val originalImage = ImageIO.read(inputFile)\n    val targetHeight = calculateTargetHeight(\n        originalImage.width, \n        originalImage.height, \n        targetWidth\n    )\n    \n    val resizedImage = BufferedImage(\n        targetWidth, \n        targetHeight, \n        BufferedImage.TYPE_INT_RGB\n    )\n    \n    val graphics = resizedImage.createGraphics()\n    \n    \/\/ \uace0\ud488\uc9c8 \ub80c\ub354\ub9c1 \uc124\uc815\n    graphics.setRenderingHint(\n        RenderingHints.KEY_INTERPOLATION,\n        RenderingHints.VALUE_INTERPOLATION_BILINEAR\n    )\n    graphics.setRenderingHint(\n        RenderingHints.KEY_RENDERING,\n        RenderingHints.VALUE_RENDER_QUALITY\n    )\n    graphics.setRenderingHint(\n        RenderingHints.KEY_ANTIALIASING,\n        RenderingHints.VALUE_ANTIALIAS_ON\n    )\n    \n    graphics.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null)\n    graphics.dispose()\n    \n    return resizedImage\n}\n\nprivate fun calculateTargetHeight(\n    originalWidth: Int, \n    originalHeight: Int, \n    targetWidth: Int\n): Int {\n    val aspectRatio = originalHeight.toDouble() \/ originalWidth.toDouble()\n    return (targetWidth * aspectRatio).roundToInt()\n}<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">1.2 Image.getScaledInstance()<\/h3>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">Image \ud074\ub798\uc2a4\uc758 \uae30\ubcf8 \uc2a4\ucf00\uc77c\ub9c1 \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>javax.imageio.ImageIO<\/li>\n<li>\uc0ac\uc6a9\uc774 \ub9e4\uc6b0 \uac04\ub2e8\ud568<\/li>\n<li>\uc131\ub2a5\uc774 \uac00\uc7a5 \ub290\ub9bc<\/li>\n<li>\uc774\ubbf8\uc9c0 \ud488\uc9c8 \uc81c\uc5b4\uac00 \uc81c\ud55c\uc801<\/li>\n<\/ul>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>import java.awt.Image\nimport java.awt.image.BufferedImage\nimport java.io.File\nimport javax.imageio.ImageIO\n\nfun resizeWithScaledInstance(inputFile: File, targetWidth: Int): BufferedImage {\n    val originalImage = ImageIO.read(inputFile)\n    val targetHeight = calculateTargetHeight(\n        originalImage.width, \n        originalImage.height, \n        targetWidth\n    )\n    \n    \/\/ Image.SCALE_SMOOTH: \uac00\uc7a5 \ubd80\ub4dc\ub7ec\uc6b4 \uc2a4\ucf00\uc77c\ub9c1\n    val scaledImage = originalImage.getScaledInstance(\n        targetWidth, \n        targetHeight, \n        Image.SCALE_SMOOTH\n    )\n    \n    \/\/ Image \uac1d\uccb4\ub97c BufferedImage\ub85c \ubcc0\ud658\n    val bufferedImage = BufferedImage(\n        targetWidth, \n        targetHeight, \n        BufferedImage.TYPE_INT_RGB\n    )\n    val g2d = bufferedImage.createGraphics()\n    g2d.drawImage(scaledImage, 0, 0, null)\n    g2d.dispose()\n    \n    return bufferedImage\n}<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">2. \uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/h2>\n<h3 data-ke-size=\"size23\">2.1 Thumbnailator<\/h3>\n<p data-ke-size=\"size16\">\uc0ac\uc6a9\ud558\uae30 \uc26c\uc6b4 Fluent API\ub97c \uc81c\uacf5\ud558\uba70 \ub2e4\uc591\ud55c \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ube4c\ub354 \ud328\ud134\uc73c\ub85c \uc77d\uae30 \uc26c\uc6b4 \ucf54\ub4dc<\/li>\n<li>\uc6cc\ud130\ub9c8\ud06c, \ud68c\uc804, \ud06c\ub86d \ub4f1 \ucd94\uac00 \uae30\ub2a5 \ud48d\ubd80<\/li>\n<li>\ud65c\ubc1c\ud55c \uc720\uc9c0\ubcf4\uc218 (\ucd5c\uadfc\uae4c\uc9c0 \uc5c5\ub370\uc774\ud2b8)<\/li>\n<li>\uc9c1\uad00\uc801\uc778 API<\/li>\n<li>\uacf5\uc2dd \ubb38\uc11c\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>GitHub: <a href=\"https:\/\/github.com\/coobird\/thumbnailator\">https:\/\/github.com\/coobird\/thumbnailator<\/a><\/li>\n<li>Javadoc: <a href=\"https:\/\/coobird.github.io\/thumbnailator\/javadoc\/0.4.20\/\">https:\/\/coobird.github.io\/thumbnailator\/javadoc\/0.4.20\/<\/a><\/li>\n<li>Examples: <a href=\"https:\/\/github.com\/coobird\/thumbnailator\/wiki\/Examples\">https:\/\/github.com\/coobird\/thumbnailator\/wiki\/Examples<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"clean\"><code>implementation 'net.coobird:thumbnailator:0.4.19'\n<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>import net.coobird.thumbnailator.Thumbnails\nimport java.io.File\n\n\/\/ \uac04\ub2e8\ud55c \ub9ac\uc0ac\uc774\uc9d5\nfun resizeWithThumbnailator(inputFile: File, targetWidth: Int): File {\n    val outputFile = File(\"output_thumbnailator.jpg\")\n    \n    Thumbnails.of(inputFile)\n        .width(targetWidth)  \/\/ \ub108\ube44\ub9cc \uc9c0\uc815\ud558\uba74 \ube44\uc728 \uc790\ub3d9 \uc720\uc9c0\n        .toFile(outputFile)\n    \n    return outputFile\n}\n\n\/\/ \uace0\uae09 \uc635\uc158 \uc0ac\uc6a9\nfun resizeWithThumbnailatorAdvanced(\n    inputFile: File, \n    targetWidth: Int,\n    quality: Double = 0.9\n): File {\n    val outputFile = File(\"output_thumbnailator_quality.jpg\")\n    \n    Thumbnails.of(inputFile)\n        .width(targetWidth)\n        .outputQuality(quality)  \/\/ JPEG \uc555\ucd95 \ud488\uc9c8\n        .outputFormat(\"jpg\")\n        .toFile(outputFile)\n    \n    return outputFile\n}\n\n\/\/ BufferedImage\ub85c \ubc18\ud658\ubc1b\uae30\nfun resizeWithThumbnailatorAsImage(\n    inputFile: File, \n    targetWidth: Int\n): BufferedImage {\n    return Thumbnails.of(inputFile)\n        .width(targetWidth)\n        .outputQuality(0.85)\n        .asBufferedImage()\n}<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">2.2 Imgscalr<\/h3>\n<p data-ke-size=\"size16\">\uac04\ub2e8\ud55c API\ub85c \ud55c \uc904\uc5d0 \ub9ac\uc0ac\uc774\uc9d5\uc774 \uac00\ub2a5\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4.<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc131\ub2a5\uacfc \ud488\uc9c8\uc758 \uade0\ud615\uc774 \uc88b\uc74c<\/li>\n<li>\ube44\uc728 \uc720\uc9c0 \uc790\ub3d9 \ucc98\ub9ac<\/li>\n<li>\uae30\ub2a5\uc774 \uc81c\ud55c\uc801 (\ub9ac\uc0ac\uc774\uc9d5, \ud06c\ub86d, \ud68c\uc804\ub9cc)<\/li>\n<li>2013\ub144 \uc774\ud6c4 \uc5c5\ub370\uc774\ud2b8 \uc911\ub2e8<\/li>\n<li><b>2013\ub144 \uc774\ud6c4 \uc5c5\ub370\uc774\ud2b8 \uc911\ub2e8<\/b> (\ub9c8\uc9c0\ub9c9 \ub9b4\ub9ac\uc988: 4.2, 2012\ub144)<\/li>\n<\/ul>\n<pre class=\"clean\"><code>implementation 'org.imgscalr:imgscalr-lib:4.2'\n<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>import org.imgscalr.Scalr\nimport java.awt.image.BufferedImage\nimport java.io.File\nimport javax.imageio.ImageIO\n\n\/\/ QUALITY \ubaa8\ub4dc (\ud488\uc9c8 \uc6b0\uc120)\nfun resizeWithImgscalrQuality(inputFile: File, targetWidth: Int): BufferedImage {\n    val originalImage = ImageIO.read(inputFile)\n    \n    return Scalr.resize(\n        originalImage,\n        Scalr.Method.QUALITY,      \/\/ \ud488\uc9c8 \uc6b0\uc120\n        Scalr.Mode.FIT_TO_WIDTH,   \/\/ \ub108\ube44 \uae30\uc900 \ub9de\ucda4\n        targetWidth\n    )\n}\n\n\/\/ SPEED \ubaa8\ub4dc (\uc18d\ub3c4 \uc6b0\uc120)\nfun resizeWithImgscalrSpeed(inputFile: File, targetWidth: Int): BufferedImage {\n    val originalImage = ImageIO.read(inputFile)\n    \n    return Scalr.resize(\n        originalImage,\n        Scalr.Method.SPEED,        \/\/ \uc18d\ub3c4 \uc6b0\uc120\n        Scalr.Mode.FIT_TO_WIDTH,\n        targetWidth\n    )\n}\n\n\/\/ \uc815\ud655\ud55c \ud06c\uae30 \uc9c0\uc815\nfun resizeWithImgscalrExact(\n    inputFile: File, \n    width: Int, \n    height: Int\n): BufferedImage {\n    val originalImage = ImageIO.read(inputFile)\n    \n    return Scalr.resize(\n        originalImage,\n        Scalr.Method.QUALITY,\n        Scalr.Mode.FIT_EXACT,      \/\/ \uc815\ud655\ud55c \ud06c\uae30\ub85c \ub9de\ucda4\n        width,\n        height\n    )\n}<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">2.3 Marvin<\/h3>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc774\ubbf8\uc9c0 \ucc98\ub9ac \ud504\ub808\uc784\uc6cc\ud06c<\/li>\n<li>\ud544\ud130, \ud6a8\uacfc \ub4f1 \ub2e4\uc591\ud55c \uc774\ubbf8\uc9c0 \ucc98\ub9ac \uac00\ub2a5<\/li>\n<li>API\uac00 \ub2e4\uc18c \ubcf5\uc7a1\ud568<\/li>\n<\/ul>\n<pre class=\"clean\"><code>implementation 'com.github.downgoon:marvin:1.5.5'\nimplementation 'com.github.downgoon:MarvinPlugins:1.5.5'\n<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<pre id=\"code_1766048457345\" class=\"kotlin\" data-ke-language=\"kotlin\" data-ke-type=\"codeblock\"><code>import marvin.image.MarvinImage\nimport org.marvinproject.image.transform.scale.Scale\nimport java.awt.image.BufferedImage\nimport java.io.File\nimport javax.imageio.ImageIO\n\nfun resizeWithMarvin(inputFile: File, targetWidth: Int): BufferedImage {\n    val image = ImageIO.read(inputFile)\n    \n    val originWidth = image.width\n    val originHeight = image.height\n    val targetHeight = calculateTargetHeight(originWidth, originHeight, targetWidth)\n    \n    \/\/ \ub2e4\uc6b4\uc2a4\ucf00\uc77c\ub9c1\ub9cc \uc218\ud589\n    if (originWidth &gt;= targetWidth || originHeight &gt;= targetHeight) {\n        val imageMarvin = MarvinImage(image)\n        \n        val scale = Scale()\n        scale.load()\n        scale.setAttribute(\"newWidth\", targetWidth)\n        scale.setAttribute(\"newHeight\", targetHeight)\n        scale.process(imageMarvin.clone(), imageMarvin, null, null, false)\n        \n        \/\/ JPEG\ub294 \uc54c\ud30c \ucc44\ub110\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uc81c\uac70\n        return imageMarvin.bufferedImageNoAlpha\n    }\n    \n    return image\n}<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\uc131\ub2a5 \ube44\uad50 \ud14c\uc2a4\ud2b8 \ud574\ubcf4\uae30<\/h2>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">\uc131\ub2a5 \uce21\uc815 \ubc29\ubc95<\/h2>\n<h3 data-ke-size=\"size23\">\uc2e4\ud589 \uc2dc\uac04 \uce21\uc815 (CPU \uc0ac\uc6a9\ub7c9 \uc9c0\ud45c)<\/h3>\n<p data-ke-size=\"size16\">\uc2e4\ud589 \uc2dc\uac04\uc740 CPU \uc0ac\uc6a9\ub7c9\uc744 \uac04\uc811\uc801\uc73c\ub85c \ub098\ud0c0\ub0b4\ub294 \uc9c0\ud45c\ub77c\uace0 \uc0dd\uac01\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">System.nanoTime()\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub098\ub178\ucd08 \ub2e8\uc704\ub85c \uce21\uc815\ud55c \ud6c4 \ubc00\ub9ac\ucd08\ub85c \ubcc0\ud658\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"reasonml\"><code>val startTime = System.nanoTime()\n\n\/\/ \ub9ac\uc0ac\uc774\uc9d5 \uc791\uc5c5 \uc218\ud589\nfor (i in 0..&lt;TEST_ITERATIONS) {\n    val resizedImage = Scalr.resize(originalImage, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_WIDTH, targetWidth)\n}\n\nval endTime = System.nanoTime()\nval executionTime = (endTime - startTime) \/ 1_000_000 \/\/ \ub098\ub178\ucd08 -&gt; \ubc00\ub9ac\ucd08\nval averageTime = executionTime \/ TEST_ITERATIONS\n<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\uce21\uc815 \uc2dc \uc8fc\uc758\uc0ac\ud56d<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uac01 \ud14c\uc2a4\ud2b8\ub9c8\ub2e4 10\ud68c \ubc18\ubcf5 \uc218\ud589\ud558\uc5ec \ud3c9\uade0\uac12 \uacc4\uc0b0<\/li>\n<li>\uccab \uc2e4\ud589\uc740 JVM \uc6cc\ubc0d\uc5c5 \ud6a8\uacfc\uac00 \uc788\uc744 \uc218 \uc788\uc5b4 \uc5ec\ub7ec \ubc88 \ubc18\ubcf5 \uce21\uc815<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">\uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9 \uce21\uc815<\/h3>\n<p data-ke-size=\"size16\">JVM\uc758 Runtime \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud14c\uc2a4\ud2b8 \uc804\ud6c4\uc758 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc744 \uce21\uc815\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"reasonml\"><code>\/\/ \uba54\ubaa8\ub9ac \uce21\uc815\uc744 \uc704\ud55c \ud5ec\ud37c \ud568\uc218\nprivate val usedMemory: Long\n    get() {\n        val runtime = Runtime.getRuntime()\n        return runtime.totalMemory() - runtime.freeMemory()\n    }\n\n\/\/ \ud14c\uc2a4\ud2b8 \uc804 \uac00\ube44\uc9c0 \uceec\ub809\uc158 \uac15\uc81c \uc2e4\ud589\nSystem.gc()\nThread.sleep(100) \/\/ GC \uc644\ub8cc \ub300\uae30\n\nval startMemory = usedMemory\n\n\/\/ \ub9ac\uc0ac\uc774\uc9d5 \uc791\uc5c5 \uc218\ud589\nfor (i in 0..&lt;TEST_ITERATIONS) {\n    val resizedImage = Scalr.resize(originalImage, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_WIDTH, targetWidth)\n}\n\nval endMemory = usedMemory\nval memoryUsed = max(0, endMemory - startMemory) \/\/ \uc74c\uc218 \ubc29\uc9c0\n<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\uce21\uc815 \uc2dc \uc8fc\uc758\uc0ac\ud56d<\/b><\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ud14c\uc2a4\ud2b8 \uc804 System.gc()\ub85c \uac00\ube44\uc9c0 \uceec\ub809\uc158\uc744 \uac15\uc81c \uc2e4\ud589\ud558\uc5ec \uc815\ud655\ub3c4 \ud5a5\uc0c1<\/li>\n<li>JVM\uc758 \uba54\ubaa8\ub9ac \uad00\ub9ac \ud2b9\uc131\uc0c1 \uc815\ud655\ud55c \uce21\uc815\uc774 \uc5b4\ub824\uc6b8 \uc218 \uc788\uc73c\ub098, \uc0c1\ub300\uc801 \ube44\uad50\uc5d0\ub294 \uc720\ud6a8<\/li>\n<li>totalMemory() - freeMemory()\ub85c \uc2e4\uc81c \uc0ac\uc6a9 \uc911\uc778 \uba54\ubaa8\ub9ac \uacc4\uc0b0<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">\ud30c\uc77c \ud06c\uae30 \ubc0f \uc555\ucd95\ub960<\/h3>\n<p data-ke-size=\"size16\">\uc0dd\uc131\ub41c \uc774\ubbf8\uc9c0 \ud30c\uc77c\uc758 \ud06c\uae30\ub97c \uce21\uc815\ud558\uace0, \uc6d0\ubcf8 \ub300\ube44 \uc555\ucd95\ub960\uc744 \uacc4\uc0b0\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>val outputFile = File(\"output.jpg\")\nval fileSize = outputFile.length() \/\/ \ubc14\uc774\ud2b8 \ub2e8\uc704\n\n\/\/ \uc555\ucd95\ub960 \uacc4\uc0b0\nval compressionRatio = (1 - (fileSize.toDouble() \/ originalFileSize)) * 100\n\n\/\/ \ud30c\uc77c \ud06c\uae30\ub97c \uc0ac\ub78c\uc774 \uc77d\uae30 \uc26c\uc6b4 \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658 (B, KB, MB, GB \ub4f1)\nprivate fun formatBytes(bytes: Long): String {\n    \/\/ 1KB(1024\ubc14\uc774\ud2b8) \ubbf8\ub9cc\uc774\uba74 \ubc14\uc774\ud2b8 \ub2e8\uc704 \uadf8\ub300\ub85c \ubc18\ud658\n    if (bytes &lt; 1024) return \"$bytes B\"\n    \n    \/\/ \ub85c\uadf8\ub97c \uc774\uc6a9\ud574 \uc5b4\ub5a4 \ub2e8\uc704\ub97c \uc0ac\uc6a9\ud560\uc9c0 \uacb0\uc815\n    \/\/ ln(bytes) \/ ln(1024) = log\u2081\u2080\u2082\u2084(bytes)\n    \/\/ \uacb0\uacfc: 1=KB, 2=MB, 3=GB, 4=TB, 5=PB, 6=EB\n    val exp = (ln(bytes.toDouble()) \/ ln(1024.0)).toInt()\n    \n    \/\/ \uc9c0\uc218\uc5d0 \ud574\ub2f9\ud558\ub294 \ub2e8\uc704 \uc811\ub450\uc0ac \uc120\ud0dd\n    \/\/ exp=1\uc774\uba74 K(\ud0ac\ub85c), exp=2\uc774\uba74 M(\uba54\uac00), exp=3\uc774\uba74 G(\uae30\uac00)...\n    val pre = \"KMGTPE\"[exp - 1]\n    \n    \/\/ \uc6d0\ubcf8 \ubc14\uc774\ud2b8\ub97c \ud574\ub2f9 \ub2e8\uc704\ub85c \ub098\ub220\uc11c \uc18c\uc218\uc810 2\uc790\ub9ac\uae4c\uc9c0 \ud3ec\ub9f7\ud305\n    \/\/ \uc608: 2048 bytes &rarr; 2048 \/ 1024&sup1; = 2.00 KB\n    \/\/ \uc608: 5242880 bytes &rarr; 5242880 \/ 1024&sup2; = 5.00 MB\n    return String.format(\"%.2f %sB\", bytes \/ 1024.0.pow(exp.toDouble()), pre)\n}<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\ub7ec\ud55c \uce21\uc815 \ubc29\uc2dd\uc73c\ub85c \uc544\ub798\uc640 \uac19\uc774 \ube44\uad50 \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc6d0\ubcf8 \uc774\ubbf8\uc9c0&nbsp;<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc6d0\ubcf8 \ud06c\uae30: 848 x 1264 pixels<\/li>\n<li>\uc6d0\ubcf8 \ud30c\uc77c \ud06c\uae30: 713.26 KB<\/li>\n<li>\ubaa9\ud45c \ud06c\uae30: NNN x 626 (\uc6d0\ubcf8 \ube44\uc728 \uc720\uc9c0)<\/li>\n<li>\ud14c\uc2a4\ud2b8 \ubc18\ubcf5 \ud69f\uc218: 10\ud68c<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">\uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub420 \uc774\ubbf8\uc9c0\ub97c \uae30\uc900\uc73c\ub85c \ud14c\uc2a4\ud2b8 \ud574\ubcf4\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 style=\"color: #000000; text-align: start;\" data-ke-size=\"size26\">\ud14c\uc2a4\ud2b8 1: 420x626 \ud53d\uc140\ub85c \ucd95\uc18c<\/h2>\n<p data-ke-size=\"size16\">\uc6d0\ubcf8 \uc774\ubbf8\uc9c0 848*N \uc0ac\uc774\uc988 \uc774\ubbf8\uc9c0\ub97c 420*?(\ube44\uc728 \uc720\uc9c0)\ub85c \ubcc0\uacbd\ud558\ub294 \uacbd\uc6b0<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"blob\" data-origin-width=\"1736\" data-origin-height=\"696\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/BASwC\/dJMcahbUrQW\/Cu3FJpsTaigkmhfyBSCoy1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/BASwC\/dJMcahbUrQW\/Cu3FJpsTaigkmhfyBSCoy1\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/BASwC\/dJMcahbUrQW\/Cu3FJpsTaigkmhfyBSCoy1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBASwC%2FdJMcahbUrQW%2FCu3FJpsTaigkmhfyBSCoy1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1736\" height=\"696\" data-filename=\"blob\" data-origin-width=\"1736\" data-origin-height=\"696\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 style=\"color: #000000; text-align: start;\" data-ke-size=\"size26\">\ud14c\uc2a4\ud2b8 2: 848x1264 \ud53d\uc140 \uc720\uc9c0 (\uc6d0\ubcf8 \ud06c\uae30)<\/h2>\n<p data-ke-size=\"size16\">\uc6d0\ubcf8 \uc774\ubbf8\uc9c0 848*N \uc0ac\uc774\uc988 \uc774\ubbf8\uc9c0\ub97c 848*?(\uc6d0\ubcf8 \ud06c\uae30\uc640 \ub3d9\uc77c\ud558\uac8c)\ub85c \ubcc0\uacbd\ud558\ub294 \uacbd\uc6b0<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"blob\" data-origin-width=\"1742\" data-origin-height=\"696\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/q2VHu\/dJMcai2UwoV\/KV8aLCa48wrPfrXGXB3Kn1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/q2VHu\/dJMcai2UwoV\/KV8aLCa48wrPfrXGXB3Kn1\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/q2VHu\/dJMcai2UwoV\/KV8aLCa48wrPfrXGXB3Kn1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq2VHu%2FdJMcai2UwoV%2FKV8aLCa48wrPfrXGXB3Kn1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1742\" height=\"696\" data-filename=\"blob\" data-origin-width=\"1742\" data-origin-height=\"696\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><b>\uc18d\ub3c4 \uc21c\uc704 (\ube60\ub978 \uc21c):<\/b><\/p>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li><b>Imgscalr (SPEED)<\/b><\/li>\n<li>Imgscalr (QUALITY)&nbsp;<\/li>\n<li>Graphics2D (\uc555\ucd95)<\/li>\n<\/ol>\n<p data-ke-size=\"size16\"><b>\uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9 \uc21c\uc704 (\uc801\uc740 \uc21c):<\/b><\/p>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li><b>Thumbnailator&nbsp;(\uc555\ucd95)<\/b><\/li>\n<li>Thumbnailator(\uae30\ubcf8)<\/li>\n<li>Imgscalr (SPEED)<\/li>\n<\/ol>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub450 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc131\ub2a5\uc744 \ube44\uad50\ud558\uae30 \uc704\ud574 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uacfc \uc2e4\ud589 \uc2dc\uac04\uc744 \uce21\uc815\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc2e4\ud589 \uc2dc\uac04\uc740 CPU \uc0ac\uc6a9\ub7c9\uc744 \uac04\uc811\uc801\uc73c\ub85c \ub098\ud0c0\ub0b4\ub294 \uc9c0\ud45c\ub85c \ud310\ub2e8\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud14c\uc2a4\ud2b8 \uacb0\uacfc Imgscalr\uc640 Thumbnailator \ubaa8\ub450 \uc548\uc815\uc801\uc778 \uc131\ub2a5\uc744 \ubcf4\uc5ec\uc8fc\uc5c8\uc9c0\ub9cc, Imgscalr\ub97c SPEED \uc124\uc815\uacfc \ud568\uaed8 \uc0ac\uc6a9\ud588\uc744 \ub54c \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc740 \ube44\uc2b7\ud558\uba74\uc11c\ub3c4 \ud3c9\uade0 \uc5f0\uc0b0 \uc2dc\uac04\uc774 \ub354 \uc9e7\uace0 \uc555\ucd95\ub960\ub3c4 \ub192\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub2e4\ub9cc Imgscalr\ub294 2013\ub144 \uc774\ud6c4 \uc5c5\ub370\uc774\ud2b8\uac00 \uc911\ub2e8\ub41c \ubc18\uba74, Thumbnailator\ub294 \ube44\uad50\uc801 \ucd5c\uadfc\uae4c\uc9c0 \ud65c\ubc1c\ud788 \uc720\uc9c0\ubcf4\uc218\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \ucf54\ub4dc \uac00\ub3c5\uc131 \uce21\uba74\uc5d0\uc11c\ub3c4 Thumbnailator\uac00 \ub354 \uc77d\uae30 \uc26c\uc6b4 \uac83\uc740 \uc0ac\uc2e4\uc785\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud558\uc9c0\ub9cc \uc81c\uac00 \ub9e1\uace0 \uc788\ub294 \uc11c\ube44\uc2a4\uc5d0\uc11c \ud604\uc7ac \ud544\uc694\ud55c \uae30\ub2a5\uc740 '\uc774\ubbf8\uc9c0 \uc6a9\ub7c9 \ubc0f \uc0ac\uc774\uc988 \uc904\uc774\uae30'\ub77c\ub294 \ub2e8\uc21c\ud55c \uc791\uc5c5\uc774\uae30 \ub54c\ubb38\uc5d0, \ub9ce\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uae4c\uc9c0\ub294 \ud544\uc694\ud558\uc9c0 \uc54a\ub2e4\uace0 \ud310\ub2e8\ud588\uc2b5\ub2c8\ub2e4. \ud5a5\ud6c4 \ub354 \ubcf5\uc7a1\ud55c \uc774\ubbf8\uc9c0 \ucc98\ub9ac \uae30\ub2a5\uc774 \ud544\uc694\ud574\uc9c0\uba74 \uadf8\ub54c \ub2e4\ub978 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c \uc804\ud658\ud558\ub294 \uac83\ub3c4 \ucda9\ubd84\ud788 \uac00\ub2a5\ud560 \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc2e4\uc81c\ub85c \ub450 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c \uc0dd\uc131\ub41c \uc378\ub124\uc77c \uc774\ubbf8\uc9c0\ub97c \uc721\uc548\uc73c\ub85c \ube44\uad50\ud588\uc744 \ub54c\ub3c4 \ud488\uc9c8 \ucc28\uc774\ub97c \uac70\uc758 \ub290\ub084 \uc218 \uc5c6\uc5c8\uae30 \ub54c\ubb38\uc5d0, Imgscalr\ub97c \uc120\ud0dd\ud558\uae30\ub85c \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>","category":"\ud504\ub85c\uc81d\ud2b8\/\ud504\ub85c\uc81d\ud2b8 \uacfc\uc815","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/96","comments":"https:\/\/yeseul-dev.tistory.com\/96#entry96comment","pubDate":"Thu, 18 Dec 2025 18:08:18 +0900"},{"title":"Cloud Club 7\uae30 - \uc2a4\ud130\ub514 \uae30\ub85d","link":"https:\/\/yeseul-dev.tistory.com\/95","description":"<p data-ke-size=\"size16\">\ud074\ub77c\uc6b0\ub4dc \ud074\ub7fd\uc5d0\uc11c\ub294 \ud55c \uae30\uc218\ub97c \uc644\ub8cc\ud558\uae30 \uc704\ud574 2\ubc88\uc758 \uc2a4\ud130\ub514\uc5d0 \ucc38\uc5ec\ud574\uc57c \ud55c\ub2e4.<\/p>\n<p data-ke-size=\"size16\">7\uae30 \ud65c\ub3d9\uc744 \ub9c8\uce5c \uc9c0 \uaf64 \uc2dc\uac04\uc774 \uc9c0\ub0ac\uc9c0\ub9cc, \uae30\ub85d\uc73c\ub85c \ub0a8\uaca8\ubcf8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">1\ubc88\uc9f8 \uc2a4\ud130\ub514 - \uc2dc\ubd95\ubc29: \uc2dc\uc2a4\ud15c \ubd95\uad34 \ubc29\uc9c0 \uc704\uc6d0\ud68c<\/h2>\n<p><figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/kNFnx\/dJMcaihjD7Z\/ujWIfkKsbZuQvzqRCILQhk\/img.jpg\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/kNFnx\/dJMcaihjD7Z\/ujWIfkKsbZuQvzqRCILQhk\/img.jpg\" data-origin-width=\"458\" data-origin-height=\"602\" data-is-animation=\"false\" style=\"width: 45.363%; margin-right: 10px;\" data-widthpercent=\"45.9\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/kNFnx\/dJMcaihjD7Z\/ujWIfkKsbZuQvzqRCILQhk\/img.jpg\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNFnx%2FdJMcaihjD7Z%2FujWIfkKsbZuQvzqRCILQhk%2Fimg.jpg\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"458\" height=\"602\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/ciw6IJ\/dJMcacOV9Y3\/T5xdRJDIUksYiMRwlVF3L1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/ciw6IJ\/dJMcacOV9Y3\/T5xdRJDIUksYiMRwlVF3L1\/img.png\" data-is-animation=\"false\" data-origin-width=\"1530\" data-origin-height=\"1706\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.14.41.png\" width=\"590\" height=\"658\" data-widthpercent=\"54.1\" style=\"width: 53.4743%;\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/ciw6IJ\/dJMcacOV9Y3\/T5xdRJDIUksYiMRwlVF3L1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fciw6IJ%2FdJMcacOV9Y3%2FT5xdRJDIUksYiMRwlVF3L1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1530\" height=\"1706\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc2a4\ud130\ub514 \uc7a5\uc73c\ub85c \ucc38\uc5ec\ud55c \uccab \ubc88\uc9f8 \uc2a4\ud130\ub514\uc600\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc7ac\ubbf8\ub97c \ub354\ud558\uae30 \uc704\ud574 \uc2a4\ud130\ub514\ub9cc\uc758 \ucee8\uc149\uacfc \ub85c\uace0\ub3c4 \ub9cc\ub4e4\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.59.09.png\" data-origin-width=\"1746\" data-origin-height=\"1009\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/mbrTX\/dJMcai9snoA\/JrBmKOoDaCjsx7QgbwBAY0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/mbrTX\/dJMcai9snoA\/JrBmKOoDaCjsx7QgbwBAY0\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/mbrTX\/dJMcai9snoA\/JrBmKOoDaCjsx7QgbwBAY0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmbrTX%2FdJMcai9snoA%2FJrBmKOoDaCjsx7QgbwBAY0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"550\" height=\"318\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.59.09.png\" data-origin-width=\"1746\" data-origin-height=\"1009\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub098\ub294 \ucc45 \uc2a4\ud130\ub514\ub97c \ud560 \ub54c \ucc55\ud130\ub9c8\ub2e4 \ub0b4\uc6a9\uc744 \uaf3c\uaf3c\ud788 \uc815\ub9ac\ud558\uace0 \uae30\ub85d\ud558\ub294 \uc2a4\ud0c0\uc77c\uc740 \uc544\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\ud3b8\ud558\uac8c \uc77d\ub418, \ub3d9\uae30\ubd80\uc5ec\ub97c \uc704\ud55c \uc2a4\ud130\ub514\ub97c \uc9c4\ud589\ud558\uace0 \uc2f6\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub798\uc11c \uc790\uc720\ub85c\uc6b4 \uc778\uc99d \ubc29\uc2dd\uc73c\ub85c \uac01\uc790\ub9cc\uc758 \uc815\ub9ac\ub97c \ud574\uc11c \ub3c5\uc11c\ud558\ub294 \uac83\uc73c\ub85c \ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud574\ub2f9 \uc2a4\ud130\ub514\ub294 '\uac00\uc0c1 \uba74\uc811 \uc0ac\ub840\ub85c \ubc30\uc6b0\ub294 \ub300\uaddc\ubaa8 \uc2dc\uc2a4\ud15c \uc124\uacc4 \uae30\ucd08' 1\uad8c\uacfc 2\uad8c\uc744 \ubaa8\ub450 \uc77d\ub294 \uac83\uc774 \ubaa9\ud45c\uc600\ub2e4.<\/p>\n<p data-ke-size=\"size16\">1\uad8c\uae4c\uc9c0\ub294 \ube44\uad50\uc801 \uc21c\uc870\ub85c\uc6e0\uc9c0\ub9cc, 2\uad8c\ubd80\ud130 \ub09c\uc774\ub3c4\uac00 \uae09\uc0c1\uc2b9\ud558\uba74\uc11c \uacb0\uad6d \uc644\ub3c5\ud558\uc9c0 \ubabb\ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bf7Ljz\/dJMcad79eIe\/RwdicI91MGxNhCknSD2aE1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bf7Ljz\/dJMcad79eIe\/RwdicI91MGxNhCknSD2aE1\/img.png\" data-is-animation=\"false\" data-origin-width=\"847\" data-origin-height=\"467\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.59.39.png\" style=\"width: 49.9055%; margin-right: 10px;\" data-widthpercent=\"50.49\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bf7Ljz\/dJMcad79eIe\/RwdicI91MGxNhCknSD2aE1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf7Ljz%2FdJMcad79eIe%2FRwdicI91MGxNhCknSD2aE1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"847\" height=\"467\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cfIkF6\/dJMcaeTwmsG\/STUcHK5L5wIk2vf8RuSKKk\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cfIkF6\/dJMcaeTwmsG\/STUcHK5L5wIk2vf8RuSKKk\/img.png\" data-is-animation=\"false\" data-origin-width=\"1853\" data-origin-height=\"1042\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 9.00.24.png\" data-widthpercent=\"49.51\" style=\"width: 48.9317%;\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cfIkF6\/dJMcaeTwmsG\/STUcHK5L5wIk2vf8RuSKKk\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfIkF6%2FdJMcaeTwmsG%2FSTUcHK5L5wIk2vf8RuSKKk%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1853\" height=\"1042\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ubc1c\ud45c \uc790\ub8cc\ub098 PDF\uac00 \ub0a8\uc544\uc788\uc9c0 \uc54a\uc544 \uae30\ub85d\uc73c\ub85c \ub0a8\uae38 \uc218 \uc5c6\ub294 \uc810\uc774 \uc544\uc27d\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc2a4\ud130\ub514 \uc7a5\uc73c\ub85c\uc11c \ubcf8\ubcf4\uae30\uac00 \ub418\uc5b4\uc57c \ud588\ub294\ub370, \uac1c\uc778\uc801\uc73c\ub85c \ubab0\uc785\ub3c4\uac00 \ub0ae\uc558\ub358 \uac83 \uac19\uc544 \ub9ce\uc774 \uc544\uc26c\uc6e0\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ucc45\uc758 \ub09c\uc774\ub3c4\uac00 \uc0dd\uac01\ubcf4\ub2e4 \ub192\uc544\uc11c \ud55c \ubc88\uc73c\ub85c\ub294 \uc18c\ud654\ud558\uae30 \uc5b4\ub824\uc6e0\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uae30\ud68c\uac00 \ub41c\ub2e4\uba74 \ub2e4\uc74c\uc5d0 \ub2e4\uc2dc \ub3c4\uc804\ud574\ubcf4\uace0 \uc2f6\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">2\ubc88\uc9f8 \uc2a4\ud130\ub514 - \ud074\ud074 \ubd81\ud074\ub7fd<\/h2>\n<p><figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cZEzxp\/dJMcad1nC2r\/XJ1rmyKqKlzljdxOKrESdk\/img.jpg\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cZEzxp\/dJMcad1nC2r\/XJ1rmyKqKlzljdxOKrESdk\/img.jpg\" data-origin-width=\"458\" data-origin-height=\"588\" data-is-animation=\"false\" style=\"width: 41.825%; margin-right: 10px;\" data-widthpercent=\"42.32\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cZEzxp\/dJMcad1nC2r\/XJ1rmyKqKlzljdxOKrESdk\/img.jpg\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZEzxp%2FdJMcad1nC2r%2FXJ1rmyKqKlzljdxOKrESdk%2Fimg.jpg\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"458\" height=\"588\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cJd8yI\/dJMcajAwJNK\/qzAC9lr44Jdyy4hdGLtZE0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cJd8yI\/dJMcajAwJNK\/qzAC9lr44Jdyy4hdGLtZE0\/img.png\" data-is-animation=\"false\" data-origin-width=\"1582\" data-origin-height=\"1490\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.19.14.png\" width=\"562\" height=\"529\" style=\"width: 57.0122%;\" data-widthpercent=\"57.68\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cJd8yI\/dJMcajAwJNK\/qzAC9lr44Jdyy4hdGLtZE0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJd8yI%2FdJMcajAwJNK%2FqzAC9lr44Jdyy4hdGLtZE0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1582\" height=\"1490\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uccab \ubc88\uc9f8 \uc2a4\ud130\ub514\uc640 \ube44\uc2b7\ud558\uac8c \ucc45\uc744 \uc77d\uace0 \ubc1c\ud45c\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc9c4\ud589\ub418\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc790\uc720\ub86d\uac8c \ucc45\uc744 \uc120\uc815\ud560 \uc218 \uc788\uc5b4\uc11c '\uc8fc\ub2c8\uc5b4 \ubc31\uc5d4\ub4dc \uac1c\ubc1c\uc790\uac00 \ubc18\ub4dc\uc2dc \uc54c\uc544\uc57c \ud560 \uc2e4\ubb34 \uc9c0\uc2dd'\uc744 \uc120\ud0dd\ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ucd5c\uadfc\uc5d0 \ucd9c\uac04\ub41c \ucc45\uc774\uc5c8\uace0, \uc8fc\ub2c8\uc5b4 \uac1c\ubc1c\uc790\uc5d0\uac8c \uc88b\uc740 \uae38\uc7a1\uc774\uac00 \ub420 \uac83 \uac19\uc544 \uc120\ud0dd\ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc2e4\uc81c\ub85c \uac1c\ubc1c\ud558\uba74\uc11c \uc790\uc8fc \ub9c8\uc8fc\uce58\ub294 \ubb38\uc81c \uc0c1\ud669\uc5d0 \ub300\ud55c \ud574\uacb0\ucc45\uc744 \uc81c\uc2dc\ud558\uace0,<\/p>\n<p data-ke-size=\"size16\">\ub354 \uae4a\uc774 \uacf5\ubd80\ud558\uba74 \uc88b\uc744 \ubd80\ubd84\ub4e4\uc744 \uc9da\uc5b4\uc8fc\uc5b4 \ud604\uc5c5 \uc120\ubc30\uc758 \uc870\uc5b8\uc744 \ub4e3\ub294 \ub290\ub08c\uc774\uc5c8\ub2e4.<\/p>\n<p><figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cNaffy\/dJMcafdO7S7\/sqGwSW2bBkKEQFvxBJHQu0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cNaffy\/dJMcafdO7S7\/sqGwSW2bBkKEQFvxBJHQu0\/img.png\" data-origin-width=\"1704\" data-origin-height=\"919\" data-is-animation=\"false\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 9.15.59.png\" style=\"width: 49.9701%; margin-right: 10px;\" data-widthpercent=\"50.56\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cNaffy\/dJMcafdO7S7\/sqGwSW2bBkKEQFvxBJHQu0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNaffy%2FdJMcafdO7S7%2FsqGwSW2bBkKEQFvxBJHQu0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1704\" height=\"919\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bRzotz\/dJMcaboXsqa\/jJ8lqSlz8xsREnlNlIR1S0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bRzotz\/dJMcaboXsqa\/jJ8lqSlz8xsREnlNlIR1S0\/img.png\" width=\"546\" height=\"301\" data-origin-width=\"2078\" data-origin-height=\"1146\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.43.18.png\" data-is-animation=\"false\" style=\"width: 48.8671%;\" data-widthpercent=\"49.44\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bRzotz\/dJMcaboXsqa\/jJ8lqSlz8xsREnlNlIR1S0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRzotz%2FdJMcaboXsqa%2FjJ8lqSlz8xsREnlNlIR1S0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"2078\" height=\"1146\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uac01\uc790 10\ubd84\uc758 \ubc1c\ud45c \uc2dc\uac04\uc774 \uc8fc\uc5b4\uc84c\uace0, \ub098\ub294 \ucc45\uc5d0\uc11c \uae30\uc5b5\uc5d0 \ub0a8\uc558\ub358 3\uac00\uc9c0 \uc8fc\uc81c\ub97c \ubc1c\ud45c\ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bppM4I\/dJMb99YYMJb\/zgAqVRm9pAggmOIjHhZqA1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bppM4I\/dJMb99YYMJb\/zgAqVRm9pAggmOIjHhZqA1\/img.png\" data-is-animation=\"false\" data-origin-width=\"3420\" data-origin-height=\"1924\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.44.25.png\" data-widthpercent=\"50\" style=\"width: 49.4186%; margin-right: 10px;\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bppM4I\/dJMb99YYMJb\/zgAqVRm9pAggmOIjHhZqA1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbppM4I%2FdJMb99YYMJb%2FzgAqVRm9pAggmOIjHhZqA1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"3420\" height=\"1924\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/L2mZR\/dJMcac2tjgb\/1KPtaFXiR8wZ6KHob1C5j1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/L2mZR\/dJMcac2tjgb\/1KPtaFXiR8wZ6KHob1C5j1\/img.png\" data-is-animation=\"false\" data-origin-width=\"3420\" data-origin-height=\"1924\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-02 \u110b\u1169\u1112\u116e 8.45.23.png\" style=\"width: 49.4186%;\" data-widthpercent=\"50\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/L2mZR\/dJMcac2tjgb\/1KPtaFXiR8wZ6KHob1C5j1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL2mZR%2FdJMcac2tjgb%2F1KPtaFXiR8wZ6KHob1C5j1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"3420\" height=\"1924\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li><b>DB\uc758 \ub2e8\ud3b8\ud654\uc640 \ucd5c\uc801\ud654<\/b><br \/>B+ \ud2b8\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 DB\uc758 \ud2b9\uc131\uc0c1 \ub2e8\ud3b8\ud654\uac00 \ubc1c\uc0dd\ud558\uba70, Optimize \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ucd5c\uc801\ud654\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc744 \ubc30\uc6e0\ub2e4.<\/li>\n<li><b>Kafka\uc640 RabbitMQ \uac04\ub2e8 \ube44\uad50<\/b><\/li>\n<li><b>\uacbd\ub7c9 \uc2a4\ub808\ub4dc\uc640 \ube44\ub3d9\uae30 I\/O<\/b><br \/>I\/O \ub300\uae30\uc640 \ucee8\ud14d\uc2a4\ud2b8 \uc2a4\uc704\uce6d\uc73c\ub85c \uc778\ud55c CPU \ub0ad\ube44, \uc694\uccad\ub9c8\ub2e4 \uc2a4\ub808\ub4dc\ub97c \ud560\ub2f9\ud558\uba74\uc11c \ubc1c\uc0dd\ud558\ub294 \ub192\uc740 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9 \ubb38\uc81c\ub97c \ub2e4\ub918\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \uac00\uc0c1 \uc2a4\ub808\ub4dc\ub098 \ucf54\ub8e8\ud2f4 \uac19\uc740 \uacbd\ub7c9 \uc2a4\ub808\ub4dc, \ub17c\ube14\ub85c\ud0b9 \ub610\ub294 \ube44\ub3d9\uae30 I\/O\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4\ub294 \ub0b4\uc6a9\uc774\uc5c8\ub2e4.<\/li>\n<\/ol>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ubc1c\ud45c \ub2f9\uc2dc\uc5d0\ub294 \"\uadf8\ub807\uad6c\ub098\" \uc815\ub3c4\ub85c\ub9cc \uc774\ud574\ud588\ub294\ub370,<\/p>\n<p data-ke-size=\"size16\">\uc774\ud6c4 \ube44\ub3d9\uae30, \ucf54\ub8e8\ud2f4, \uc774\ubca4\ud2b8 \uae30\ubc18 \ucc98\ub9ac\uc5d0 \uad00\uc2ec\uc744 \uac16\uac8c \ub418\uba74\uc11c \uad00\ub828 \uac15\uc758\ub97c \ucc3e\uc544\ubcf4\uac8c \ub418\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\"\uadf8\ub54c \uadf8 \ub0b4\uc6a9\uc774 \uc774\uac70\uc600\uad6c\ub098!\" \ud558\uba70 \uc870\uae08\uc529 \uc774\ud574\uc758 \ud3ed\uc744 \ub113\ud600\uac00\uace0 \uc788\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc544\ub798\ub294 \ub2f9\uc2dc \ubc1c\ud45c \uc790\ub8cc\ub97c \uc544\uce74\uc774\ube0c\uc6a9\uc73c\ub85c \ucca8\ubd80\ud55c\ub2e4.<\/p>\n<p><figure class=\"fileblock\" data-ke-align=\"alignLeft\"><a href=\"https:\/\/blog.kakaocdn.net\/dn\/dbNoZo\/dJMcabJgfN2\/VVC5kfvI4tK4DkGzHZ1Sc0\/%E1%84%8F%E1%85%B3%E1%86%AF%E1%84%8F%E1%85%B3%E1%86%AF%E1%84%87%E1%85%AE%E1%86%A8%E1%84%8F%E1%85%B3%E1%86%AF%E1%84%85%E1%85%A5%E1%86%B8_%E1%84%87%E1%85%A1%E1%86%AF%E1%84%91%E1%85%AD%E1%84%8C%E1%85%A1%E1%84%85%E1%85%AD.pdf?attach=1&amp;knm=tfile.pdf\" class=\"\">\n    <div class=\"image\"><\/div>\n    <div class=\"desc\"><div class=\"filename\"><span class=\"name\">\u110f\u1173\u11af\u110f\u1173\u11af\u1107\u116e\u11a8\u110f\u1173\u11af\u1105\u1165\u11b8_\u1107\u1161\u11af\u1111\u116d\u110c\u1161\u1105\u116d.pdf<\/span><\/div>\n<div class=\"size\">3.15MB<\/div>\n<\/div>\n  <\/a><\/figure>\n<\/p>","category":"\uae30\ud0c0\/\ud68c\uace0","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/95","comments":"https:\/\/yeseul-dev.tistory.com\/95#entry95comment","pubDate":"Sun, 2 Nov 2025 21:13:23 +0900"},{"title":"10\uc6d4\uc758 \uc774\ubaa8 \uc800\ubaa8","link":"https:\/\/yeseul-dev.tistory.com\/94","description":"<p data-ke-size=\"size16\">10\uc6d4\uc5d0\ub294 \uae34 \uc5f0\ud734\uac00 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ubc14\ub85c \ucd94\uc11d!<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc778\ud504\ub7f0\uc5d0\uc11c \ud2b9\ubcc4\ud55c \uc774\ubca4\ud2b8\ub97c \uc9c4\ud589\ud588\uc5b4\uc694. \ubc14\ub85c<span>&nbsp;<\/span><a style=\"color: #0070d1;\" href=\"https:\/\/www.inflearn.com\/challenge\/x27%ED%96%A5%EB%A1%9Cx27-%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EC%B6%94%EC%84%9D-%EC%99%84\/dashboard\">'\ud5a5\ub85c'\uc640 \ud568\uaed8\ud558\ub294 \ucd94\uc11d \uc644\uac15 \ucc4c\ub9b0\uc9c0<\/a>\uc600\ub294\ub370\uc694.<\/p>\n<p style=\"color: #333333; text-align: start;\" data-ke-size=\"size16\">\uc5f0\ud734 \ub3d9\uc548 \ub9e4\uc77c 1\uac15 \uc774\uc0c1 \ub4e3\uace0 \uc778\uc99d\uc744 \ub0a8\uae30\uba74 \uc2e0\uccad\ube44\ub97c \ud658\uae09\ud574\uc8fc\ub294 \uc774\ubca4\ud2b8\uc600\uc5b4\uc694.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<figure id=\"og_1761980782609\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"website\" data-og-title=\"'\ud5a5\ub85c' \uc640 \ud568\uaed8\ud558\ub294 \ucd94\uc11d \uc644\uac15 \ucc4c\ub9b0\uc9c0 \ucc4c\ub9b0\uc9c0 | \ud5a5\ub85c - \uc778\ud504\ub7f0\" data-og-description=\"40% \uac15\uc758 \ucfe0\ud3f0\ub3c4 \ubc1b\uace0, \uc5f0\ud734 \ub3d9\uc548 \ubbf8\uc158 \uc644\uc8fc\ud558\uba74 \uc2e0\uccad\ube44\uae4c\uc9c0 \ubabd\ub545 \ud658\uae09! \ud5a5\ub85c\uc640 \ud568\uaed8\ud558\ub294 \ubc11\uc838\uc57c \ubcf8\uc804 \uadf8 \uc774\uc0c1\uc778 \ucd94\uc11d \ucc4c\ub9b0\uc9c0!\" data-og-host=\"www.inflearn.com\" data-og-source-url=\"https:\/\/www.inflearn.com\/challenge\/x27%ED%96%A5%EB%A1%9Cx27-%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EC%B6%94%EC%84%9D-%EC%99%84\/dashboard\" data-og-url=\"https:\/\/www.inflearn.com\/challenge\/x27%ED%96%A5%EB%A1%9Cx27-%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EC%B6%94%EC%84%9D-%EC%99%84\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/U2ore\/hyZMLWawl6\/WTzZGkYMzywRKdnvggl4H0\/img.png?width=403&amp;height=262&amp;face=0_0_403_262,https:\/\/scrap.kakaocdn.net\/dn\/bb9gCf\/hyZMTzSr0l\/GmNKC5Fm0jk10Amzd3CwFk\/img.png?width=403&amp;height=262&amp;face=0_0_403_262,https:\/\/scrap.kakaocdn.net\/dn\/kvzCi\/hyZMNsVlac\/0kH19nT1VmJWvFQtM5j5PK\/img.jpg?width=1024&amp;height=1328&amp;face=255_319_605_700\"><a href=\"https:\/\/www.inflearn.com\/challenge\/x27%ED%96%A5%EB%A1%9Cx27-%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EC%B6%94%EC%84%9D-%EC%99%84\/dashboard\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/www.inflearn.com\/challenge\/x27%ED%96%A5%EB%A1%9Cx27-%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EC%B6%94%EC%84%9D-%EC%99%84\/dashboard\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/U2ore\/hyZMLWawl6\/WTzZGkYMzywRKdnvggl4H0\/img.png?width=403&amp;height=262&amp;face=0_0_403_262,https:\/\/scrap.kakaocdn.net\/dn\/bb9gCf\/hyZMTzSr0l\/GmNKC5Fm0jk10Amzd3CwFk\/img.png?width=403&amp;height=262&amp;face=0_0_403_262,https:\/\/scrap.kakaocdn.net\/dn\/kvzCi\/hyZMNsVlac\/0kH19nT1VmJWvFQtM5j5PK\/img.jpg?width=1024&amp;height=1328&amp;face=255_319_605_700');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">'\ud5a5\ub85c' \uc640 \ud568\uaed8\ud558\ub294 \ucd94\uc11d \uc644\uac15 \ucc4c\ub9b0\uc9c0 \ucc4c\ub9b0\uc9c0 | \ud5a5\ub85c - \uc778\ud504\ub7f0<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">40% \uac15\uc758 \ucfe0\ud3f0\ub3c4 \ubc1b\uace0, \uc5f0\ud734 \ub3d9\uc548 \ubbf8\uc158 \uc644\uc8fc\ud558\uba74 \uc2e0\uccad\ube44\uae4c\uc9c0 \ubabd\ub545 \ud658\uae09! \ud5a5\ub85c\uc640 \ud568\uaed8\ud558\ub294 \ubc11\uc838\uc57c \ubcf8\uc804 \uadf8 \uc774\uc0c1\uc778 \ucd94\uc11d \ucc4c\ub9b0\uc9c0!<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">www.inflearn.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub7f0\ub370 \uc81c\uac00 \ub2f9\ucca8\ub410\uc5b4\uc694!  <\/p>\n<p><figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/maG1t\/dJMcaa4En7r\/T9SFoWF1swIjLSS4lvkUx0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/maG1t\/dJMcaa4En7r\/T9SFoWF1swIjLSS4lvkUx0\/img.png\" width=\"401\" height=\"394\" data-is-animation=\"false\" data-origin-height=\"944\" data-origin-width=\"960\" data-widthpercent=\"51.66\" style=\"width: 51.0606%; margin-right: 10px;\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/maG1t\/dJMcaa4En7r\/T9SFoWF1swIjLSS4lvkUx0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmaG1t%2FdJMcaa4En7r%2FT9SFoWF1swIjLSS4lvkUx0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"960\" height=\"944\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/z8quQ\/dJMb99ScRaE\/Sv6VscHhehkml4dFPK0iZK\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/z8quQ\/dJMb99ScRaE\/Sv6VscHhehkml4dFPK0iZK\/img.png\" data-origin-width=\"1080\" data-origin-height=\"1135\" data-is-animation=\"false\" width=\"510\" height=\"536\" style=\"width: 47.7766%;\" data-widthpercent=\"48.34\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/z8quQ\/dJMb99ScRaE\/Sv6VscHhehkml4dFPK0iZK\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz8quQ%2FdJMb99ScRaE%2FSv6VscHhehkml4dFPK0iZK%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1080\" height=\"1135\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc0ac\uc2e4 1600\uba85\uc774 \ub118\ub294 \ubd84\ub4e4\uc774 \ucc38\uc5ec\ud558\ub294 \ucc4c\ub9b0\uc9c0\uc5d0\uc11c \ub531 10\uba85\ub9cc \ucd94\ucca8\uc774\ub77c \uae30\ub300\ub3c4 \uc548 \ud558\uace0 \uc788\uc5c8\uac70\ub4e0\uc694.<\/p>\n<p data-ke-size=\"size16\">\ubb38\uc790\ub97c \ubc1b\uace0 \uc9c4\uc9dc \uae5c\uc9dd \ub180\ub790\uc5b4\uc694.<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-01 \u110b\u1169\u1112\u116e 4.04.53.png\" data-origin-width=\"652\" data-origin-height=\"222\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/chOYdr\/dJMcahQeU7f\/8wycbSCmmC7TIKqWAE2vc0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/chOYdr\/dJMcahQeU7f\/8wycbSCmmC7TIKqWAE2vc0\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/chOYdr\/dJMcahQeU7f\/8wycbSCmmC7TIKqWAE2vc0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchOYdr%2FdJMcahQeU7f%2F8wycbSCmmC7TIKqWAE2vc0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"323\" height=\"110\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-01 \u110b\u1169\u1112\u116e 4.04.53.png\" data-origin-width=\"652\" data-origin-height=\"222\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc81c\uac00 \uad6c\ub9e4\ud55c \uac15\uc758\uac00 25\ub9cc 7\ucc9c\uc6d0\uc774\uc5c8\ub294\ub370,<\/p>\n<p data-ke-size=\"size16\">\uc194\uc9c1\ud788 \uc804\uc561\uc774 \ub2e4 \ud658\uae09\ub420 \uac70\ub77c\uace0\ub294 \uc0dd\uac01\ub3c4 \ubabb \ud588\uc5b4\uc694. \ud655\uc778\ud558\uace0 \uc815\ub9d0 \uae30\ubee4\ub2f5\ub2c8\ub2e4<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc5ec\uae30\uc5d0 \ucc4c\ub9b0\uc9c0 \uc131\uacf5 \ubcf4\uc0c1\uc73c\ub85c \ubc1b\uc740 40% \ud560\uc778 \ucfe0\ud3f0\uacfc \ud658\uae09\ubc1b\uc740 25\ub9cc 7\ucc9c \ud3ec\uc778\ud2b8\ub97c \ud569\uce58\ub2c8,<\/p>\n<p data-ke-size=\"size16\">\ubb34\ub824 40\ub9cc\uc6d0\uc774 \ub118\ub294 \uae08\uc561\uc758 \uac15\uc758\ub97c \ucd94\uac00\ub85c \uad6c\ub9e4\ud560 \uc218 \uc788\uc5c8\uc5b4\uc694. (\uc644\uc804 \uac1c\uc774\ub4dd)<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bEz8Ko\/dJMcabJfUJK\/xUK3vg49pmDmwkHABHyceK\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bEz8Ko\/dJMcabJfUJK\/xUK3vg49pmDmwkHABHyceK\/img.png\" data-is-animation=\"false\" data-origin-width=\"2414\" data-origin-height=\"1750\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-01 \u110b\u1169\u1112\u116e 4.20.20.png\" style=\"width: 43.6899%; margin-right: 10px;\" data-widthpercent=\"44.2\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bEz8Ko\/dJMcabJfUJK\/xUK3vg49pmDmwkHABHyceK\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEz8Ko%2FdJMcabJfUJK%2FxUK3vg49pmDmwkHABHyceK%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"2414\" height=\"1750\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bLb2Vl\/dJMcajtKNs3\/tMuNHR7YxYY7QE5laj3M81\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bLb2Vl\/dJMcajtKNs3\/tMuNHR7YxYY7QE5laj3M81\/img.png\" width=\"550\" height=\"316\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-11-01 \u110b\u1169\u1112\u116e 4.14.11.png\" data-origin-height=\"680\" data-origin-width=\"1184\" data-is-animation=\"false\" data-widthpercent=\"55.8\" style=\"width: 55.1473%;\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bLb2Vl\/dJMcajtKNs3\/tMuNHR7YxYY7QE5laj3M81\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLb2Vl%2FdJMcajtKNs3%2FtMuNHR7YxYY7QE5laj3M81%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1184\" height=\"680\"\/><\/span><\/div>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ud658\uae09\ubc1b\uc740 \ub3c8\uc73c\ub85c \ud3c9\uc18c \uc81c\uac00 \ubd80\uc871\ud558\ub2e4\uace0 \uc0dd\uac01\ud558\uac70\ub098 \ub208\uc5ec\uaca8\ubcf4\ub358 \uac15\uc758\ub4e4\ub85c \uaf49\uaf49 \ucc44\uc6cc\uc11c \uad6c\ub9e4\ud588\uc5b4\uc694.(\ubb34\ub824 9\uac1c \uac15\uc758..!)<\/p>\n<p data-ke-size=\"size16\">\ud604\uc7ac \ud558\ub098\uc529 \uc5f4\uc2ec\ud788 \ub4e3\uace0 \uc788\ub294 \uc911\uc774\uace0\uc694.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\ubbf8 \uc644\uac15\ud55c \uac15\uc758\ub4e4\ub3c4 \uc788\ub294\ub370,<\/p>\n<p data-ke-size=\"size16\">\ud2b9\ud788 \ub85c\uadf8 \uad00\ub9ac(\uac1c\ubc1c\uc790\uc5d0\uac8c \ud544\uc694\ud55c \ub85c\uadf8 \uad00\ub9ac: <a href=\"https:\/\/inf.run\/4XD3B\" target=\"_blank\" rel=\"noopener&nbsp;noreferrer\">https:\/\/inf.run\/4XD3B<\/a>) \uad00\ub828\ub41c \uac15\uc758\ub294 \ud68c\uc0ac\uc5d0 \ubc14\ub85c \uc801\uc6a9\ud574\uc11c \ub514\ubc84\uae45\ud560 \ub54c \uc3e0\uc3e0\ud558\uac8c \ub3c4\uc6c0\ubc1b\uace0 \uc788\uc2b5\ub2c8\ub2e4 \u263a\ufe0f <\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<figure id=\"og_1761987184434\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"website\" data-og-title=\"\uac1c\ubc1c\uc790\uc5d0\uac8c \ud544\uc694\ud55c \ub85c\uadf8 \uad00\ub9ac| \uc774\uc900\ud615(Foo) - \uc778\ud504\ub7f0 \uac15\uc758\" data-og-description=\"\ud604\uc7ac \ud3c9\uc810 4.9\uc810 \uc218\uac15\uc0dd 1,033\uba85\uc778 \uac15\uc758\ub97c \ub9cc\ub098\ubcf4\uc138\uc694. \uc5b4\ub5a4 \ub85c\uadf8\ub97c \ub0a8\uaca8\uc57c \ud558\ub294\uc9c0\ubd80\ud130 \uc2dc\uc791\ud558\uc5ec \ub85c\uadf8\ub97c \uc218\uc9d1\ud558\uace0 \ud65c\uc6a9\ud558\uae30\uae4c\uc9c0 \uc804\uccb4\uc801\uc778 \uc0ac\uc774\ud074\uc5d0 \ub300\ud574 \ub2e4\ub8f9\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc5b4\ub5a4 \ub85c\uadf8\ub97c\" data-og-host=\"www.inflearn.com\" data-og-source-url=\"https:\/\/inf.run\/4XD3B\" data-og-url=\"https:\/\/www.inflearn.com\/course\/%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%97%90%EA%B2%8C-%ED%95%84%EC%9A%94%ED%95%9C-%EB%A1%9C%EA%B7%B8%EA%B4%80%EB%A6%AC\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/boA7gu\/hyZMLPrffE\/sKuG8ZwTk4fPykB9bY1fW1\/img.jpg?width=1200&amp;height=781&amp;face=0_0_1200_781,https:\/\/scrap.kakaocdn.net\/dn\/A8Lx8\/hyZMXI50TD\/kDYlhTKMEmo81g6plrntxK\/img.jpg?width=1200&amp;height=781&amp;face=0_0_1200_781,https:\/\/scrap.kakaocdn.net\/dn\/gSlup\/hyZMOFln89\/y8Ln2KC5k2mp2mFFihIxr1\/img.jpg?width=1200&amp;height=781&amp;face=0_0_1200_781\"><a href=\"https:\/\/inf.run\/4XD3B\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/inf.run\/4XD3B\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/boA7gu\/hyZMLPrffE\/sKuG8ZwTk4fPykB9bY1fW1\/img.jpg?width=1200&amp;height=781&amp;face=0_0_1200_781,https:\/\/scrap.kakaocdn.net\/dn\/A8Lx8\/hyZMXI50TD\/kDYlhTKMEmo81g6plrntxK\/img.jpg?width=1200&amp;height=781&amp;face=0_0_1200_781,https:\/\/scrap.kakaocdn.net\/dn\/gSlup\/hyZMOFln89\/y8Ln2KC5k2mp2mFFihIxr1\/img.jpg?width=1200&amp;height=781&amp;face=0_0_1200_781');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">\uac1c\ubc1c\uc790\uc5d0\uac8c \ud544\uc694\ud55c \ub85c\uadf8 \uad00\ub9ac| \uc774\uc900\ud615(Foo) - \uc778\ud504\ub7f0 \uac15\uc758<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">\ud604\uc7ac \ud3c9\uc810 4.9\uc810 \uc218\uac15\uc0dd 1,033\uba85\uc778 \uac15\uc758\ub97c \ub9cc\ub098\ubcf4\uc138\uc694. \uc5b4\ub5a4 \ub85c\uadf8\ub97c \ub0a8\uaca8\uc57c \ud558\ub294\uc9c0\ubd80\ud130 \uc2dc\uc791\ud558\uc5ec \ub85c\uadf8\ub97c \uc218\uc9d1\ud558\uace0 \ud65c\uc6a9\ud558\uae30\uae4c\uc9c0 \uc804\uccb4\uc801\uc778 \uc0ac\uc774\ud074\uc5d0 \ub300\ud574 \ub2e4\ub8f9\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uc5b4\ub5a4 \ub85c\uadf8\ub97c<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">www.inflearn.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">&nbsp;<\/p>","category":"\uae30\ud0c0\/\uc77c\uae30","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/94","comments":"https:\/\/yeseul-dev.tistory.com\/94#entry94comment","pubDate":"Sat, 1 Nov 2025 16:23:54 +0900"},{"title":"Spring Boot \ub2e4\uad6d\uc5b4 \uc11c\ube44\uc2a4 \uad6c\ud604\ud558\uae30","link":"https:\/\/yeseul-dev.tistory.com\/93","description":"<p data-ke-size=\"size16\">\uae00\ub85c\ubc8c \uc11c\ube44\uc2a4\ub97c \uac1c\ubc1c\ud560 \ub54c \ub2e4\uad6d\uc5b4 \uc9c0\uc6d0\uc740 \ud544\uc218\uc801\uc778 \uae30\ub2a5\uc785\ub2c8\ub2e4. HTTP\uc758 Accept-Language \ud5e4\ub354\ub97c \ud65c\uc6a9\ud558\uba74 \uc0ac\uc6a9\uc790\uc758 \uc5b8\uc5b4 \uc124\uc815\uc5d0 \ub530\ub77c \uc790\ub3d9\uc73c\ub85c \uc801\uc808\ud55c \uc5b8\uc5b4\ub85c \uc11c\ube44\uc2a4\ub97c \uc81c\uacf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 HTTP \uae30\ucd08\ubd80\ud130 Spring Boot\uc5d0\uc11c Accept-Language\ub97c \ud65c\uc6a9\ud55c \ub2e4\uad6d\uc5b4 \uc11c\ube44\uc2a4 \uad6c\ud604\uae4c\uc9c0 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<blockquote style=\"color: #0e0e0e;\" data-ke-style=\"style1\">\uc774 \uae00\uc5d0\uc11c \uc0ac\uc6a9\ud55c \uc608\uc81c \ucf54\ub4dc\ub294 GitHub \ub808\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \uc815\ub9ac\ud574 \ub450\uc5c8\uc2b5\ub2c8\ub2e4.<br \/>\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uae00 \ud558\ub2e8\uc758 \ub9c1\ud06c\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694.<\/blockquote>\n<h2 data-ke-size=\"size26\">HTTP \uae30\ucd08 \uc774\ud574\ud558\uae30<\/h2>\n<h3 data-ke-size=\"size23\">HTTP\ub780?<\/h3>\n<p data-ke-size=\"size16\"><b>HTTP(HyperText Transfer Protocol)<\/b>\ub294 \uc6f9\uc5d0\uc11c \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc11c\ubc84 \uac04\uc758 \ud1b5\uc2e0\uc744 \uc704\ud55c \ud504\ub85c\ud1a0\ucf5c\uc785\ub2c8\ub2e4. \uc694\uccad-\uc751\ub2f5(Request-Response) \ubaa8\ub378\uc744 \uae30\ubc18\uc73c\ub85c \ud558\uba70, \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc11c\ubc84\uc5d0 \uc694\uccad\uc744 \ubcf4\ub0b4\uba74 \uc11c\ubc84\uac00 \uc751\ub2f5\uc744 \ubc18\ud658\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<h3 data-ke-size=\"size23\">HTTP \ud5e4\ub354\uc758 \uc5ed\ud560<\/h3>\n<p data-ke-size=\"size16\">HTTP \ud5e4\ub354\ub294 \uc694\uccad\uacfc \uc751\ub2f5\uc5d0 \ub300\ud55c \uba54\ud0c0\ub370\uc774\ud130\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4. \ud5e4\ub354\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc815\ubcf4\ub97c \ud3ec\ud568\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ucee8\ud150\uce20 \ud0c0\uc785 \ubc0f \uc778\ucf54\ub529 \uc815\ubcf4<\/li>\n<li>\uc778\uc99d \ubc0f \uad8c\ud55c \uc815\ubcf4<\/li>\n<li>\uce90\uc2f1 \uc815\ucc45<\/li>\n<li><b>\ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc5b8\uc5b4 \uc120\ud638\ub3c4<\/b><\/li>\n<\/ul>\n<h2 data-ke-size=\"size26\">Accept-Language \ud5e4\ub354 \uc54c\uc544\ubcf4\uae30<\/h2>\n<h3 data-ke-size=\"size23\">Accept-Language\ub780?<\/h3>\n<p data-ke-size=\"size16\"><b>Accept-Language<\/b> \ud5e4\ub354\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc120\ud638\ud558\ub294 \uc5b8\uc5b4\ub97c \uc11c\ubc84\uc5d0 \uc54c\ub824\uc8fc\ub294 HTTP \uc694\uccad \ud5e4\ub354\uc785\ub2c8\ub2e4. \ube0c\ub77c\uc6b0\uc800\ub294 \uc0ac\uc6a9\uc790\uc758 \uc5b8\uc5b4 \uc124\uc815\uc744 \uae30\ubc18\uc73c\ub85c \uc774 \ud5e4\ub354\ub97c \uc790\ub3d9\uc73c\ub85c \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n<h3 data-ke-size=\"size23\">Accept-Language \ud5e4\ub354 \uad6c\uc870<\/h3>\n<pre class=\"angelscript\"><code>Accept-Language: ko-KR,ko;q=0.9,en;q=0.8,en-US;q=0.7<\/code><\/pre>\n<p data-ke-size=\"size16\">\uc774 \ud5e4\ub354\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud574\uc11d\ub429\ub2c8\ub2e4:<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><code>ko-KR<\/code>: \ud55c\uad6d\uc5b4(\ub300\ud55c\ubbfc\uad6d) - \uc6b0\uc120\uc21c\uc704 1.0 (\uae30\ubcf8\uac12)<\/li>\n<li><code>ko<\/code>: \ud55c\uad6d\uc5b4(\uc77c\ubc18) - \uc6b0\uc120\uc21c\uc704 0.9<\/li>\n<li><code>en<\/code>: \uc601\uc5b4(\uc77c\ubc18) - \uc6b0\uc120\uc21c\uc704 0.8<\/li>\n<li><code>en-US<\/code>: \uc601\uc5b4(\ubbf8\uad6d) - \uc6b0\uc120\uc21c\uc704 0.7<\/li>\n<\/ul>\n<h3 data-ke-size=\"size23\">\uc5b8\uc5b4 \ud0dc\uadf8 \ud615\uc2dd<\/h3>\n<p data-ke-size=\"size16\">\uc5b8\uc5b4 \ud0dc\uadf8\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud615\uc2dd\uc744 \ub530\ub985\ub2c8\ub2e4:<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><code>ko<\/code>: \uc5b8\uc5b4 \ucf54\ub4dc\ub9cc<\/li>\n<li><code>ko-KR<\/code>: \uc5b8\uc5b4-\uad6d\uac00 \ucf54\ub4dc -&gt; en-US(\ubbf8\uad6d \uc601\uc5b4)\uc640 en-GB(\uc601\uad6d \uc601\uc5b4), zh-CN(\uc911\uad6d \uac04\uccb4)\uc640 zh-TW(\ub300\ub9cc \ubc88\uccb4) \ub4f1<\/li>\n<li><code>zh-Hans-CN<\/code>: \uc5b8\uc5b4-\ubb38\uc790\uccb4\uacc4-\uad6d\uac00 \ucf54\ub4dc<\/li>\n<\/ul>\n<h3 data-ke-size=\"size23\">\ud488\uc9c8 \uac12(q-value)<\/h3>\n<p data-ke-size=\"size16\">\ud488\uc9c8 \uac12\uc740 0.0\ubd80\ud130 1.0\uae4c\uc9c0\uc758 \uac12\uc73c\ub85c, \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc5b8\uc5b4 \uc120\ud638\ub3c4\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4:<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>1.0: \uac00\uc7a5 \uc120\ud638 (\uae30\ubcf8\uac12, \uc0dd\ub7b5 \uac00\ub2a5)<\/li>\n<li>0.8: \ub192\uc740 \uc120\ud638\ub3c4<\/li>\n<li>0.5: \ubcf4\ud1b5 \uc120\ud638\ub3c4<\/li>\n<li>0.0: \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uc74c<\/li>\n<\/ul>\n<h2 data-ke-size=\"size26\">Spring Boot\uc5d0\uc11c \ub2e4\uad6d\uc5b4 \uc11c\ube44\uc2a4 \uad6c\ud604\ud558\uae30<\/h2>\n<p data-ke-size=\"size16\">\uad6d\uc81c\ud654 \ud558\ub294 \ub450 \uac00\uc9c0\uc758 \ubc29\ubc95<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\" border=\"1\" data-ke-align=\"alignLeft\" data-ke-style=\"style12\">\n<tbody>\n<tr>\n<td style=\"width: 33.3333%;\">\uad6c\ubd84<\/td>\n<td style=\"width: 33.3333%;\">messages.properties<\/td>\n<td style=\"width: 33.3333%;\">DB \ubc29\uc2dd<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">\uad6c\ud604 \ubcf5\uc7a1\ub3c4<\/td>\n<td style=\"width: 33.3333%;\">\uac04\ub2e8(\uc2a4\ud504\ub9c1 \uae30\ubcf8 \uae30\ub2a5)<\/td>\n<td style=\"width: 33.3333%;\">\ubcf5\uc7a1(\ud14c\uc774\ube14 \uc124\uacc4)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">\uc131\ub2a5<\/td>\n<td style=\"width: 33.3333%;\">\ube60\ub984(\uba54\ubaa8\ub9ac \ub85c\ub4dc)<\/td>\n<td style=\"width: 33.3333%;\">\ub290\ub9bc(DB \uc870\ud68c \ud544\uc694)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">\uad00\ub9ac \ud3b8\uc758\uc131<\/td>\n<td style=\"width: 33.3333%;\">\ud30c\uc77c \uc218\uc815 \ud6c4 \uc7ac\ubc30\ud3ec \ud574\uc57c\ud558\ubbc0\ub85c \uac1c\ubc1c\uc790\ub9cc \uc218\uc815 \uac00\ub2a5<\/td>\n<td style=\"width: 33.3333%;\">\uc2e4\uc2dc\uac04 \uc218\uc815 \uac00\ub2a5<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">\ubc84\uc804 \uad00\ub9ac<\/td>\n<td style=\"width: 33.3333%;\">\uc26c\uc6c0<\/td>\n<td style=\"width: 33.3333%;\">\uc5b4\ub824\uc6c0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">1. \uad6d\uc81c\ud654 \uc124\uc815<\/h3>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>@Configuration\nclass LocaleConfig {\n\n    @Bean\n    fun localeResolver(): LocaleResolver {\n        val resolver = AcceptHeaderLocaleResolver().apply {\n            \/\/  \ufe0f \ubcf4\uc548 &amp; \uc131\ub2a5 - DB\uc5d0 \uc788\ub294 \uc5b8\uc5b4\ub9cc \ucc98\ub9ac\n            setSupportedLocales(\n                listOf(\n                    Locale.ENGLISH,    \/\/ \"en\"\n                    Locale.KOREAN,     \/\/ \"ko\"\n                    Locale.JAPANESE,   \/\/ \"ja\"\n                    Locale.CHINESE     \/\/ \"zh\"\n                )\n            )\n            \/\/   \uc608\uce21 \uac00\ub2a5\ud55c \uae30\ubcf8\uac12 - \ub9e4\uc6b0 \uc911\uc694!\n            setDefaultLocale(Locale.ENGLISH)\n        }\n\n        return resolver\n    }\n}<\/code><\/pre>\n<h3 data-ke-size=\"size23\">2. \uba54\uc2dc\uc9c0 \ud30c\uc77c \uc0dd\uc131<\/h3>\n<p data-ke-size=\"size16\"><code>src\/main\/resources\/<\/code> \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc5b8\uc5b4\ubcc4 \uba54\uc2dc\uc9c0 \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4:<\/p>\n<p data-ke-size=\"size16\"><b>messages.properties (\uae30\ubcf8)<\/b><\/p>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>hello=\uc548\ub155\ud558\uc138\uc694\nwelcome=\ud658\uc601\ud569\ub2c8\ub2e4\nuser.name=\uc0ac\uc6a9\uc790 \uc774\ub984\nuser.email=\uc774\uba54\uc77c\nbutton.save=\uc800\uc7a5\nbutton.cancel=\ucde8\uc18c<\/code><\/pre>\n<p data-ke-size=\"size16\"><b>messages_en.properties<\/b><\/p>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>hello=Hello\nwelcome=Welcome\nuser.name=User Name\nuser.email=Email\nbutton.save=Save\nbutton.cancel=Cancel<\/code><\/pre>\n<p data-ke-size=\"size16\"><b>messages_ja.properties<\/b><\/p>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>hello=\u3053\u3093\u306b\u3061\u306f\nwelcome=\u3088\u3046\u3053\u305d\nuser.name=\u30e6\u30fc\u30b6\u30fc\u540d\nuser.email=\u30e1\u30fc\u30eb\nbutton.save=\u4fdd\u5b58\nbutton.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb<\/code><\/pre>\n<h3 data-ke-size=\"size23\">3. \ucee8\ud2b8\ub864\ub7ec \uad6c\ud604<\/h3>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>@RestController\nclass HelloController(\n    private val messageSource: MessageSource\n) {\n\n    @GetMapping(\"\/hello\", produces = [\"text\/plain;charset=UTF-8\"])\n    fun hello(locale: Locale): String {\n        val locale = LocaleContextHolder.getLocale()\n        val text = messageSource.getMessage(\"hello\", null, locale)\n        return text\n    }\n\n}<\/code><\/pre>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">4. MessageSourceConfig<\/h3>\n<pre id=\"code_1755168473263\" class=\"kotlin\" data-ke-language=\"kotlin\" data-ke-type=\"codeblock\"><code>\/**\n * DB\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uac00\uc838\uc624\ub294 \ubc29\ubc95\uc774 \uc544\ub2c8\ub77c\uba74 \ud544\uc694\n *\/\n@Configuration\nclass MessageSourceConfig {\n    @Bean\n    fun messageSource(): MessageSource =\n        ReloadableResourceBundleMessageSource().apply {\n            setBasenames(\"classpath:messages\")\n            setDefaultEncoding(\"UTF-8\")\n            setCacheSeconds(1) \/\/ 1\ucd08\ub9c8\ub2e4 \ud30c\uc77c \ubcc0\uacbd \ud655\uc778\n        }\n}<\/code><\/pre>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>messages.properties \ud30c\uc77c\uc744 \uc11c\ubc84 \uc7ac\uc2dc\uc791 \ud558\uc9c0 \uc54a\uace0 1\ucd08\uc5d0 \ud55c\ubc88\uc529 \ud30c\uc77c \ubcc0\uacbd \ud655\uc778<\/li>\n<li>\uba85\uc2dc\uc801\uc778 UTF-8 \uc778\ucf54\ub529\uc73c\ub85c \ud55c\uae00 \ub4f1 \ub2e4\uad6d\uc5b4 \ubb38\uc790\uac00 \uae68\uc9c0\uc9c0 \uc54a\ub3c4\ub85d \ubcf4\uc7a5<\/li>\n<\/ul>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-14 \u110b\u1169\u1112\u116e 7.45.52.png\" data-origin-width=\"1136\" data-origin-height=\"512\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/cxUDD2\/btsPVlFWjyA\/r8Dk0GygLrkh3Ilw9a97ak\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/cxUDD2\/btsPVlFWjyA\/r8Dk0GygLrkh3Ilw9a97ak\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/cxUDD2\/btsPVlFWjyA\/r8Dk0GygLrkh3Ilw9a97ak\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxUDD2%2FbtsPVlFWjyA%2Fr8Dk0GygLrkh3Ilw9a97ak%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"550\" height=\"248\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-14 \u110b\u1169\u1112\u116e 7.45.52.png\" data-origin-width=\"1136\" data-origin-height=\"512\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h3 data-ke-size=\"size23\">5. \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30<\/h3>\n<pre id=\"code_1755168644649\" class=\"kotlin\" data-ke-language=\"kotlin\" data-ke-type=\"codeblock\"><code>@Entity\n@Table(name = \"products\")\nclass Product(\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    val id: Long? = null,\n\n    @Column(nullable = false, length = 255)\n    var sku: String,             \/\/ \ube44\uc988\ub2c8\uc2a4\uc6a9 \ucf54\ub4dc(\uc120\ud0dd)\n\n    @Column(nullable = false, length = 255)\n    var defaultTitle: String = \"\",\n\n    @Column(columnDefinition = \"TEXT\")\n    var defaultDescription: String? = null,\n) {\n    \/\/ JPA\uc6a9 \uae30\ubcf8 \uc0dd\uc131\uc790\n    constructor() : this(null, \"\", \"\", null)\n\n}\n\n@Entity\n@Table(\n    name = \"product_localization\",\n    uniqueConstraints = [UniqueConstraint(columnNames = [\"product_id\", \"locale\"])]\n)\nclass ProductLocalization(\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    val id: Long? = null,\n\n    @ManyToOne(fetch = FetchType.LAZY, optional = false)\n    @JoinColumn(name = \"product_id\", nullable = false)\n    @OnDelete(action = OnDeleteAction.CASCADE)\n    var product: Product? = null,\n\n    @Column(nullable = false, length = 10)\n    var locale: String,    \/\/ \"en\", \"ko\", \"ja\", \"en-US\" \ub4f1\n\n    @Column(nullable = false, length = 255)\n    var title: String,\n\n    @Column(columnDefinition = \"TEXT\")\n    var description: String? = null,\n) {\n    \/\/ JPA\uc6a9 \uae30\ubcf8 \uc0dd\uc131\uc790\n    constructor() : this(null, null, \"\", \"\", null)\n}<\/code><\/pre>\n<h3 data-ke-size=\"size23\">6. DB \uc0ac\uc6a9\ud574\uc11c \ub2e4\uad6d\uc5b4 \ucc98\ub9ac\ud558\uae30<\/h3>\n<p data-ke-size=\"size16\"><b>Locale \ud074\ub798\uc2a4 \uc0ac\uc6a9<\/b><\/p>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>@RestController\n@RequestMapping(\"\/api\/products\")\nclass ProductController(\n    private val productReadService: ProductReadService,\n) {\n\n    @GetMapping(\"\/{id}\")\n    fun getProduct(\n        @PathVariable id: Long,\n        locale: Locale, \/\/ Spring\uc774 \uc790\ub3d9\uc73c\ub85c http \ud5e4\ub354\uc758 locale \uc124\uc815\uc744 \uc8fc\uc785\ud574\uc90c\n    ): ResponseEntity&lt;ProductDto&gt; {\n\n        val languageCode = locale.language.ifBlank { \"en\" }\n        val dto = productReadService.get(productId = id, locale = languageCode)\n\n        return ResponseEntity.ok()\n            .header(HttpHeaders.CONTENT_LANGUAGE, languageCode)\n            .body(dto)\n    }\n}<\/code><\/pre>\n<h3 data-ke-size=\"size23\">6. ProductService<\/h3>\n<pre id=\"code_1755168705782\" class=\"kotlin\" data-ke-language=\"kotlin\" data-ke-type=\"codeblock\"><code>@Service\nclass ProductReadService(\n    private val productRepository: ProductRepository,\n    private val productLocRepo: ProductLocRepository,\n) {\n    fun get(productId: Long, locale: String): ProductDto {\n        val product = productRepository.findById(productId).orElseThrow {\n            ResponseStatusException(HttpStatus.NOT_FOUND, \"product not found\")\n        }\n\n        val loc = productLocRepo.findFirstByProduct_IdAndLocale(productId, locale)\n\n        return if (loc != null) {\n            ProductDto(product.id!!, loc.title, loc.description)\n        } else {\n            \/\/ \ubc88\uc5ed\uc774 \ud55c \uac74\ub3c4 \uc5c6\uc73c\uba74 \uae30\ubcf8\uac12 \uc0ac\uc6a9\n            ProductDto(product.id!!, product.defaultTitle, product.defaultDescription)\n        }\n    }\n}\n\ndata class ProductDto(\n    val id: Long,\n    val title: String,\n    val description: String?\n)<\/code><\/pre>\n<h3 data-ke-size=\"size23\">7. \uc6f9 \uc124\uc815<\/h3>\n<pre class=\"kotlin\" data-ke-language=\"kotlin\"><code>@Configuration\nclass WebConfig : WebMvcConfigurer {\n    @Bean\n    fun stringHttpMessageConverter() =\n        StringHttpMessageConverter(StandardCharsets.UTF_8)\n}<\/code><\/pre>\n<h2 data-ke-size=\"size26\">&nbsp;<\/h2>\n<h3 data-ke-size=\"size23\">1. cURL\uc744 \uc0ac\uc6a9\ud55c \ud14c\uc2a4\ud2b8<\/h3>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-14 \u110b\u1169\u1112\u116e 7.52.36.png\" data-origin-width=\"1124\" data-origin-height=\"594\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bkcTux\/btsPULdQChw\/TZ6HRoUgLBzDPl2S1ynwu1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bkcTux\/btsPULdQChw\/TZ6HRoUgLBzDPl2S1ynwu1\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bkcTux\/btsPULdQChw\/TZ6HRoUgLBzDPl2S1ynwu1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkcTux%2FbtsPULdQChw%2FTZ6HRoUgLBzDPl2S1ynwu1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"644\" height=\"340\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-14 \u110b\u1169\u1112\u116e 7.52.36.png\" data-origin-width=\"1124\" data-origin-height=\"594\"\/><\/span><\/figure>\n<figure class=\"imagegridblock\">\n  <div class=\"image-container\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bnJPlU\/btsPVEFftvB\/rQMKdJksDsY14kWuLcUutK\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bnJPlU\/btsPVEFftvB\/rQMKdJksDsY14kWuLcUutK\/img.png\" data-is-animation=\"false\" data-origin-width=\"1134\" data-origin-height=\"254\" data-filename=\"blob\" width=\"707\" height=\"338\" data-widthpercent=\"55.51\" style=\"width: 54.862%; margin-right: 10px;\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bnJPlU\/btsPVEFftvB\/rQMKdJksDsY14kWuLcUutK\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnJPlU%2FbtsPVEFftvB%2FrQMKdJksDsY14kWuLcUutK%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1134\" height=\"254\"\/><\/span><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/RJRW3\/btsPUrmBgTC\/UK2ranppJTnpI9e5Y3XJZ0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/RJRW3\/btsPUrmBgTC\/UK2ranppJTnpI9e5Y3XJZ0\/img.png\" data-is-animation=\"false\" data-origin-width=\"1138\" data-origin-height=\"318\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-14 \u110b\u1169\u1112\u116e 7.53.45.png\" style=\"width: 43.9752%;\" data-widthpercent=\"44.49\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/RJRW3\/btsPUrmBgTC\/UK2ranppJTnpI9e5Y3XJZ0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRJRW3%2FbtsPUrmBgTC%2FUK2ranppJTnpI9e5Y3XJZ0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1138\" height=\"318\"\/><\/span><\/div>\n  <figcaption>\uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0\ub098 \ud5e4\ub354\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0 \uae30\ubcf8 \uac12\uc778 \uc601\uc5b4\ub85c \ucd9c\ub825\ub418\ub294 \ubaa8\uc2b5<\/figcaption>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style5\" \/><hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/><hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style5\" \/>\n<p data-ke-size=\"size16\">\ud574\ub2f9 \ucf54\ub4dc\ub4e4\uc744 \ucc38\uace0 \ud560 \uc218 \uc788\ub294 \ub808\ud3ec\uc9c0\ud1a0\ub9ac\ub97c \uacf5\uc720\ud574\ub4dc\ub9bd\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><a href=\"https:\/\/github.com\/HongYeseul\/spring-boot-locale-demo\" target=\"_blank\" rel=\"noopener&nbsp;noreferrer\">https:\/\/github.com\/HongYeseul\/spring-boot-locale-demo<\/a><\/p>\n<figure id=\"og_1755176428136\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"object\" data-og-title=\"GitHub - HongYeseul\/spring-boot-locale-demo\" data-og-description=\"Contribute to HongYeseul\/spring-boot-locale-demo development by creating an account on GitHub.\" data-og-host=\"github.com\" data-og-source-url=\"https:\/\/github.com\/HongYeseul\/spring-boot-locale-demo\" data-og-url=\"https:\/\/github.com\/HongYeseul\/spring-boot-locale-demo\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/3THij\/hyZzyWbWG6\/sDfchsEwkMJTbYgrgzGV4k\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189,https:\/\/scrap.kakaocdn.net\/dn\/gGgdD\/hyZuweXeWn\/4piBemRFidAwrgmjTX29T1\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189\"><a href=\"https:\/\/github.com\/HongYeseul\/spring-boot-locale-demo\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/github.com\/HongYeseul\/spring-boot-locale-demo\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/3THij\/hyZzyWbWG6\/sDfchsEwkMJTbYgrgzGV4k\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189,https:\/\/scrap.kakaocdn.net\/dn\/gGgdD\/hyZuweXeWn\/4piBemRFidAwrgmjTX29T1\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">GitHub - HongYeseul\/spring-boot-locale-demo<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">Contribute to HongYeseul\/spring-boot-locale-demo development by creating an account on GitHub.<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">github.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">&nbsp;<\/p>","category":"\uc54c\uc544\ub450\uba74 \uc88b\uc740 \uac1c\ubc1c \uc9c0\uc2dd\/\uc2a4\ud130\ub514","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/93","comments":"https:\/\/yeseul-dev.tistory.com\/93#entry93comment","pubDate":"Thu, 14 Aug 2025 19:54:51 +0900"},{"title":"Kind\ub97c \uc774\uc6a9\ud558\uc5ec \uba40\ud2f0 \ub178\ub4dc Kubernetes \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\uc131\ud558\uace0 \uc0ad\uc81c\ud558\ub294 \ubc29\ubc95","link":"https:\/\/yeseul-dev.tistory.com\/92","description":"<p data-ke-size=\"size16\">\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uac04\ub2e8\ud788 \uc2e4\uc2b5\ud560 \uc218 \uc788\ub294 \ud658\uacbd\uc778 kind\ub97c \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc18c\uac1c\ud569\ub2c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">kind\ub780?<\/h2>\n<blockquote data-ke-style=\"style2\">\n<p data-ke-size=\"size16\">kind (Kubernetes IN Docker)\ub294 Docker \ucee8\ud14c\uc774\ub108 \uae30\ubc18\uc73c\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\uc131\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4.<\/p>\n<\/blockquote>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ud14c\uc2a4\ud2b8, CI\/CD, \uacbd\ub7c9 \uac1c\ubc1c \ud658\uacbd\uc5d0 \uc801\ud569<\/li>\n<li>VM \uc5c6\uc774 \ucee8\ud14c\uc774\ub108\ub85c\ub9cc \ud074\ub7ec\uc2a4\ud130 \uad6c\uc131<\/li>\n<li>\ub9e4\uc6b0 \ube60\ub974\uace0 \uac00\ubcbc\uc6c0<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">\uad6c\uc131 \uc608\uc2dc<\/h2>\n<pre class=\"dsconfig\"><code>kind-multinode\/\n\u251c\u2500\u2500 kind-cluster.yaml        # \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc \uc124\uc815 \ud30c\uc77c\n\u2514\u2500\u2500 create-cluster.sh        # \ud074\ub7ec\uc2a4\ud130 \uc0dd\uc131 \uc2a4\ud06c\ub9bd\ud2b8<\/code><\/pre>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">kind-cluster.yaml<\/h2>\n<pre class=\"groovy\"><code>kind: Cluster\napiVersion: kind.x-k8s.io\/v1alpha4\nnodes:\n  - role: control-plane\n  - role: worker\n  - role: worker<\/code><\/pre>\n<blockquote data-ke-style=\"style2\">\n<p data-ke-size=\"size16\">\uc704 \uc124\uc815\uc740 \ucee8\ud2b8\ub864 \ud50c\ub808\uc778 1\uac1c + \uc6cc\ucee4 \ub178\ub4dc 2\uac1c \uad6c\uc131\uc785\ub2c8\ub2e4.<\/p>\n<\/blockquote>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">create-cluster.sh<\/h2>\n<pre class=\"bash\"><code>#!\/bin\/bash\n\nCLUSTER_NAME=\"multi-node-cluster\"\n\necho \"  \uae30\uc874 \ud074\ub7ec\uc2a4\ud130 \uc0ad\uc81c \uc911...\"\nkind delete cluster --name \"$CLUSTER_NAME\"\n\necho \"  \ud074\ub7ec\uc2a4\ud130 \uc0dd\uc131 \uc911...\"\nkind create cluster --name \"$CLUSTER_NAME\" --config kind-cluster.yaml\n\necho \"\u2705 \ud074\ub7ec\uc2a4\ud130 \uc0dd\uc131 \uc644\ub8cc!\"\nkubectl cluster-info --context kind-$CLUSTER_NAME\n\necho \"  \ub178\ub4dc \ub9ac\uc2a4\ud2b8:\"\nkubectl get nodes<\/code><\/pre>\n<blockquote data-ke-style=\"style2\">\n<p data-ke-size=\"size16\">\uc2e4\ud589 \uad8c\ud55c \ubd80\uc5ec: chmod +x create-cluster.sh<\/p>\n<\/blockquote>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">\ud074\ub7ec\uc2a4\ud130 \uc2e4\ud589<\/h2>\n<pre class=\"n1ql\"><code>.\/create-cluster.sh<\/code><\/pre>\n<h3 data-ke-size=\"size23\">\uacb0\uacfc \uc608\uc2dc<\/h3>\n<pre class=\"crmsh\"><code>$ kubectl get nodes\nNAME                             STATUS   ROLES           AGE     VERSION\nmulti-node-cluster-control-plane   Ready    control-plane   1m      v1.29.x\nmulti-node-cluster-worker          Ready    &lt;none&gt;          1m      v1.29.x\nmulti-node-cluster-worker2         Ready    &lt;none&gt;          1m      v1.29.x<\/code><\/pre>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">\ud074\ub7ec\uc2a4\ud130 \uc0ad\uc81c<\/h2>\n<pre class=\"crmsh\"><code>kind delete cluster --name multi-node-cluster<\/code><\/pre>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uad00\ub828 Docker \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \uc790\ub3d9 \uc0ad\uc81c\ub428<\/li>\n<li><code>kubectl config<\/code>\uc5d0\uc11c\ub3c4 context \uc0ac\ub77c\uc9d0<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">\ucc38\uace0 \uc0ac\ud56d<\/h2>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>kind\ub294 Docker \uc774\ubbf8\uc9c0\ub97c \uc790\ub3d9\uc73c\ub85c \uc0ac\uc6a9\ud558\ubbc0\ub85c \ubcc4\ub3c4\uc758 Dockerfile\uc774 \ud544\uc694 \uc5c6\uc74c<\/li>\n<\/ul>","category":"\uc54c\uc544\ub450\uba74 \uc88b\uc740 \uac1c\ubc1c \uc9c0\uc2dd\/\uc778\ud504\ub77c","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/92","comments":"https:\/\/yeseul-dev.tistory.com\/92#entry92comment","pubDate":"Wed, 6 Aug 2025 12:52:49 +0900"},{"title":"[KSUG] \uae30\ucd08 \uc9c0\uc2dd \uc2a4\ud130\ub514 2\ud68c\ucc28 \uc694\uc57d","link":"https:\/\/yeseul-dev.tistory.com\/90","description":"<blockquote data-ke-style=\"style3\">\n<p data-ke-size=\"size16\">25\ub144 KSUG\uc5d0\uc11c \uc8fc\ub2c8\uc5b4 \ubc0f \ucde8\uc900\uc0dd \ubd84\ub4e4\uacfc \ud568\uaed8\ud55c \uc2a4\ud130\ub514 \uc9c4\ud589 \uae30\ub85d\uc785\ub2c8\ub2e4.<br \/>\uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c \ud639\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \uc2a4\ud130\ub514\ub97c \uc9c4\ud589 \ud588\uace0, \uc800\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4.<br \/><br \/>*\uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c \uac00\uc774\ub4dc \ucc45: \uc2a4\ud504\ub9c1 \ubd80\ud2b83 \ud575\uc2ec \uac00\uc774\ub4dc<br \/>*\ub370\uc774\ud130 \ubca0\uc774\uc2a4 \uac00\uc774\ub4dc \ucc45: \uc0c8\ub85c \uc4f4 \ub300\uc6a9\ub7c9 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc194\ub8e8\uc158 1<br \/><br \/><\/p>\n<p data-ke-size=\"size16\">\uae30\uc5ec\ud574\uc8fc\uc2dc\ub294 \uba58\ud1a0 \ubd84\ub4e4\uaed8 \ud56d\uc0c1 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4.<\/p>\n<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\ubc88 \uc2dc\uac04\uc5d0\ub294&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>Spring Boot - \uc81c2\uc7a5: \uac1c\ubc1c\uc5d0 \uc55e\uc11c \uc54c\uba74 \uc88b\uc740 \uc9c0\uc2dd<\/li>\n<li>\ub370\uc774\ud130 \ubca0\uc774\uc2a4 - 1.3\uc7a5: SQL\uc758 \uc2e4\ud589 \uacc4\ud68d<\/li>\n<\/ul>\n<p data-ke-size=\"size16\">\ubd80\ubd84\uc744 \uc815\ub9ac\ud574\uc624\uae30\ub85c \ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc624\ub298\uc740 \uc2a4\ud130\ub514 \uc2dc\uc791 \uc804\uc5d0 \ubc1c\ud45c\ub97c \uc790\uc6d0\ud574\uc8fc\uc2e0 \ubd84\ub4e4\uc774 \uacc4\uc154\uc11c, \ube44\uad50\uc801 \uc6d0\ud65c\ud558\uac8c \uc9c4\ud589\ud560 \uc218 \uc788\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc624\ub298\uc740 \ud2b9\ubcc4\ud788 \uac8c\uc2a4\ud2b8\ub85c '\uae40\uadfc\uc218'\ub2d8\uaed8\uc11c \ucc38\uc11d\ud574 \uc8fc\uc168\ub294\ub370, \ubc1c\ud45c \ub0b4\uc6a9\uc774 \ud2b9\ud788 \uc778\uc0c1 \uae4a\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">Spring Camp\uc5d0\uc11c\ub3c4 \uc5f0\uc0ac\ub85c \ubc1c\ud45c\ud558\uc168\ub2e4\uace0 \ub4e4\uc5c8\uc9c0\ub9cc, \ub0b4\uac00 \ucc38\uc11d\ud588\ub358 \uc138\uc158\uc740 \uc544\ub2c8\uc5b4\uc11c \uc9c1\uc811 \ub4e4\uc744 \uc218 \uc5c6\uc5c8\ub358 \uc810\uc774 \uc544\uc26c\uc6e0\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadfc\uc218\ub2d8\uc740 \ud3c9\uc18c \ub9c8\uc778\ub4dc\ub9f5 \ud615\uc2dd\uc73c\ub85c \ubaa8\ub4e0 \ub0b4\uc6a9\uc744 \uc815\ub9ac\ud558\uc2e0\ub2e4\uace0 \ud55c\ub2e4. \ub9c8\uc778\ub4dc\ub9f5 \ud504\ub85c\uadf8\ub7a8\uc744 \uc774\uc6a9\ud558\uba74 \ub2e8\uc21c\ud788 \uc0dd\uac01\ub098\ub294 \ub300\ub85c \uc801\uc5b4\ub3c4 \ub9c8\uc6b0\uc2a4\ub97c \uc774\uc6a9\ud574 \uc790\uc720\ub86d\uac8c \uad6c\uc870\ub97c \ubc14\uafc0 \uc218 \uc788\uc5b4 \uc0dd\uac01\uc744 \uccb4\uacc4\ud654\ud558\ub294 \ub370\uc5d0 \ub9e4\uc6b0 \uc720\uc6a9\ud55c \ud234\uc774\ub77c\uace0 \ub290\uaf08\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadfc\uc218\ub2d8\uaed8\uc11c\ub294 EdrawMind\ub77c\ub294 \ud234\uc744 \uc4f0\uc2e0\ub2e4\uace0 \ud588\ub294\ub370, \uc720\ub8cc \uc11c\ube44\uc2a4\ub77c \uc608\uc804\ubd80\ud130 \uc54c\uace0 \uc788\ub358 \ubb34\ub8cc \ud234\uc778 XMind\uac00 \ub5a0\uc62c\ub790\ub2e4. \uc77c\ub2e8\uc740 XMind\ub85c \uc2dc\uc791\ud574\ubcf4\uace0, \ub098\uc911\uc5d0 \uc775\uc219\ud574\uc9c0\uba74 \ube14\ub799\ud504\ub77c\uc774\ub370\uc774 \ub54c EdrawMind\ub97c \ud55c\ubc88 \uc0ac\ubcfc\uae4c \ud55c\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-03 \u110b\u1169\u1112\u116e 12.41.56.png\" data-origin-width=\"701\" data-origin-height=\"368\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/buKDMp\/btsPELTuIS2\/cYFPGP3VTwcCAqRkJAYqDk\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/buKDMp\/btsPELTuIS2\/cYFPGP3VTwcCAqRkJAYqDk\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/buKDMp\/btsPELTuIS2\/cYFPGP3VTwcCAqRkJAYqDk\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuKDMp%2FbtsPELTuIS2%2FcYFPGP3VTwcCAqRkJAYqDk%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"701\" height=\"368\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-03 \u110b\u1169\u1112\u116e 12.41.56.png\" data-origin-width=\"701\" data-origin-height=\"368\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub2e4\uc74c \ub0a0 \ubc14\ub85c \uc2e4\ubb34\uc5d0 \uc801\uc6a9\ud574\ubcf4\uc790\ub294 \ub9c8\uc74c\uc73c\ub85c, \ud604\uc7ac \uc791\uc5c5 \uc911\uc778 mevu \uc11c\ube44\uc2a4 \uad00\ub828 \ub0b4\uc6a9\uc744 XMind\ub85c \uc815\ub9ac\ud558\uace0 \uc571\ud300\uacfc \ud68c\uc758\ub97c \uc9c4\ud589\ud588\ub294\ub370, \uae30\ud68d\uc790\ubd84\ub3c4 \ubcf4\uae30 \uc88b\uace0 \ud68c\uc758\ub3c4 \uc218\uc6d4\ud558\ub2e4\uace0 \uce6d\ucc2c\ud574 \uc8fc\uc154\uc11c \ubfcc\ub4ef\ud588\ub2e4. \uc544\uc9c1\uc740 \uc815\ub9ac \uc911\uc774\uc9c0\ub9cc \ub9c8\uc778\ub4dc\ub9f5 \uac00\uc9c0\uac00 \uc810\uc810 \ub298\uc5b4\ub098\ub294 \uac78 \ubcf4\uba74\uc11c \uc798 \uc815\ub9ac\ud574\ubcf4\uace0 \uc2f6\ub2e4\ub294 \uc758\uc695\ub3c4 \uc0dd\uacbc\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\ub610 \ud558\ub098 \uc778\uc0c1 \uae4a\uc5c8\ub358 \uc810\uc740 \uadfc\uc218\ub2d8\uc774 \ubaa8\ub4e0 \ucc45\uc744 \uc774\ubd81\uc73c\ub85c \ubcf4\uc2e0\ub2e4\ub294 \uc810\uc774\ub2e4. \uc774\ubd81\uc740 \ub9c8\uc778\ub4dc\ub9f5\uc73c\ub85c\uc758 \uc804\ud658\uc774\ub098 \ubcf5\uc0ac-\ubd99\uc5ec\ub123\uae30\uac00 \uc26c\uc6cc \uc815\ub9ac\uc5d0 \ub354 \uc801\ud569\ud574 \ubcf4\uc600\ub2e4. \ub098\ub294 \uadf8\ub3d9\uc548 \uc804\uacf5 \uc11c\uc801\uc740 \uc885\uc774\ucc45\uc73c\ub85c\ub9cc \ubd24\ub294\ub370, \ucc45\uc774 \uc9d1\uc5d0 \uc313\uc774\uba74\uc11c \uc810\uc810 \ubd80\ub2f4\uc774 \ub418\uc5c8\ub358 \ud130\ub77c \uc774\ubd81 \ud65c\uc6a9\ub3c4 \uc9c4\uc9c0\ud558\uac8c \uace0\ub824\ud574\ubd10\uc57c\uaca0\ub2e4\ub294 \uc0dd\uac01\uc774 \ub4e4\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\ucc98\ub7fc \uc720\uc6a9\ud55c \ud301\uc744 \ub9ce\uc774 \uc5bb\uc744 \uc218 \uc788\uc5c8\ub358 \ub73b\uae4a\uc740 \uc2a4\ud130\ub514 2\ud68c\ucc28 \uc2dc\uac04\uc774\uc5c8\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<p data-ke-size=\"size16\">\uc544\ub798\ub294 GPT\ub97c \uc774\uc6a9\ud55c \ud0a4\uc6cc\ub4dc \uc911\uc2ec \uc2a4\ud130\ub514 \uc694\uc57d\ubcf8\uc774\ub2e4.<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">  \uc544\ud0a4\ud14d\ucc98 \ubc0f \uacc4\uce35 \uad6c\uc870<\/h2>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>3\uacc4\uce35 \uad6c\uc870 (Layered Architecture)<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>Presentation Layer (\ud504\ub808\uc820\ud14c\uc774\uc158 \uacc4\uce35)<\/b>: \ud074\ub77c\uc774\uc5b8\ud2b8\uc640\uc758 \uc811\uc810, \uc694\uccad \ubc0f \uc751\ub2f5 \ucc98\ub9ac<\/li>\n<li><b>Business Layer (\ube44\uc988\ub2c8\uc2a4 \uacc4\uce35)<\/b>: \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1, \ud2b8\ub79c\uc7ad\uc158, \uc720\ud6a8\uc131 \uac80\uc0ac<\/li>\n<li><b>Persistence Layer (\ub370\uc774\ud130 \uc811\uadfc \uacc4\uce35)<\/b>: DB \uc811\uadfc, Repository \uc0ac\uc6a9<\/li>\n<\/ul>\n<\/li>\n<li><b>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc544\ud0a4\ud14d\ucc98(MSA)<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ubaa8\ub180\ub9ac\uc2dd\uacfc \ube44\uad50<\/li>\n<li>\ub2e8\uc21c\ud788 \uc11c\ube44\uc2a4 \ucabc\uac1c\ub294 \uac8c \uc544\ub2cc \"\uc0ac\uc0c1\"\uc774 \uc911\uc694<\/li>\n<\/ul>\n<\/li>\n<li><b>DTO, Entity, VO \uad6c\ubd84<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ub808\uc774\uc5b4 \uac04 \ub370\uc774\ud130 \uc774\ub3d9\uc744 \uc704\ud55c \uc5ed\ud560<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">  \ub514\uc790\uc778 \ud328\ud134<\/h2>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>\uc0dd\uc131 \ud328\ud134<\/b>: Abstract Factory, Builder, Factory Method, Singleton \ub4f1<\/li>\n<li><b>\uad6c\uc870 \ud328\ud134<\/b>: Adapter, Composite, Decorator, Facade \ub4f1<\/li>\n<li><b>\ud589\uc704 \ud328\ud134<\/b>: Chain of Responsibility, Command, Interpreter, Mediator \ub4f1<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">  REST \uc544\ud0a4\ud14d\ucc98<\/h2>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>REST \ud2b9\uc131<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc720\ub2c8\ud3fc \uc778\ud130\ud398\uc774\uc2a4<\/li>\n<li>\ubb34\uc0c1\ud0dc\uc131 (Stateless)<\/li>\n<li>\uce90\uc2dc \uac00\ub2a5\uc131<\/li>\n<li>\ud074\ub77c\uc774\uc5b8\ud2b8-\uc11c\ubc84 \uad6c\uc870<\/li>\n<li>\uacc4\uce35 \uad6c\uc870<\/li>\n<\/ul>\n<\/li>\n<li><b>RESTful URL \uc124\uacc4 \uaddc\uce59<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><code>\/<\/code>\ub85c \ub05d\ub098\uc9c0 \uc54a\uc74c<\/li>\n<li>\ud558\uc774\ud508(-) \uc0ac\uc6a9, \uc5b8\ub354\ubc14(_) \uc9c0\uc591<\/li>\n<li>\uba85\uc0ac \uc0ac\uc6a9 (\ub3d9\uc0ac \ub300\uc2e0 HTTP \uba54\uc11c\ub4dc\ub85c \ud589\uc704 \ud45c\ud604)<\/li>\n<li>\uc18c\ubb38\uc790 \uc0ac\uc6a9<\/li>\n<li>\ud655\uc7a5\uc790 \uc9c0\uc591<\/li>\n<\/ul>\n<\/li>\n<li><b>URI vs URL<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>URI: \uc790\uc6d0\uc758 \uace0\uc720 \uc2dd\ubcc4\uc790<\/li>\n<li>URL: \uc704\uce58 \ubc0f \uc811\uadfc \ubc29\uc2dd \ud3ec\ud568\ud55c URI<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">  \uc778\uc99d \ubc0f \uc778\uac00<\/h2>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>Authentication<\/b>: \uc0ac\uc6a9\uc790 \ud310\ubcc4 (\ub85c\uadf8\uc778 \ub4f1)<\/li>\n<li><b>Authorization<\/b>: \uc790\uc6d0 \uc811\uadfc \uad8c\ud55c \ud655\uc778<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">  HTTP \ubc0f HTTPS<\/h2>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>HTTP<\/b>: \ubcf4\uc548 \uc5c6\uc74c<\/li>\n<li><b>HTTPS<\/b>: TLS \uae30\ubc18 \ubcf4\uc548 \uc81c\uacf5\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>SSL (\uad6c\ubc84\uc804), TLS (\ud604\uc7ac \uc8fc \uc0ac\uc6a9)<\/li>\n<li>\ud3ec\ud2b8: HTTP(80), HTTPS(443)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">  DispatcherServlet \ud750\ub984<\/h2>\n<ol style=\"list-style-type: decimal;\" data-ke-list-type=\"decimal\">\n<li>\uc694\uccad &rarr; DispatcherServlet<\/li>\n<li>HandlerMapping &rarr; Controller<\/li>\n<li>Service &rarr; Repository &rarr; DB<\/li>\n<li>Controller &rarr; ViewResolver<\/li>\n<li>View \ubc18\ud658<\/li>\n<\/ol>\n<hr data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">  DB \uc800\uc7a5 \uad6c\uc870 \ubc0f \ucd5c\uc801\ud654<\/h2>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li><b>\ubd84\ub9ac\ud615 \ud14c\uc774\ube14 \uad6c\uc870<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ub17c\ub9ac\uc801 \uad6c\uc870\uc640 \ubb3c\ub9ac\uc801 \uc800\uc7a5 \ubd84\ub9ac<\/li>\n<li>RowID \ud65c\uc6a9: \uc778\ub371\uc2a4\uc640 \uc2e4\uc81c \ub370\uc774\ud130 \uc5f0\uacb0<\/li>\n<\/ul>\n<\/li>\n<li><b>IOT (Index Organized Table)<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc778\ub371\uc2a4\uc640 \ub370\uc774\ud130\ub97c \ud568\uaed8 \uc800\uc7a5 &rarr; \ube60\ub978 \uc870\ud68c<\/li>\n<li>\uc218\uc815 \uc2dc \ub370\uc774\ud130 \uc7ac\ubc30\uce58 \ud544\uc694 &rarr; \uc131\ub2a5 \uc800\ud558<\/li>\n<\/ul>\n<\/li>\n<li><b>\ud074\ub7ec\uc2a4\ud130\ub9c1 \ud14c\uc774\ube14<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\ub370\uc774\ud130 \ubb3c\ub9ac\uc801 \uc815\ub82c (\uc608: \uc800\uc790\uba85 \uae30\uc900)<\/li>\n<li>IO \ucd5c\uc18c\ud654, \uc870\ud68c \uc131\ub2a5 \ud5a5\uc0c1<\/li>\n<li>\ub2e8\uc810: \uc4f0\uae30\/\uc218\uc815 \ube44\uc6a9 \ud07c<\/li>\n<\/ul>\n<\/li>\n<li><b>\ud574\uc2dc \ud074\ub7ec\uc2a4\ud130<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc870\ud68c \uc18d\ub3c4 \ube60\ub984 (O(1))<\/li>\n<li>\ub2e8\uc810: \ub808\uc778\uc9c0 \uc870\ud68c \ubd88\uac00, \ucda9\ub3cc \ubc1c\uc0dd \uac00\ub2a5<\/li>\n<\/ul>\n<\/li>\n<li><b>\ud074\ub7ec\uc2a4\ud130\ub9c1 \ud329\ud130 (Clustering Factor)<\/b>\n<ul style=\"list-style-type: disc;\" data-ke-list-type=\"disc\">\n<li>\uc778\ub371\uc2a4\uc640 \uc2e4\uc81c \ub370\uc774\ud130\uc758 \ubb3c\ub9ac\uc801 \uac70\ub9ac \ucc99\ub3c4<\/li>\n<li>\uacf5\uac04 \uc9c0\uc5ed\uc131 \ub192\uc744\uc218\ub85d \uc131\ub2a5 \uc6b0\uc218<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr data-ke-style=\"style1\" \/>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\ubc88 2\ud68c\ucc28\ub294 \ub0b4\uac00 \ub9ce\uc774 \uc900\ube44\ud558\uc9c0 \ubabb\ud574\uc11c \uc544\uc26c\uc6c0\uc774 \ub0a8\ub294\ub2e4. \uc5f4\uc2ec\ud788 \uacf5\ubd80\ud574\uc57c\uc9c0...<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774 \uc2a4\ud130\ub514\ub294 \ub0b4\uac00 \uc9d1\uc911\ud574\uc11c \uacf5\ubd80\ud558\uace0 \uc788\ub294 \ubd84\uc57c\ubfd0\ub9cc \uc544\ub2c8\ub77c, DB\ub97c \uacf5\ubd80\ud558\uace0 \uacc4\uc2e0 \ubd84\ub4e4\ub3c4 \uacc4\uc154\uc11c \uc644\uc804\ud788 \uc54c\uc9c0\ub294 \ubabb\ud574\ub3c4 \uc790\uc5f0\uc2a4\ub7fd\uac8c DB\uc5d0 \ub300\ud55c \ub0b4\uc6a9\ub3c4 \ud568\uaed8 \uc811\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc774 \uc88b\uc740 \uac83 \uac19\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub7fc \uc774\uc81c 3\ud68c\ucc28 \uc900\ube44\ud558\ub7ec \uac00\uc57c\uc9c0... \ub2e4\uc74c\uc8fc\ub3c4 \ud30c\uc774\ud305<\/p>","category":"\uc54c\uc544\ub450\uba74 \uc88b\uc740 \uac1c\ubc1c \uc9c0\uc2dd\/\uc2a4\ud130\ub514","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/90","comments":"https:\/\/yeseul-dev.tistory.com\/90#entry90comment","pubDate":"Sun, 3 Aug 2025 12:46:53 +0900"},{"title":"\uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc5d0 \ub300\ud55c \uac04\ub2e8\ud55c \uace0\ucc30 - 2","link":"https:\/\/yeseul-dev.tistory.com\/88","description":"<p data-ke-size=\"size16\">&nbsp;<\/p>\n<blockquote data-ke-style=\"style3\">25\ub144 KSUG\uc5d0\uc11c \uc8fc\ub2c8\uc5b4 \ubc0f \ucde8\uc900\uc0dd \ubd84\ub4e4\uacfc \ud568\uaed8\ud55c \uc2a4\ud130\ub514 \uc9c4\ud589 \uae30\ub85d\uc785\ub2c8\ub2e4.<br \/>\uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c \ud639\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub300\ud55c \uc2a4\ud130\ub514\ub97c \uc9c4\ud589 \ud588\uace0, \uc800\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc120\ud0dd\ud588\uc2b5\ub2c8\ub2e4.<br \/><br \/>\uae30\uc5ec\ud574\uc8fc\uc2dc\ub294 \uba58\ud1a0\ub2d8\ub4e4\uaed8 \ud56d\uc0c1 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4.<\/blockquote>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">2\ud68c\ucc28<\/h2>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc2a4\ud130\ub514\uc5d0\uc11c \uba54\uc778\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ucc45\uc740 '\uc2a4\ud504\ub9c1 \ubd80\ud2b8 3 \ud575\uc2ec \uac00\uc774\ub4dc'\ub77c\ub294 \ucc45\uc774\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">2\ud68c\ucc28\uc5d0\ub294 2\uc7a5\ubd80\ud130 \uc815\ub9ac\ub97c \ud558\uba74 \ub418\uace0, 3\uc7a5\uc740 \uac1c\ubc1c \ud658\uacbd \uad6c\uc131 \ud558\ub294 \ucc55\ud130\uc5ec\uc11c \uc0dd\ub7b5\ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc6d0\ub798\ub294 \uc774\ubc88 \uc2dc\uac04\uc5d0 2\uc7a5\ub9cc \ud558\uba74 \ub418\ub294 \uac83\uc774\uc5c8\ub294\ub370 \uc77d\ub294 \uae40\uc5d0 \uae08\ubc29 \uc77d\uc744 \uc218 \uc788\uc744 \uac83 \uac19\uc544 5\uc7a5\uae4c\uc9c0 \uc77d\uace0 \uc815\ub9ac\ud574\ubcf4\uc558\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"1486\" data-origin-height=\"934\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/c0yEYC\/btsPDaq9cCy\/hW5SOMZv7b4Sufin4E51Q1\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/c0yEYC\/btsPDaq9cCy\/hW5SOMZv7b4Sufin4E51Q1\/img.png\" data-alt=\"2\uc7a5(\uac1c\ubc1c\uc5d0 \uc55e\uc11c \uc54c\uba74 \uc88b\uc740 \uae30\ucd08 \uc9c0\uc2dd)\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/c0yEYC\/btsPDaq9cCy\/hW5SOMZv7b4Sufin4E51Q1\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0yEYC%2FbtsPDaq9cCy%2FhW5SOMZv7b4Sufin4E51Q1%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1486\" height=\"934\" data-origin-width=\"1486\" data-origin-height=\"934\"\/><\/span><figcaption>2\uc7a5(\uac1c\ubc1c\uc5d0 \uc55e\uc11c \uc54c\uba74 \uc88b\uc740 \uae30\ucd08 \uc9c0\uc2dd)<\/figcaption>\n<\/figure>\n<figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-origin-width=\"1852\" data-origin-height=\"934\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/oj1lY\/btsPAzM9wzc\/OJb6VeGMKNGNxwKuLOzCoK\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/oj1lY\/btsPAzM9wzc\/OJb6VeGMKNGNxwKuLOzCoK\/img.png\" data-alt=\"4\uc7a5(\uc2a4\ud504\ub9c1\ubd80\ud2b8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\ud558\uae30), 5\uc7a5(API\ub97c \uc791\uc131\ud558\ub294 \ub2e4\uc591\ud55c \ubc29\ubc95)\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/oj1lY\/btsPAzM9wzc\/OJb6VeGMKNGNxwKuLOzCoK\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foj1lY%2FbtsPAzM9wzc%2FOJb6VeGMKNGNxwKuLOzCoK%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1852\" height=\"934\" data-origin-width=\"1852\" data-origin-height=\"934\"\/><\/span><figcaption>4\uc7a5(\uc2a4\ud504\ub9c1\ubd80\ud2b8 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\ud558\uae30), 5\uc7a5(API\ub97c \uc791\uc131\ud558\ub294 \ub2e4\uc591\ud55c \ubc29\ubc95)<\/figcaption>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc774\ubc88\uc5d0\ub294 \ucc45\uc744 \uc77d\uc73c\uba74\uc11c \ud544\uc694\ud55c \uc804\uacf5 \uc9c0\uc2dd\uc744 \uc9c8\ubb38 \ud615\ud0dc\ub85c \uc815\ub9ac\ud558\uace0, \uadf8\uc5d0 \ub300\ud55c \ub2f5\uc744 \ucc3e\uc544\ubcf4\ub294 \ubc29\uc2dd\uc73c\ub85c \uacf5\ubd80\ud574\ubcf4\uae30\ub85c \ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uae30\ub3c4\ub2d8\uaed8\uc11c \ucc38\uace0\ud558\ub77c\uace0 \uacf5\uc720\ud574\uc8fc\uc2e0 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uac00 \uc788\uc5c8\ub294\ub370, \uadf8 \ubc29\uc2dd\ucc98\ub7fc \ub098\ub3c4 \uc9c8\ubb38\uc9c0\ub97c \uba3c\uc800 \ub9cc\ub4e4\uace0 \ud574\ub2f5\uc744 \uc815\ub9ac\ud574\ubcf4\ub824\uace0 \ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uc544\ub798\ub294 \uc0c8\ub85c \ub9cc\ub4e0 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac.<\/p>\n<p data-ke-size=\"size16\"><a href=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\" target=\"_blank\" rel=\"noopener&nbsp;noreferrer\">https:\/\/github.com\/HongYeseul\/cs-for-interview<\/a><\/p>\n<figure id=\"og_1753950839491\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"object\" data-og-title=\"GitHub - HongYeseul\/cs-for-interview\" data-og-description=\"Contribute to HongYeseul\/cs-for-interview development by creating an account on GitHub.\" data-og-host=\"github.com\" data-og-source-url=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\" data-og-url=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/jmsiD\/hyZrso2Ft5\/V6TNWiaaZFZfYXImF9odVK\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189,https:\/\/scrap.kakaocdn.net\/dn\/d55t3V\/hyZrrDFHKr\/7etJHeJc0Dy8M60ODmaKH1\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189\"><a href=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/jmsiD\/hyZrso2Ft5\/V6TNWiaaZFZfYXImF9odVK\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189,https:\/\/scrap.kakaocdn.net\/dn\/d55t3V\/hyZrrDFHKr\/7etJHeJc0Dy8M60ODmaKH1\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">GitHub - HongYeseul\/cs-for-interview<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">Contribute to HongYeseul\/cs-for-interview development by creating an account on GitHub.<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">github.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">\ud574\ub2f9 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \uc9c8\ubb38\ub4e4\uacfc \ub2f5\ubcc0\uc744 \uc801\uc5b4\ub0b4\ub824\uac00\ub824 \ud588\ub294\ub370 ...<\/p>\n<p data-ke-size=\"size16\">\uc774\ubc88\uc8fc\ub294 \uc2dc\uac04\uc774 \ubd80\uc871\ud574\uc11c <span style=\"background-color: #ffffff; color: #474747; text-align: start;\">  \uc870\uae08\ubc16\uc5d0 \ucc44\uc6cc \ub123\uc9c0 \ubabb\ud588\ub2e4.....<\/span><\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\"><span style=\"background-color: #ffffff; color: #474747; text-align: start;\">\uc774\ubc88\uc5d0 5\uc7a5\uae4c\uc9c0 \uc815\ub9ac\ud588\uc73c\ub2c8, \ub2e4\uc74c \uc9c4\ub3c4\ubcf4\ub2e4\ub294 \ube68\ub77c\uc11c \uc2dc\uac04\uc774 \uc880 \ub354 \ub0a8\uc9c0\uc54a\uc744\uae4c.....\ub77c\uace0 \uc0dd\uac01\ud558\uba70<\/span><span style=\"background-color: #ffffff; color: #474747; text-align: start;\"><\/span><\/p>\n<p data-ke-size=\"size16\"><span style=\"background-color: #ffffff; color: #474747; text-align: start;\">\ub2e4\uc74c\uc8fc\uc5d0\ub294 \uaf2d ... \ub9ce\uc774 \ucc44\uc6cc\uc640\uc57c\uaca0\ub2e4\uace0 \ub2e4\uc9d0\ud588\ub2e4.<\/span><\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/><hr contenteditable=\"false\" data-ke-type=\"horizontalRule\" data-ke-style=\"style1\" \/>\n<h2 data-ke-size=\"size26\">3\ud68c\ucc28<\/h2>\n<p data-ke-size=\"size16\">\uc2a4\ud130\ub514 \uc9c4\ub3c4\ub294 4\uc7a5\uc774\uc5c8\uc73c\ub098, 4\uc7a5 5\uc7a5\uc744 \uc815\ub9ac\ud588\uc5c8\uae30 \ub54c\ubb38\uc5d0 xmind\ub85c \uc62e\uae30\ub294 \uc791\uc5c5\uc744 \uc9c4\ud589\ud588\ub2e4.<\/p>\n<p data-ke-size=\"size16\">\uc62e\uae30\uba74\uc11c \ub354 \uc870\uc0ac\ud55c \ub0b4\uc6a9\uc740 \ubd99\uc5ec\ub123\uae30\ub3c4 \ud588\ub2e4.&nbsp;<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-07 \u110b\u1169\u1112\u116e 12.30.47.png\" data-origin-width=\"2554\" data-origin-height=\"3484\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/bRyTaC\/btsPKG4FCZg\/LUV6AzPVOxxgxtNZv65oCK\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/bRyTaC\/btsPKG4FCZg\/LUV6AzPVOxxgxtNZv65oCK\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/bRyTaC\/btsPKG4FCZg\/LUV6AzPVOxxgxtNZv65oCK\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRyTaC%2FbtsPKG4FCZg%2FLUV6AzPVOxxgxtNZv65oCK%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"2554\" height=\"3484\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-07 \u110b\u1169\u1112\u116e 12.30.47.png\" data-origin-width=\"2554\" data-origin-height=\"3484\"\/><\/span><\/figure>\n<figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-07 \u110b\u1169\u1112\u116e 12.31.08.png\" data-origin-width=\"2240\" data-origin-height=\"2192\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/uZAyd\/btsPJdJckIw\/nPdZbGCWX7t3xbCbKGDU20\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/uZAyd\/btsPJdJckIw\/nPdZbGCWX7t3xbCbKGDU20\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/uZAyd\/btsPJdJckIw\/nPdZbGCWX7t3xbCbKGDU20\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuZAyd%2FbtsPJdJckIw%2FnPdZbGCWX7t3xbCbKGDU20%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"2240\" height=\"2192\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-07 \u110b\u1169\u1112\u116e 12.31.08.png\" data-origin-width=\"2240\" data-origin-height=\"2192\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<p data-ke-size=\"size16\">\uadf8\ub9ac\uace0 \uc800\ubc88\uc8fc\uc5d0 \ub9cc\ub4e4\uc5b4\ub454 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \ud558\ub098\uc529 \ucc44\uc6cc \ub123\ub294\uc911...<\/p>\n<p data-ke-size=\"size16\"><a href=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\/tree\/springboot\/mechanism\" target=\"_blank\" rel=\"noopener&nbsp;noreferrer\">https:\/\/github.com\/HongYeseul\/cs-for-interview\/tree\/springboot\/mechanism<\/a><\/p>\n<figure id=\"og_1754569578112\" contenteditable=\"false\" data-ke-type=\"opengraph\" data-ke-align=\"alignCenter\" data-og-type=\"object\" data-og-title=\"GitHub - HongYeseul\/cs-for-interview\" data-og-description=\"Contribute to HongYeseul\/cs-for-interview development by creating an account on GitHub.\" data-og-host=\"github.com\" data-og-source-url=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\/tree\/springboot\/mechanism\" data-og-url=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\" data-og-image=\"https:\/\/scrap.kakaocdn.net\/dn\/3ZYAu\/hyZuDjCRpW\/N6rlMRl3yOJVE4ZoJwpfGK\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189,https:\/\/scrap.kakaocdn.net\/dn\/mTxzU\/hyZvoGoq8I\/sU2pzVzoh3YcWLPxM2K1Ok\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189\"><a href=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\/tree\/springboot\/mechanism\" target=\"_blank\" rel=\"noopener\" data-source-url=\"https:\/\/github.com\/HongYeseul\/cs-for-interview\/tree\/springboot\/mechanism\">\n<div class=\"og-image\" style=\"background-image: url('https:\/\/scrap.kakaocdn.net\/dn\/3ZYAu\/hyZuDjCRpW\/N6rlMRl3yOJVE4ZoJwpfGK\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189,https:\/\/scrap.kakaocdn.net\/dn\/mTxzU\/hyZvoGoq8I\/sU2pzVzoh3YcWLPxM2K1Ok\/img.png?width=1200&amp;height=600&amp;face=965_116_1032_189');\">&nbsp;<\/div>\n<div class=\"og-text\">\n<p class=\"og-title\" data-ke-size=\"size16\">GitHub - HongYeseul\/cs-for-interview<\/p>\n<p class=\"og-desc\" data-ke-size=\"size16\">Contribute to HongYeseul\/cs-for-interview development by creating an account on GitHub.<\/p>\n<p class=\"og-host\" data-ke-size=\"size16\">github.com<\/p>\n<\/div>\n<\/a><\/figure>\n<p data-ke-size=\"size16\">\ube0c\ub79c\uce58\uc5d0\ub2e4 \ud478\uc2dc \ud574\ub480\ub294\ub370 \ub9c8\uc74c\uc5d0 \ub4dc\ub294 \ub9cc\ud07c \ucc44\uc6b0\uba74 squash - push \ud558\ub824\uace0 \ub300\uae30\uc911\uc774\ub2e4.<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">5\ud68c\ucc28<\/h2>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-19 \u110b\u1169\u1112\u116e 8.42.17.png\" data-origin-width=\"1433\" data-origin-height=\"311\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/o02Cc\/btsPVIW9h8G\/vayNo3EA8w1IoqqqKOSdp0\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/o02Cc\/btsPVIW9h8G\/vayNo3EA8w1IoqqqKOSdp0\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/o02Cc\/btsPVIW9h8G\/vayNo3EA8w1IoqqqKOSdp0\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo02Cc%2FbtsPVIW9h8G%2FvayNo3EA8w1IoqqqKOSdp0%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1433\" height=\"311\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-19 \u110b\u1169\u1112\u116e 8.42.17.png\" data-origin-width=\"1433\" data-origin-height=\"311\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">\uc8fc\uc81c\ub294 6\uc7a5 - \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9<\/p>\n<p data-ke-size=\"size16\">JPA\ub294 \ud55c \uc7a5\uc73c\ub85c \ub05d\ub098\ub294 \uadf8\ub7f0 \uc9c0\uc2dd\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \uc591\uc774 \ud655\uc2e4\ud788 \ub9ce\uc558\ub2e4<\/p>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-19 \u110b\u1169\u1112\u116e 8.43.39.png\" data-origin-width=\"1270\" data-origin-height=\"881\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/2j3eK\/btsPYMcS666\/fnBfwJnBBWYIUPXMfD93UK\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/2j3eK\/btsPYMcS666\/fnBfwJnBBWYIUPXMfD93UK\/img.png\" data-alt=\"\ub3c5\uc11c(\uacf5\ubd80?) \uc778\uc99d\uc6a9\uc73c\ub85c \uc774\uc815\ub3c4\ub9cc...\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/2j3eK\/btsPYMcS666\/fnBfwJnBBWYIUPXMfD93UK\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2j3eK%2FbtsPYMcS666%2FfnBfwJnBBWYIUPXMfD93UK%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1270\" height=\"881\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-19 \u110b\u1169\u1112\u116e 8.43.39.png\" data-origin-width=\"1270\" data-origin-height=\"881\"\/><\/span><figcaption>\ub3c5\uc11c(\uacf5\ubd80?) \uc778\uc99d\uc6a9\uc73c\ub85c \uc774\uc815\ub3c4\ub9cc...<\/figcaption>\n<\/figure>\n<\/p>\n<p data-ke-size=\"size16\">&nbsp;<\/p>\n<h2 data-ke-size=\"size26\">6\ud68c\ucc28<\/h2>\n<p><figure class=\"imageblock alignCenter\" data-ke-mobileStyle=\"widthOrigin\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-24 \u110b\u1169\u1112\u116e 5.50.50.png\" data-origin-width=\"1508\" data-origin-height=\"474\"><span data-url=\"https:\/\/blog.kakaocdn.net\/dn\/v62bH\/btsP5ovXWMB\/V3Ovp597dViTFywk9Cu961\/img.png\" data-phocus=\"https:\/\/blog.kakaocdn.net\/dn\/v62bH\/btsP5ovXWMB\/V3Ovp597dViTFywk9Cu961\/img.png\"><img src=\"https:\/\/blog.kakaocdn.net\/dn\/v62bH\/btsP5ovXWMB\/V3Ovp597dViTFywk9Cu961\/img.png\" srcset=\"https:\/\/img1.daumcdn.net\/thumb\/R1280x0\/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv62bH%2FbtsP5ovXWMB%2FV3Ovp597dViTFywk9Cu961%2Fimg.png\" onerror=\"this.onerror=null; this.src='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png'; this.srcset='\/\/t1.daumcdn.net\/tistory_admin\/static\/images\/no-image-v1.png';\" loading=\"lazy\" width=\"1508\" height=\"474\" data-filename=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2025-08-24 \u110b\u1169\u1112\u116e 5.50.50.png\" data-origin-width=\"1508\" data-origin-height=\"474\"\/><\/span><\/figure>\n<\/p>\n<p data-ke-size=\"size16\">6\ud68c\ucc28 \uc8fc\uc81c\ub294 7\uc7a5. \ud14c\uc2a4\ud2b8 \ucf54\ub4dc \uc791\uc131\ud558\uae30<\/p>","category":"\uc54c\uc544\ub450\uba74 \uc88b\uc740 \uac1c\ubc1c \uc9c0\uc2dd\/\uc2a4\ud130\ub514","author":" \uc608\uc2ac","guid":"https:\/\/yeseul-dev.tistory.com\/88","comments":"https:\/\/yeseul-dev.tistory.com\/88#entry88comment","pubDate":"Thu, 31 Jul 2025 17:40:49 +0900"}]}}