Skip to content

JasonYoo1995/spring-sample-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

29 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

  • ์‚ฌ์šฉ ์Šคํƒ : Spring Web, JPA, Spring AOP, JUnit4, H2 / MySQL, Thymeleaf, Bootstrap, HTML, CSS, Javascript, JQuery, Ajax

  • ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 2021๋…„ 8์›” 11์ผ ~ 8์›” 18์ผ

  • ์‹œ์—ฐ ์˜์ƒ : https://youtu.be/HTz62mclqMQ

  • ํ”„๋กœ์ ํŠธ ๋‚ด์šฉ ์š”์•ฝ

    • ๊ธˆ์œต ์–ดํ”Œ TOSS์™€ ๊ฐ™์ด, ๊ณ„์ขŒ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ์†ก๊ธˆ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์›น ์‚ฌ์ดํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ ์‹ค์ œ ์†ก๊ธˆ์€ ์•„๋‹ˆ๊ณ , ๊ฐ€์ƒ์˜ ํ™”ํ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋Œ๋ฆฝ๋‹ˆ๋‹ค.
    • ์‹ค๋ฌด์ ์ธ ์„ฑ๊ฒฉ์˜ DB ์„ค๊ณ„๋ณด๋‹ค๋Š”, ์—ฐ์Šต์ ์ธ ์„ฑ๊ฒฉ์˜ DB ์„ค๊ณ„๋ฅผ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ์—์„œ๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋“ค์— ๋Œ€ํ•ด์„œ๋Š”, ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์„ธ์…˜์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๋งค๋ฒˆ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด AOP๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • Service(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) ๊ณ„์ธต๊ณผ Repository(DAO) ๊ณ„์ธต์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ 14๊ฐœ๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•˜์—ฌ customized exception ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ œ์ž‘ ๋ฌธ์„œ

    ์†ก๊ธˆ ์„œ๋น„์Šค (์Šคํ”„๋ง ์›น ์‚ฌ์ดํŠธ) ๋ฌธ์„œ

  • ์–ด๋ ค์› ๋˜ ์  / ๊นจ๋‹ฌ์€ ์ 

    • Persistence Context(์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ์ฝ”๋”ฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • EntityManager.persist()๋ฅผ ํ†ตํ•œ ๋ช…์‹œ์ ์ธ ์˜์†ํ™” ๋ฐฉ๋ฒ•๊ณผ Dirty Checking(๋ณ€๊ฒฝ ๊ฐ์ง€)๋ฅผ ํ†ตํ•œ ์˜์†ํ™” ๋ฐฉ๋ฒ•์„ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ, ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ ๋“ค์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.
    • EntityManager.merge()๋Š” ํŠœํ”Œ์„ Updateํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฑธ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.
    • Entity ํด๋ž˜์Šค์— @OneToMany ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ Entity ๊ฐ„ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํ—ท๊ฐˆ๋ ธ์Šต๋‹ˆ๋‹ค. Foreign Key๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์–ด๋А ์ชฝ์ธ์ง€ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ํŒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ์˜์†์„ฑ ์ „์ด(Cascade) ์ ์šฉ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ '์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๋‚ด๋ถ€'์— ๋„ฃ๋А๋ƒ '์„œ๋น„์Šค ๊ณ„์ธต ํด๋ž˜์Šค ๋‚ด๋ถ€'์— ๋„ฃ๋А๋ƒ์— ๋”ฐ๋ผ 'ํŠธ๋žœ์žญ์…˜ ์Šคํฌ๋ฆฝํŠธ(Transaction Script) ํŒจํ„ด'๊ณผ '๋„๋ฉ”์ธ ๋ชจ๋ธ(Domain Model) ํŒจํ„ด'์œผ๋กœ ๋‚˜๋‰œ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.
    • JPA๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•œ ์ฟผ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ข€ ๋” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋‚˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋Š”, JPQL์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.
    • @Transactional์ด ์—†๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ @Transactional์ด ๋‹ฌ๋ฆฐ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ, ๋‘ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด์— ์žˆ์œผ๋ฉด ํŠธ๋žœ์žญ์…˜์ด ์ ์šฉ๋˜์ง€ ์•Š๊ณ , ๋‘ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์žˆ์–ด์•ผ ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.
  • ๋А๋‚€ ์ 

    • ์Šคํ”„๋ง ๊ฐœ๋ฐœ์€ ์ฒ˜์Œ์ด๋ผ, ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์ด ์ข‹์€ ์ฝ”๋“œ์ธ์ง€ ๊ฐ์ด ์•ˆ ์™”์Šต๋‹ˆ๋‹ค. ํš์ผ์„ฑ ์žˆ๋Š” ํด๋ฆฐ ์ฝ”๋“œ๋Š” ๋ชป ๋งŒ๋“  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์™€ ์ค‘๋ฐ˜๋ถ€์—๋„ ๊ณ„์†์ ์œผ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์„ฑํ•œ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜ ์—†์ด ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜๋‹ˆ๊นŒ, ์•ˆ์‹ฌ๋„ ๋˜๊ณ , ๊ฐœ๋ฐœ ํ›„๋ฐ˜๋ถ€์— ์ฝ”๋“œ๋ฅผ ๊ฐˆ์•„ ์—Ž์„ ์ผ๋„ ์—†์–ด์ง€๋ฉฐ, ๋””๋ฒ„๊น…์˜ ๋ถ€๋‹ด๋„ ์ค„์–ด๋“ ๋‹ค๋Š” ๊ฒƒ์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
    • ์Šคํ”„๋ง์ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋„๊ตฌ๋“ค๊ณผ ๊ธฐ์ˆ ๋“ค์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋А๊ผˆ๊ณ , ์•ž์œผ๋กœ ๋”์šฑ ๊นŠ์ด ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ณ ํ•œ ์ž๋ฃŒ

    • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (๊น€์˜ํ•œ ์ €)

About

remittance service with spring web mvc and jpa

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published