๐ŸŽ‰ SpringCamp 2025 ํ›„๊ธฐ โ€“ ์‹ค๋ฌด ์•„ํ‚คํ…์ฒ˜์™€ ์ฒ ํ•™์ด ๋งŒ๋‚˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ถ•์ œ

๊น€์ •๊ทœยท2025๋…„ 7์›” 22์ผ
post-thumbnail

์ง€๋‚œ์ฃผ ํ† ์š”์ผ, ๊ฐ•๋‚จ ์‚ผ์„ฑ์—ญ ์ธ๊ทผ์—์„œ ์—ด๋ฆฐ SpringCamp 2025์— ๋‹ค๋…€์™”์Šต๋‹ˆ๋‹ค.
์‚ฌ์‹ค ์ฒ˜์Œ์—” โ€œ๊ฐœ๋ฐœ์ž ํ–‰์‚ฌ์•ผ ๋‹ค ๊ฑฐ๊ธฐ์„œ ๊ฑฐ๊ธฐ์ง€โ€๋ผ๋Š” ๋งˆ์Œ๋„ ์กฐ๊ธˆ ์žˆ์—ˆ๋Š”๋ฐ,
๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ๊ธฐ์ˆ , ์กฐ์ง, ์‚ฌ๊ณ ๋ฐฉ์‹๊นŒ์ง€ ํ†ต์œผ๋กœ ์ž๊ทน๋ฐ›๊ณ  ๋Œ์•„์˜จ ๊ฐ’์ง„ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํ›„๊ธฐ์—์„  ๋‹จ์ˆœํ•œ ์š”์•ฝ์„ ๋„˜์–ด์„œ,
์ œ๊ฐ€ ์‹ค์ œ๋กœ ๋А๋ผ๊ณ  ๋ฐฐ์šด ์ , ๊ทธ๋ฆฌ๊ณ  ์‹ค๋ฌด์™€ ํฌํŠธํด๋ฆฌ์˜ค์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ• ์ง€๊นŒ์ง€ ํ•จ๊ป˜ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.


โœ… ํ–‰์‚ฌ ์ „์ฒด ๋ถ„์œ„๊ธฐ

  • ์žฅ์†Œ: ์ŠคํŽ˜์ด์Šค์‰์–ด ์‚ผ์„ฑ B1 (์„œ์šธ ๊ฐ•๋‚จ๊ตฌ)
  • ์ฐธ๊ฐ€์ž: ํ˜„์—… ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž + ์ปค๋ฎค๋‹ˆํ‹ฐ ์ค‘์‹ฌ ๊ฐœ๋ฐœ์ž๋“ค
  • ํŠน์ง•: Track 1 / Track 2 ๋ถ„๋ฆฌ, ์ž์œ ๋กญ๊ฒŒ ์ด๋™ ๊ฐ€๋Šฅ

์Šฌ๋กœ๊ฑด์ด ์ •๋ง ์ธ์ƒ ๊นŠ์—ˆ์Šต๋‹ˆ๋‹ค.

โ€œ๋นจ๋ฆฌ ๊ฐ€๋ ค๋ฉด ํ˜ผ์ž๊ฐ€๊ณ , ๋ฉ€๋ฆฌ ๊ฐ€๋ ค๋ฉด ํ•จ๊ป˜ ๊ฐ€๋ผ.โ€

๊ทธ ๋ง์ฒ˜๋Ÿผ, ๊ธฐ์ˆ ๋งŒ์ด ์•„๋‹ˆ๋ผ ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ํ•จ๊ป˜ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฌธํ™”๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.


๐Ÿงญ ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์„ธ์…˜ ๋ฃจํŠธ

์‹œ๊ฐ„ํŠธ๋ž™์„ธ์…˜
10:30Track 2์ธ๊ฐ€ ํ”Œ๋žซํผ๊ณผ HR SaaS ๋ณต์žก์„ฑ (์ด๋ช…ํ˜„)
11:30Track 2Amazon Q Developer + ์ƒ์„ฑํ˜• AI (์ด์ƒํ˜„)
13:15Track 2์˜ฌ๋ฆฌ๋ธŒ์˜ ๋ฌผ๋ฅ˜ ์‹œ์Šคํ…œ ๊ฐœ์„ ๊ธฐ
14:15Track 1๐Ÿ”ฅ ์‹ค์ „! MSA ํŠธ๋žœ์žญ์…˜ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ
15:15Track 2์นด์นด์˜ค๋ฑ…ํฌ Spring Boot Starter
16:15Track 2๋ ˆ์ผ์›จ์ด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ Spring

๐Ÿ” ์‹ค์ „! MSA ํŠธ๋žœ์žญ์…˜ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ โ€“ ๊น€์šฉ์šฑ

