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

์ „์ฒด ๊ธ€90

[Java / Spring] @Transational๊ณผ ChainedTransactionManager ๋‹ค๋ฅธ ๋‘๊ฐœ ์ด์ƒ์˜ DB์— write๋ฅผ ํ•ด์•ผํ•ด์„œ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ํ•œ๊บผ๋ฒˆ์— ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑ์ด ๋˜์–ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.์˜ค๋Š˜์€ ๊ทธ๋•Œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ChainedTransactionalManager์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ คํ•œ๋‹ค. (ํ˜„์žฌ๋Š” deprecated๋˜์—ˆ์ง€๋งŒ, ์•„์ง๋„ ์“ฐ์ด๋Š” ๊ณณ์ด ์žˆ๊ธฐ์—,,) @TransactionalChecked Exception์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ํŠธ๋žœ์žญ์…˜์ด Rollback ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. (๊ทธ๋Œ€๋กœ ์ปค๋ฐ‹๋จ)๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ checked exception์„ catchํ•ด์„œ unchecked๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ํ•˜๊ฑฐ๋‚˜, catch ๋ถ€๋ถ„์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋กค๋ฐฑ๋˜๋„๋ก ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.Unchecked Exception์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด @Transactional๋กœ ๋ฌถ์ธ ๋ฉ”์„œ๋“œ๊ฐ€ ๋กค๋ฐฑ์ฒ˜๋ฆฌ๋œ๋‹ค.  Transa.. 2025. 3. 12.
2024๋…„ ํšŒ๊ณ  ์–ด์ œ ์˜ฌ๋ ธ์–ด์•ผ ํ–ˆ๋Š”๋ฐ.. ๋„ˆ๋ฌด ์กธ๋ ค์„œ ์ž๋ฒ„๋ ธ๋‹ค.2025๋…„์˜ ์ฒซ๋‚ ์— ์“ฐ๋Š” 2024๋…„ ํšŒ๊ณ  Layer์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์ธ Mad Sad Glad๋ผ๋Š” ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค. Mad: ๋ฌด์—‡์ด ๋‹น์‹ ์„ ํ™”๋‚˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ๋ฐฉํ•ดํ•˜๋‚˜์š”?1. ์ฒด๋ ฅ2024๋…„ ๋ง‰ํŒ์—๋Š” ์ฒด๋ ฅ์ด ๋‹ฌ๋ ค์„œ ํž˜๋“ค์—ˆ๋‹ค. ๊ทธ๋Ÿด๋งŒ๋„ ํ•œ๊ฒŒ, 5์›” ์ดํ›„๋กœ ์šด๋™์„ ํ•œ ๋‚ ์ด ์†์— ๊ผฝ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋๊นŒ์ง€ ์ง€๊ตฌ๋ ฅ ์žˆ๊ฒŒ ์ผ์„ ํ•ด๋‚ด๋ ค๋ฉด ์šด๋™์€ ํ•„์ˆ˜์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฆ˜์€ ์ฒด๋ ฅ์„ ๊ธฐ๋ฅด๋ ค๊ณ  ์ธํ„ฐ๋ฒŒ ๋Ÿฌ๋‹ ์ค‘์ด๋‹ค! ์˜ฌํ•ด๋Š” ๊ผญ ๊พธ์ค€ํ•˜๊ฒŒ ์šด๋™ํ•ด์„œ ์ฒด๋ ฅ ์ข‹์•„์ ธ์•ผ์ง€ 2. ๊ณ„ํš์˜ ๋ถ€์žฌ2024๋…„์€ ์—ด์‹ฌํžˆ๋Š” ์‚ด์•˜์ง€๋งŒ ๊ตฌ์ฒด์  ๊ณ„ํš ์—†์ด ๋„ˆ๋ฌด ๋ฌด์ง€์„ฑ์œผ๋กœ๋งŒ ์—ด์‹ฌํžˆ ์‚ด์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.๋‚˜๋Š” ์ง„์งœ ๊ณ„ํš์„ ์•ˆ์„ธ์šด๋‹ค. ์„ธ์›Œ๋ดค์ž ๋Œ€์• ์ถฉ ๋‹น์ผ ๊ณ„ํš ์ •๋„..?์ตœ๊ทผ์— ์ง„์งœ ๊ฐ“์ƒ ์‚ฌ๋Š” ์นœ๊ตฌ๋ž‘ ๋ฐฅ์„ ๋จน์—ˆ๋Š”.. 2025. 1. 1.
[Test Code / Java] Spring ํ”„๋กœ์ ํŠธ์—์„œ Persistence Layer์˜ ํ…Œ์ŠคํŠธ Persistence Layer์˜ ํ…Œ์ŠคํŠธPersistence Layer๋Š” ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ์˜์—ญ์ด๋‹ค.๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋กœ์ง๋งŒ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์„ฑ๊ฒฉ์„ ๋งŽ์ด ๋ ๊ณ  ์žˆ๋‹ค.Persistence Layer๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ด์œ ๋Š” ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋กœ ์ธํ•ด ์ฟผ๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ๋‚˜๊ฐˆ ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. @SpringBootTest, @DataJpaTest@SpringBootTest: ์Šคํ”„๋ง์—์„œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜. ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ๊ณ  ํ…Œ์ŠคํŠธํ•˜๋ฉด ์Šคํ”„๋ง ์„œ๋ฒ„๋ฅผ ๋„์›Œ์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.@DataJpaTest: ์–˜๋„ ์Šคํ”„๋ง ์„œ๋ฒ„๋ฅผ ๋„์›Œ์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ๊ทผ๋ฐ ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋ณด๋‹ค๋Š” ๊ฐ€๋ณ๋‹ค. JPA ๊ด€๋ จ๋œ ๋นˆ๋“ค๋งŒ ๋„์›Œ์„œ ์ฃผ์ž…์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Persi.. 2024. 12. 29.
[Test Code / Java] @DisplayName๊ณผ BDD ํ…Œ์ŠคํŠธ๋Š” []๋‹ค.ํ…Œ์ŠคํŠธ๋ž€ ๋ฌธ์„œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ํ”„๋กœ๋•์…˜ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ํ†ตํ•ด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ์‹œ๊ฐ๊ณผ ๊ด€์ ์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋‹ค.์–ด๋Š ํ•œ ์‚ฌ๋žŒ์ด ๊ณผ๊ฑฐ์— ๊ฒฝํ—˜ํ–ˆ๋˜ ๊ณ ๋ฏผ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ํŒ€ ์ฐจ์›์œผ๋กœ ์Šน๊ฒฉ์‹œ์ผœ์„œ, ๋ชจ๋‘์˜ ์ž์‚ฐ์œผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.DisplayName@DisplayName์€ Junit5๋ถ€ํ„ฐ ์‹œ์ž‘๋œ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ด๋ฆ„๋งŒ์œผ๋กœ๋Š” ์ด ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋–ค ํ…Œ์ŠคํŠธ์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.์ด๋•Œ @DisplayName ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ข€ ๋” ์ƒ์„ธํ•œ ์„ค๋ช…์„ ์ ์„ ์ˆ˜ ์žˆ๋‹ค.๋˜ํ•œ ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ์ž‘์—…ํ•  ๋•Œ @DisplayName์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•œ ์ ์ด ํ•˜๋‚˜ ๋” ์žˆ๋‹ค.์ธํ…”๋ฆฌ์ œ์ด์˜ Settings > Build, Execution, D.. 2024. 12. 28.
[Test Code / Java] TDD(Test Driven Development) TDD: Test Driven Development๋ž€?ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ณด๋‹ค ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ตฌํ˜„ ๊ณผ์ •์„ ์ฃผ๋„ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ฆ‰, ๊ธฐ๋Šฅ ๊ตฌํ˜„๋ณด๋‹ค ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ๊ตฌํ˜„ํ•˜๊ณ , ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. Red-Green-RefactorTDD์˜ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Red, Green, Refactor๋ฅผ ์ฃผ๋กœ ์–ธ๊ธ‰ํ•œ๋‹ค.Red: ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑ. → ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ๋ผ์žˆ์ง€ ์•Š๊ธฐ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•˜๋‹ค.Green: ๋น ๋ฅธ ์‹œ๊ฐ„ ๋‚ด์— ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ. → ์ดˆ๋ก๋ถˆ์„ ๋ณผ ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด, ์ด ๋‹จ๊ณ„์—์„œ์˜ ๊ตฌํ˜„์€ ๋‹ค์†Œ ์—‰ํ„ฐ๋ฆฌ์—ฌ๋„ ๋œ๋‹ค.Refactor: ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ„๋‹ค.Red-Green.. 2024. 12. 27.
[Test Code / Java] ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์ž‘์€ ์ฝ”๋“œ ๋‹จ์œ„(ํด๋ž˜์Šค ๋˜๋Š” ๋ฉ”์„œ๋“œ)๋ฅผ ๋…๋ฆฝ์ (=๋„คํŠธ์›Œํฌ๋ฅผ ํƒ„๋‹ค๋“ ๊ฐ€ ํ•˜๋Š” ์™ธ๋ถ€ ์ƒํ™ฉ์— ์˜์กดํ•˜์ง€ ์•Š์Œ)์œผ๋กœ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฒ€์ฆ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด๋‹ค.JUnit5๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„ ์›ŒํฌXUnit - Kent Beck์ž๋ฐ” ๋ง๊ณ ๋„ ์—ฌ๋Ÿฌ ์ง„์˜์—์„œ ์‚ฌ์šฉ์—ฌ๋Ÿฌ ์–ด๋…ธํ…Œ์ด์…˜ ์ง€์› (ex. @Test)AssertJํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์›ํ™œํ•˜๊ฒŒ ๋•๋Š” ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํ’๋ถ€ํ•œ API, ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹ ์ง€์›๊น”๋”ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์„ธ๋ถ„ํ™”ํ•˜๊ธฐ์งˆ๋ฌธํ•˜๊ธฐ: ์•”๋ฌต์ ์ด๊ฑฐ๋‚˜ ์•„์ง ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์€ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋Š”๊ฐ€?์ด๋Ÿฐ ๊ฒƒ์„ ํ•ญ์ƒ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•œ๋‹ค.ํ•ดํ”ผ ์ผ€์ด์Šค์˜ˆ์™ธ ์ผ€์ด์Šคex) ์•„๋ฉ”๋ฆฌ์นด๋…ธ 0๊ฐœ ์ด๋Ÿฐ์‹์œผ๋กœ ์ž…๋ ฅ๋˜๋ฉด ์–ด๋–กํ•จ?→ ๊ฒฝ๊ณ„๊ฐ’ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค!๋ฒ”์œ„(์ด์ƒ, ์ดํ•˜, ์ดˆ๊ณผ, ๋ฏธ๋งŒ), ๊ตฌ๊ฐ„, ๋‚ ์งœ์˜ˆ๋ฅผ .. 2024. 12. 26.