Loading...
2022. 5. 16. 22:06

[Spring] Spring Advice๋กœ ์ปค์Šคํ…€ ์–ด๋“œ๋ฐ”์ด์Šค ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŠธ๋ถ€ํ„ฐ๋Š” Spring AOP ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์ œ Advice๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ , ์œ„๋น™ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Advice Interface Advice์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋ณต์Šตํ•ด๋ณด์ž๋ฉด Advice๋Š” ํŠน์ • ์กฐ์ธํฌ์ธํŠธ ์ฆ‰, ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ProxyFactory ํด๋ž˜์Šค์—์„œ addAdvice ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Advisor ๊ตฌํ˜„์ฒด๋ฅผ addAdvice์— ์ „๋‹ฌํ•˜์—ฌ ๊ฐ„์ ‘์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ์ฃ . ๋‘ ๋ฐฉ๋ฒ•์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ด๋“œ๋ฐ”์ด์Šค์™€ ๋‹ฌ๋ฆฌ Advisor๋Š” ๊ด€๋ จ PointCut๊ณผ ํ•จ๊ป˜ ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๋Š” ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. PointCut์€ ์‹ค์ œ ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์–ธ์ œ ์‹คํ–‰ํ• ์ง€๋ฅผ ์ •ํ•˜๋Š” AOP ์šฉ์–ด๋กœ ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์‹คํ–‰ํ•  ์ง€์ ์„ ์ƒ์„ธํ•˜๊ฒŒ ์ง€์ •..

2022. 5. 15. 22:37

[Spring] Spring AOP - Spring์—์„œ๋Š” AOP๋ฅผ ์–ด๋–ป๊ฒŒ ์ด์šฉํ• ๊นŒ?