์ฃผ์ œ ์š”์•ฝ

  • MSA์—์„œ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ์œ ์ง€
  • Saga / Outbox / Compensation ๋“ฑ ์‹ค์ œ ์‚ฌ๋ก€ ์ค‘์‹ฌ์˜ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์„ค๋ช…

๊ธฐ์–ต์— ๋‚จ๋Š” ๋‚ด์šฉ

  • ์„œ๋น„์Šค ๊ฐ„ ๋™๊ธฐ ํ˜ธ์ถœ๋ณด๋‹ค ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ๊ฐ€ ์‹ค๋ฌด์—์„œ ๋” ์•ˆ์ „ํ•˜๋‹ค๋Š” ์ 
  • "์™„๋ฒฝํ•œ ์ผ๊ด€์„ฑ์€ ํฌ๊ธฐํ•˜๋˜, ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ๋ฆ„์€ ๋ณด์žฅํ•˜๋ผ" ๋Š” ์„ค๊ณ„ ์ฒ ํ•™

๋‚ด๊ฐ€ ์–ป์€ ์ธ์‚ฌ์ดํŠธ

๐Ÿ“Œ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ โ†’ ์•Œ๋ฆผ ๋ฐœ์†ก ๋กœ์ง์— Outbox ํŒจํ„ด ์ ์šฉํ•  ๊ณ„ํš
๐Ÿ“Œ ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„์™€ ์ด๋ฒคํŠธ ๋ฐœํ–‰ ํƒ€์ด๋ฐ์„ ๋” ๋ช…ํ™•ํžˆ ๊ด€๋ฆฌํ•  ํ•„์š”์„ฑ ๋А๋‚Œ

๐Ÿงฑ ์นด์นด์˜ค๋ฑ…ํฌ Spring Boot Starter โ€“ ์†์ˆ˜๋ฏผ

์ฃผ์ œ ์š”์•ฝ

  • ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์‚ฌ๋‚ด starter ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์„œ๋น„์Šค๋ณ„๋กœ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋งŒ๋“  ๊ตฌ์กฐ ์†Œ๊ฐœ

์žฌ๋ฏธ์žˆ์—ˆ๋˜ ํ‘œํ˜„

"ํ•˜์šธ์˜ ์›€์ง์ด๋Š” ์„ฑ ๊ฐ™์€ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ํ•ด์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆํ™” ์ „๋žต"

Starter์— ํฌํ•จ๋œ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๊ณ ์ • ๊ธธ์ด ๋ฉ”์‹œ์ง€ ์ง๋ ฌํ™” (Jackson Custom Serializer)
  • ์‚ฌ๋‚ด API์šฉ HTTP Client ์ถ”์ƒํ™”
  • ๋ถ„์‚ฐ ํŠธ๋ ˆ์ด์‹ฑ: traceId + baggage ๊ตฌ์กฐ

๋‚ด๊ฐ€ ์–ป์€ ์ธ์‚ฌ์ดํŠธ

๐Ÿ“ฆ ๊ณตํ†ต ๋กœ๊น…, ์˜ˆ์™ธ, ์ธ์ฆ ๋ชจ๋“ˆ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋‚˜๋„ starter ๊ตฌ์กฐ ์—ฐ์Šตํ•ด๋ณผ ๊ณ„ํš

โš™๏ธ ๋ ˆ์ผ์›จ์ด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ Spring โ€“ ์ด์„ ํ˜‘

์ฃผ์ œ ์š”์•ฝ

  • ํ•จ์ˆ˜ํ˜• ์˜ˆ์™ธ ํ๋ฆ„ ์ฒ˜๋ฆฌ ์ „๋žต: ROP (Railway Oriented Programming)
  • ์„ฑ๊ณต/์‹คํŒจ ํ๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ
  • Result, Either, recover, fold, panic ๋“ฑ์˜ ๊ฐœ๋… ํ™œ์šฉ

์ธ์ƒ ๊นŠ์—ˆ๋˜ ๋ฌธ์žฅ

"์˜ˆ์™ธ๋Š” ๋˜์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด๋‹ค. ์„ฑ๊ณต/์‹คํŒจ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๊ฐ’์ด๋‹ค."

Spring์—์„œ์˜ ์ ์šฉ ํŒ

  • @Transactional์€ ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ๋งŒ rollback โ†’ Result.failure๋Š” rollback ์•ˆ ๋จ
  • ๋”ฐ๋ผ์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ช…์‹œ์ ์œผ๋กœ .orElseThrow()๋ฅผ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•จ

๋‚ด๊ฐ€ ์–ป์€ ์ธ์‚ฌ์ดํŠธ

Result<User> user = validate(input)
  .flatMap(this::findUser)
  .flatMap(this::verifyPassword)
  .orElseThrow(UnauthorizedException::new);

