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

BackEnd๐ŸŒฑ/DB & SQL13

select .. for update ๋Œ€์ƒ ์œ ๋ฌด์— ๋”ฐ๋ฅธ ์ž ๊ธˆ ์ƒํƒœ ๊ฐœ์š” InnoDB ์—”์ง„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ DDL ์ฟผ๋ฆฌ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์ž‘์—…์—์„œ ํ…Œ์ด๋ธ” ๋ฝ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ์ž์„ธํžˆ๋Š” ๋ ˆ์ฝ”๋“œ ์ž์ฒด๋ณด๋‹ค๋Š” ์ธ๋ฑ์Šค์— ์ž ๊ธˆ์„ ์„ค์ •ํ•˜์—ฌ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ํ…Œ์ด๋ธ”์— ๋ช…์‹œ์ ์ธ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ž ๊ธˆ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Repetable-Read ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ InnoDB๋Š” record lock๊ณผ gap lock์„ ๊ฒฐํ•ฉํ•œ Next-key lock์„ ํ™œ์šฉํ•˜์—ฌ Phantom Read๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ํŠน์ • ํ–‰์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”ํ•˜๋Š” ๊ณผ์ •์—์„œ, InnoDB๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์ด์ „ ๊ณต๊ฐ„์—๋„ ์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐœ๊ฒฌ๋œ ๋ ˆ์ฝ”๋“œ์™€ ์ฟผ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ๋ฒ”์œ„ ๋‚ด์˜ .. 2024. 4. 11.
[Docker MySQL] Proxy Layer ๊ตฌ์ถ•ํ•˜๊ธฐ ๊ฐœ์š” ์ด์ „ ๊ฒŒ์‹œ๊ธ€ [Docker MySQL] Orchestrator๋ฅผ ์ด์šฉํ•œ High Availability(HA) ๊ตฌ์ถ•ํ•˜๊ธฐ์—์„œ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋ฅผ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋กœ ์Šน๊ฒฉ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋Š” Orchestrator๋ฅผ ํ™œ์šฉํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability, HA) ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์— ๋™๊ธฐํ™”๋˜๊ฒŒ ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, HA ๊ตฌ์„ฑ๋งŒ์œผ๋กœ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB ์„œ๋ฒ„ ์‚ฌ์ด์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ • ์ •๋ณด์—๋Š” ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ db001์ด ๋งˆ์Šคํ„ฐ DB๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด.. 2023. 11. 12.
[Docker MySQL] Orchestrator๋ฅผ ์ด์šฉํ•œ High Availability(HA) ๊ตฌ์ถ•ํ•˜๊ธฐ ๊ฐœ์š” ์ด์ „ ๊ฒŒ์‹œ๊ธ€ [Docker MySQL] Master-Slave Replication(๋ณต์ œ) ๊ตฌ์ถ•ํ•˜๊ธฐ์—์„œ MySQL์˜ Master-Slave ๋ณต์ œ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์— ๋™๊ธฐํ™”๋˜๊ฒŒ ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ค‘๋‹จ๋˜๋ฉด, ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๊ฐ€ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์šด์˜์ž๊ฐ€ ์ง์ ‘ ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋ฅผ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜ํ•œ ์กด์žฌํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋ฅผ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋กœ ์Šน๊ฒฉ์‹œํ‚ค๋Š” ๊ณผ์ •.. 2023. 11. 6.
[Docker MySQL] Master-Slave Replication(๋ณต์ œ) ๊ตฌ์ถ•ํ•˜๊ธฐ ๊ฐœ์š” MySQL์˜ Master-Slave Replication์€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ(Consistency) ๋ฐ ๊ฐ€์šฉ์„ฑ(Availability)์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์“ฐ์ด๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Docker๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ MySQL ํ™˜๊ฒฝ์—์„œ Master-Slave Replication์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Master-Slave Replication ๊ตฌ์„ฑํ•˜๊ธฐ Bridge Network์„ ์ด์šฉํ•œ Replication ๊ตฌ์„ฑ Replication ๋™์ž‘ ์›๋ฆฌ MySQL์˜ ๋ณต์ œ ๊ธฐ๋Šฅ์€ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋กœ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ํฌ๊ฒŒ 4๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ๊ธฐ๋ก: ํด.. 2023. 11. 1.
[MySQL] MVCC๋ฅผ ํ†ตํ•œ ์ž ๊ธˆ์—†๋Š” ์ฝ๊ธฐ [MVCC(Multi Version Concurrency Control)] MVCC๋Š” ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์€ ์ž ๊ธˆ(Locking) ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์ฝ๋Š” ๊ฒƒ์ด๋ฉฐ, InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ธ๋‘ ๋กœ๊ทธ(Undo log)๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. '๋ฉ€ํ‹ฐ ๋ฒ„์ „'์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ฐœ๋…์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ 'member' ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. CREATE TABLE member ( m_id INT NOT NULL, m_name VARCHAR(20) NOT NULL, m_area VARCHAR(100) NOT NULL, PRIMA.. 2023. 10. 7.
[MySQL] ์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ๋ฒ• [๊ฐœ์š”] MySQL์€ ์‚ฌ์šฉ์ž ๊ณ„์ •์˜ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ๋‹ค๋ฅธ DBMS์™€ ์•ฝ๊ฐ„ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๋งŽ์€ DBMS์—์„œ๋Š” ์•„์ด๋””๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜์ง€๋งŒ, MySQL์€ ์‚ฌ์šฉ์ž ์•„์ด๋”” ์™ธ์—๋„ ์ ‘์†ํ•˜๋Š” IP ์ฃผ์†Œ๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•˜์—ฌ ๋”์šฑ ์ •๋ฐ€ํ•œ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, MySQL 8.0 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” '์—ญํ• (ROLE)'์ด๋ผ๋Š” ๊ฐœ๋…๋„ ๋„์ž…๋˜์—ˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ถŒํ•œ ๊ทธ๋ฃน, ์ฆ‰ 'Role'์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‰ฝ๊ฒŒ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. [์‚ฌ์šฉ์ž ์‹๋ณ„] ๊ณ„์ •๊ณผ ํ˜ธ์ŠคํŠธ๋ช… ๋Œ€๋ถ€๋ถ„์˜ DBMS๋Š” ๊ณ„์ • ์ด๋ฆ„๋งŒ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜์ง€๋งŒ, MySQL์€ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •๊ณผ ์ ‘์† ์ง€์ (ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ๋ช…, ๋„๋ฉ”์ธ, IP ์ฃผ์†Œ)์„ ๋™์‹œ์— ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ MySQL ๊ณ„์ •์„ ์–ธ๊ธ‰ํ•  ๋•Œ๋Š” ์•„๋ž˜์˜ ์˜ˆ์ฒ˜๋Ÿผ ์•„์ด๋””์™€ ํ˜ธ์ŠคํŠธ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 's.. 2023. 10. 6.
MySQL์—์„œ VARCHAR์™€ TEXT์˜ ์ฐจ์ด ๊ฐœ์š” MySQL์˜ ๋ฌธ์ž์—ด๋ฐ์ดํ„ฐ ํƒ€์ž… ์ค‘ VARCHAR์™€ TEXT๋Š” ์ƒ๋‹นํžˆ ํ”ํžˆ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ VARCHAR๋Š” 255byte๋งŒ ์ง€์›ํ–ˆ์ง€๋งŒ, MySQL 5.0.3 ์ดํ›„๋กœ VARCHAR์™€ TEXT ํƒ€์ž… ๋ชจ๋‘ ์ตœ๋Œ€ 65,535byte ๊ธธ์ด๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. VARCHAR์™€ TEXT๋Š” ๋‘˜ ๋‹ค ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋ฉฐ, ๋‘˜์˜ ์ฃผ์š” ์ฐจ์ด์ ๊ณผ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €์žฅ ์šฉ๋Ÿ‰ VARCHAR์˜ ์ €์žฅ ๊ตฌ์กฐ VARCHAR๋Š” ์ตœ๋Œ€ 65,535byte๊นŒ์ง€ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, '(ํ˜„์žฌ ์ €์žฅ๋œ byte์˜ ํฌ๊ธฐ) + (๊ธธ์ด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” byte)'๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'apple'์˜ ๊ฒฝ์šฐ, ๋ฌธ์ž์—ด 'apple'์€ 5byte์ด๋ฉฐ, ๊ทธ ๊ธธ์ด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ”์ดํŠธ๋Š” 1byte์ด๋ฏ€๋กœ ์ด 6byte๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ.. 2023. 9. 17.
Redis์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…, ๋ช…๋ น์–ด์™€ ํ™œ์šฉ ์‚ฌ๋ก€ ๊ฐ„๋‹จ ์š”์•ฝ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ช…๋ น์–ด ์„ค๋ช… ์˜ˆ์ œ Strings SET ๊ฐ’ ์ €์žฅ `$ SET key value` GET ๊ฐ’ ์กฐํšŒ `$ GET key` Lists LPUSH ์™ผ์ชฝ๋ถ€ํ„ฐ ๊ฐ’ ์ถ”๊ฐ€ `$ LPUSH mylist value` LPOP ์™ผ์ชฝ์—์„œ ๊ฐ’ ์ œ๊ฑฐ `$ LPOP mylist` LINDEX ํŠน์ • ์œ„์น˜์˜ ๊ฐ’ ์กฐํšŒ `$ LINDEX mylist 0` Sets SADD ๊ฐ’ ์ถ”๊ฐ€ `$ SADD myset value` SMEMBERS ๋ชจ๋“  ๋ฉค๋ฒ„ ์กฐํšŒ `$ SMEMBERS myset` Sorted Sets(ZSets) ZADD ๊ฐ’ ๋ฐ ์ ์ˆ˜ ์ถ”๊ฐ€ `$ ZADD myzset score member` ZRANK ํŠน์ • ๋ฉค๋ฒ„์˜ ์ˆœ์œ„ ์กฐํšŒ `$ ZRANK myzset member` ZRANGE ์ ์ˆ˜ ๋ฒ”์œ„๋กœ ๋ฉค๋ฒ„ ์กฐํšŒ `$ ZR.. 2023. 9. 5.
์‹ค๋ฌด์—์„œ Redisson์„ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ ๊ฒช์€ ๋ฌธ์ œ์ ๋“ค Redisson์„ ์‹ค๋ฌด์— ์ ์šฉํ•˜๋ฉด์„œ ๊ฒผ์—ˆ๋˜ ์—ฐ๊ฒฐ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: [Redis ์ฃผ์†Œ] at org.springframework.beans.factory.su.. 2023. 8. 18.