์•ž์„œ ์šฐ๋ฆฌ๋Š” AOP(Aspect Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ณผ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ฝ์–ด๋ณด์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์ด ๊ธ€์„ ์ฝ๊ธฐ ์ „ ๋ฐ˜๋“œ์‹œ ์ฝ์–ด๋ณด์‹œ๊ธธ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค. 2022.05.14 - [Programming/Spring] - [Spring] AOP (Aspect-Oriented Programming) ๊ธฐ๋ณธ๊ณผ ๊ฐœ๋… [Spring] AOP (Aspect-Oriented Programming) ๊ธฐ๋ณธ๊ณผ ๊ฐœ๋… Spring์—๋Š” AOP(Aspect-Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์ด๋ผ๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Œ? OOP(๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋ผ๋Š” ๊ฒƒ์€ ๋“ค์–ด๋ดค๋Š”๋ฐ, AOP๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? AOP vs OOP ? ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ blog..

2022. 5. 14. 20:21

[Spring] AOP (Aspect-Oriented Programming) ๊ธฐ๋ณธ๊ณผ ๊ฐœ๋…

Spring์—๋Š” AOP(Aspect-Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์ด๋ผ๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Œ? OOP(๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋ผ๋Š” ๊ฒƒ์€ ๋“ค์–ด๋ดค๋Š”๋ฐ, AOP๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? AOP vs OOP ? ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP)์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋˜๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ๋‹ค๋ฅธ ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๋“ค์„ ๋ณ„๋„์˜ ๊ด€์‹ฌ์‚ฌ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆํšŒ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณดํ†ต ์ด๋Ÿฌํ•œ ๋กœ์ง์„ ๋งŒ๋‚ฌ์„ ๋•Œ ์ฝ”๋“œ๋ฅผ ๋ณต์ œํ•˜์—ฌ ์˜์กด์„ฑ์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ, AOP๋Š” ์ด๋Ÿฌํ•œ ์˜์กด์„ฑ ์—†์ด๋„ ๋™์ž‘ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ logging ์ฝ”๋“œ๋“ค์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด AOP์™€ OOP๋Š” ์„œ๋กœ ๊ฒฝ์Ÿํ•˜๋Š” ๊ด€๊ณ„์ธ๊ฐ€์š”? ๊ทธ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” OOP๋งŒ์„ ๊ฐ€์ง€๊ณ  ..

2022. 5. 5. 20:30

[Spring Data] @Transactional ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ณด๋Š” Spring์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ

Spring์„ ํ•œ ๋ฒˆ ์ฏค ์‚ฌ์šฉํ•ด๋ณด์…จ๋‹ค๋ฉด Transactional ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•ด ์•Œ๊ณ ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌด์ž‘์ • ์ผ์„ ๋• DB๋ž‘ ์—ฐ๊ฒฐํ•˜๊ณ  ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์˜์†ํ•  ๋•Œ ์ด๊ฑฐ ์“ฐ๋ฉด ๋ผ. ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด ๊ณ„์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์™€ ๊ทธ๋ ‡์ง€ ์•Š์•˜์„ ๋•Œ ์™œ ์ด๋Ÿฐ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ์ฏค ๊ถ๊ธˆ์ฆ์„ ๊ฐ€์ ธ๋ณด์‹  ๋ถ„๋“ค์ด ๊ณ„์‹ ๋‹ค๋ฉด ์ด ๊ธ€์„ ์ฐจ๋ถ„ํžˆ ์ฝ์–ด ๋ณด์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. Transaction ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๊ธ€์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ์–ธ๊ธ‰๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ์ด์ง€๋งŒ ์—ฌ๊ธฐ์„œ ํ•œ ๋ฒˆ ๋” ์„ค๋ช…์„ ๋“œ๋ฆฌ๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋žœ์žญ์…˜์„ ์ด์•ผ๊ธฐํ•˜๋ฉฐ DBMS ํ˜น์€ ๊ทธ ์œ ์‚ฌํ•œ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—ฐ์‚ฐ๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…์„ ํ•ด๋ณด๋ฉด, ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋ฅผ ์˜์†ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„..

2022. 4. 24. 17:49

[FastAPI] 14. SQLAlchemy์˜ One-to-Many, Many-to-Many, Self referential relationship

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ๋Š” ๋‹จ์ˆœ Column ๋ฐ์ดํ„ฐ์™€ ๊ทธ๋ฆฌ๊ณ , ๋‹จ์ผ ์™ธ๋ž˜ํ‚ค ํ•˜๋‚˜์˜ ๊ด€๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ Pydantic์œผ๋กœ ๋งคํ•‘ํ•˜์—ฌ Serialize/Deserialize ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Many-to-Many, One-to-Many ํ˜•ํƒœ์˜ Foreign Key๊ฐ€ ๊ฑธ๋ ค ์žˆ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ Joinํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ๋–„ ์–ด๋–ป๊ฒŒ Pydantic ๋ชจ๋ธ๊ณผ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. DB์—์„œ ๋‹จ์ˆœํ•˜๊ฒŒ ์ ‘๊ทผ ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•œ ERD๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Category์™€ Post๊ฐ€ ์žˆ๊ณ , Post๋Š” category_id๋ฅผ ์™ธ๋ž˜ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ category ํ…Œ์ด๋ธ”์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฑด๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ์ด ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ..

2022. 4. 16. 18:06

[Algorithm] 1์ผ 1์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ 1์ผ 1์ปค๋ฐ‹์— ๋„์ „ํ•˜๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๊ณ  ๊ณ„์‹œ๊ฑฐ๋‚˜, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋Œ€ํšŒ๋ฅผ ์ค€๋น„ํ•˜๊ณ  ๊ณ„์‹œ๋Š” ๋ถ„๋“ค์ด๋ผ๋ฉด 1์ผ 1์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์–ด์ƒ‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, 1์ผ 1์ปค๋ฐ‹์„ ๋„์ „ํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด๋ผ๋ฉด, ๋‚˜๋Š” ์˜ค๋Š˜ ๋ฌด์—‡์œผ๋กœ ์ปค๋ฐ‹์„ ํ•ด์•ผํ• ๊นŒ? ๋ผ๋Š” ๊ณ ๋ฏผ์„ ํ•˜์‹œ๊ฒŒ ๋ ํ…๋ฐ์š”. ๋งค์ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด๋Š” ์–ด๋ ต๋”๋ผ๋„ ๊ฐ€๋” ์˜ค๋Š˜ ์ปค๋ฐ‹์€ ๋ญํ•˜์ง€? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค ๋•Œ๊ฐ€ ์žˆ๋‹ค๋ฉด 1์ผ 1์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด๋ฅผ ํ•ด๋ณด์‹œ๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ํ’€ ๋•Œ๋งˆ๋‹ค ์ผ์ผ์ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ Git์— ์˜ฌ๋ฆฌ๋Š”๊ฑด ๊ท€์ฐฎ์•„... ์˜ˆ์ „์— ์ €๋Š” ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ”Œ๋žซํผ(ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, ๊ตฌ๋ฆ„, ๋ฐฑ์ค€ ๋“ฑ)์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณธ ํ›„, ๋งž์€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ์ปค๋ฐ‹์„ ํ–ˆ๋˜์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ํ• ๋งŒํ–ˆ์ง€๋งŒ ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ๋ฌธ์ œ๋ฅผ ์ ๊ณ , ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋Š”์ง€๋ฅผ ์ผ์ผ์ด ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ๋Š˜ ๊ท€์ฐฎ์€ ์ผ์ด์—ˆ๊ณ , ๊ฒฐ๊ตญ ์–ธ์ œ..

2022. 3. 8. 16:20

[Java] String, StringBuffer, StringBuilder ์ด์ •๋ฆฌ

์˜ค๋Š˜์€ Java์˜ String์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Java์—๋Š” ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ 3๊ฐ€์ง€ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. String StringBuffer StringBuilder 3๊ฐœ ๋ชจ๋‘ String์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์งš์–ด์•ผํ•  ๊ฒƒ์ด ์žˆ๋Š”๋ฐ์š”. ์ด 3๊ฐ€์ง€๋Š” ๋ชจ๋‘ ๋ฌธ์ž์—ด์„ ํ‘œ๊ธฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์ง€๋งŒ ๊ฐ์ž ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์ „ํ˜€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์ž…๋‹ˆ๋‹ค. See Java Reference ์ž๋ฐ” ๋ ˆํผ๋Ÿฐ์Šค ๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ๋Š” ์„ธ ๊ฐ€์ง€์˜ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค String Strings are constant; their values cannot be changed after they are created. String์€ ์ƒ์ˆ˜์ด๋ฉฐ, ๊ฐ’์„ ๋งŒ๋“  ๋’ค์—๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค (Immutable..

2022. 2. 25. 15:43

[Python] Python Database API - Python์—์„œ๋Š” ์–ด๋–ป๊ฒŒ DB์™€ ์—ฐ๊ฒฐํ• ๊นŒ?

์˜ค๋Š˜์€ ๊ธฐ์ดˆ์ ์ธ ์ง€์‹์„ ๋Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.โ€‹ ์šฐ๋ฆฌ๊ฐ€ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋ ˆ ๋“ฑ์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Database์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋„๋Œ€์ฒด ๋ฌด์—‡์ผ๊นŒ์š”? What is Database ? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ˜„๋Œ€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(?)์„ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ์ž์—ฐ์Šค๋ ˆ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€, ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ์ „์ž์ ์œผ๋กœ ์ €์žฅ๋˜๊ณ  ์•ก์„ธ์Šค๋˜๋Š” ์กฐ์งํ™” ๋œ ๋ฐ์ดํ„ฐ ๋ชจ์Œ์„ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ํ•œ๋งˆ๋””๋กœ ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ์ˆซ์ž, ๋ฌธ์ž ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์ž์ ์œผ๋กœ(๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ) ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ์กฐ์งํ™”ํ•˜์—ฌ ์•ก์„ธ์Šค ํ•˜๋Š” ๊ฒƒ์ด์ฃ . ๊ทธ๋Ÿผ DBMS๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? DBMS๋Š” Database Management..

2022. 2. 21. 22:35

[Spring boot] Axon Framework๋กœ ์‹œ์ž‘ํ•˜๋Š” CQRS ๊ธฐ์ดˆ

๋งŽ์ด ๋ฏธ๋ฃจ์–ด์ง„ Axon Framework์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „์— ์•„์ฃผ ์˜ค๋žœ ์‹œ๊ฐ„ ์ „, MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ ์ค‘ ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์„ ๋จผ์ € ์ˆ™์ง€ํ•˜์‹  ๋‹ค์Œ ์ง„ํ–‰ํ•ด๋ณด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. 2021.03.21 - [Architecture/MSA] - [MSA] 7. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 3 - ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS [MSA] 7. MSA์˜ ํŠธ๋žœ์žญ์…˜ ์ด์•ผ๊ธฐ 3 - ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS ์ด๋ฒคํŠธ ์†Œ์‹ฑ์„ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ 2017 SpringCamp์—์„œ์˜€์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ์—๋Š” MSA๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€๋„ ๋ชปํ–ˆ๊ณ , MSA๋Š” ๋Œ€๊ธฐ์—…์—์„œ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๊ณ , ์ ์šฉ๊ฐ€๋Šฅํ•œ ์—„์ฒญ๋‚˜๊ฒŒ ํฐ ์•„ํ‚คํ…์ฒ˜์˜€๋‹ค. ๋ผ๊ณ ๋งŒ ์ธ blog.neonkid.xyz Ax..

2022. 1. 9. 14:18

[Python] anyio - ํ•œ ์ธต ๋” ๊ฐ•ํ™”๋œ ๋น„๋™๊ธฐ ํŒจ๋Ÿฌ๋‹ค์ž„

์–ด๋Š๋ง ์‹ค๋ฌด์—์„œ Python ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋กœ ๋ณด๋‚ธ์ง€ 1๋…„์ด ์กฐ๊ธˆ ๋„˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ณ ๋ฏผ๊ณผ ๊ณ ๋‚œ, ๊ทธ๋ฆฌ๊ณ  ์ด ์ž๋ฆฌ์— ์˜ค๊ธฐ๊นŒ์ง€ ์ˆ˜๋งŽ์€ ๋ฐ˜์„ฑ๊ณผ ๋…ธ๋ ฅ์œผ๋กœ ํŒŒ์ด์ฌ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋กœ์จ์˜ ์ž๋ฆฌ๋ฅผ ์žก์•˜๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ด์•ผ๊ธฐ๋ฅผ ์œ„ํ•ด ๋‹จ๋„์ง์ž…์ ์œผ๋กœ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด Python์€ Java์˜ Spring๊ณผ ๋‹ฌ๋ฆฌ ๋™๊ธฐ ์ฒ˜๋ฆฌ๋ณด๋‹ค๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋” ๋‚˜์€ ๋น›์˜ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์˜ ๋น„๋™๊ธฐ ํŒจ๋Ÿฌ๋‹ค์ž„์€ ๊ทธ ์—ญ์‚ฌ๊ฐ€ ๋งค์šฐ ๋ณต์žกํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๊ณ  ๊ทธ ๋งˆ์ €๋„ ์“ฐ๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„์— ์†ํ•ฉ๋‹ˆ๋‹ค. Coroutine๊ณผ asyncio Python์˜ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๋Š” Thread, Process์™€ ๊ฐ™์ด ๋™๊ธฐ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Process๋ฅผ ์ด์šฉํ•œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๋Š” Context swi..