๐Ÿ’ฌ ๊ทธ ์™ธ ์„ธ์…˜ ์š”์•ฝ (๊ฐ„๋‹จ ์ •๋ฆฌ)

  • ์˜ฌ๋ฆฌ๋ธŒ์˜ ๋ฌผ๋ฅ˜ ์‹œ์Šคํ…œ ๊ฐœ์„ ๊ธฐ

    • ์šด์˜ ํ˜„์žฅ์˜ ๋ฌผ๋ฅ˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ ์œผ๋กœ ํ’€์–ด๋‚ธ ํฅ๋ฏธ๋กœ์šด ์‚ฌ๋ก€
    • ์‹ค์ธก ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๊ฐœ์„  ์ ‘๊ทผ์ด ์ข‹์•˜์Œ
  • Amazon Q Developer + ์ƒ์„ฑํ˜• AI

    • AI๊ฐ€ ์ ์  "ํ•จ๊ป˜ ๊ฐœ๋ฐœํ•˜๋Š” ํŒ€์›"์ด ๋˜์–ด๊ฐ€๊ณ  ์žˆ์Œ์„ ์‹ค๊ฐ
  • HR SaaS ์ธ๊ฐ€ ํ”Œ๋žซํผ ์„ค๊ณ„

    • ๋‹ค์–‘ํ•œ ABAC/RBAC ์ „๋žต์˜ ์žฅ๋‹จ์  ๋น„๊ต
    • ์‹ค๋ฌด์—์„œ ๋А๋‚€ ๋ณด์•ˆ ์„ค๊ณ„ ํ˜„์‹ค์ด ์ธ์ƒ ๊นŠ์—ˆ์Œ

๐Ÿง  ํ–‰์‚ฌ์—์„œ ์–ป์€ ๊นจ๋‹ฌ์Œ

  • ๋‹จ์ˆœํžˆ โ€œ๊ธฐ๋Šฅ ๊ตฌํ˜„โ€์ด ์•„๋‹Œ, "์–ด๋–ป๊ฒŒ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ์„ค๊ณ„ํ•  ๊ฒƒ์ธ๊ฐ€"๊ฐ€ ์‹ค๋ ฅ์˜ ๊ธฐ์ค€
  • ์„ค๊ณ„๋ฅผ ์ž˜ ํ•œ๋‹ค๋Š” ๊ฑด, ๊ณตํ†ต์„ฑ๊ณผ ์˜ˆ์™ธ ํ๋ฆ„์„ ํ†ต์ œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์† ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ฒฝํ—˜์„ ๋“ฃ๋Š” ๊ฑด ๊ทธ ์ž์ฒด๋กœ๋„ ์„ค๊ณ„ ์Šคํ‚ฌ์„ ๋†’์ด๋Š” ๊ธธ

๐Ÿš€ ๋‚˜์˜ ์ ์šฉ ๊ณ„ํš

  • Result<T> ๋„์ž…ํ•ด์„œ ์„œ๋น„์Šค ํ๋ฆ„ ๊ฐœ์„  + rollback ์ „๋žต ์‹คํ—˜
  • ์•Œ๋ฆผ/์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง์— Outbox ์ ์šฉ
  • ๊ณตํ†ต ๋ชจ๋“ˆ ๋ถ„๋ฆฌ โ†’ mini spring-boot-starter ํŒจํ‚ค์ง• ์‹œ๋„
  • Kotlin ๊ธฐ๋ฐ˜ ROP ์‹คํ—˜ (์ง์ ‘ ๋ชจ๋‚˜๋“œ ๊ตฌํ˜„)

๐Ÿ™ ๋งˆ์น˜๋ฉฐ

์ด๋ฒˆ SpringCamp 2025๋Š” ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ  ์ปจํผ๋Ÿฐ์Šค๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
โ€œ์™œ ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ํ•˜๋Š”๊ฐ€?โ€๋ผ๋Š” ์งˆ๋ฌธ์„ ์Šค์Šค๋กœ์—๊ฒŒ ๋˜์ง€๋Š” ๊ณ„๊ธฐ์˜€๊ณ ,
์•ž์œผ๋กœ ๊ฐœ๋ฐœ์ž๋กœ์„œ ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ์ด์ •ํ‘œ์˜€์Šต๋‹ˆ๋‹ค.

๋‚ด๋…„์—๋„ ๊ผญ ์ฐธ์„ํ•˜๊ณ  ์‹ถ๊ณ ,
๊ทธ๋• ์ฒญ์ค‘์ด ์•„๋‹Œ ๋ฐœํ‘œ์ž ์ž๊ฒฉ์œผ๋กœ ๋ฌด๋Œ€์— ์„œ๋Š” ๊ฑธ ๋ชฉํ‘œ๋กœ ์‚ผ์•„๋ด…๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, KSUG ๐Ÿ™‡โ€โ™‚๏ธ

profile
๊ธฐํš๊ณผ ์„ค๊ณ„ ๊ทธ๋ฆฌ๊ณ  ๊ตฌํ˜„๊นŒ์ง€ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€