Layered Architecture

  • layered architecture - ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์„ ์œ ์‚ฌํ•œ ์ฑ…์ž„์„ ์ง€๋‹Œ layer๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋ ˆ์ด์–ด๊ฐ€ ํ•˜์œ„ ๋ ˆ์ด์–ด์—๋งŒ ์˜์กดํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ์•„ํ‚คํ…์ณ ํŒจํ„ด

    1. presentation ๋ ˆ์ด์–ด

      • HTTP ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ, Body๋ฅผ validation, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์œ„์ž„, ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•จ

      • (์ถ”๊ฐ€) ํ•จ์ˆ˜(์—ฐ์‚ฐ) ๋ ˆ๋ฒจ์—์„œ์ด ๋ช…๋ น๊ณผ ์กฐํšŒ์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” CQS(command query seperation)์„ ์ ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ช…๋ น๊ณผ ์กฐํšŒ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ

    2. application ๋ ˆ์ด์–ด

      • ํ๋ฆ„ ์ œ์–ด ๋ชฉ์ , AOP๋ฅผ ์‚ฌ์šฉํ•œ ์ข…์ &ํšก์  ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ, ๋„๋ฉ”์ธ ๋ชจ๋ธ ๋„์ž…, ๋‹จ์ผ ์ฑ…์ž„์„ ์ง€๋‹ˆ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ์—ญํ• ์„ ์œ„์ž„

      • ๋‹จ์ผ ๊ฐœ์ฒด ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ๋‹จ์  โ†’ ํ•˜๋Š” ์—ญํ• ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๋ณต์žก๋„ ์ฆ๊ฐ€. ์—ฐ๊ด€์„ฑ์ด ์ ์€ ๊ฐœ์ฒด๊ฐ€ ์„œ๋น„์Šค ๊ฐœ์ฒด์— ๋ฐ€์ง‘ํ•˜๊ฒŒ ๋˜๋ฉด ์˜์กดํ•˜๋Š” ๊ฐœ์ฒด๊ฐ€ ๋งŽ์•„์ง€๊ณ , ๊ทธ๋Ÿฌ๋ฉด ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•œ ์ฝ”๋“œ๊ฐ€ ๋จ

    3. domain ๋ ˆ์ด์–ด

      • CQS ์›์น™์— ๋”ฐ๋ผ ๋ช…๋ น ์ฑ…์ž„๊ณผ ์กฐํšŒ ์ฑ…์ž„์„ ๋ถ„๋ฆฌ

      • DIP์— ๋”ฐ๋ผ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์—์„œ๋Š” ๊ณ ์ˆ˜์ค€์˜ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ํ•ด๊ฒฐํ•ด์•ผ๋˜๊ณ , ์ €์ˆ˜์ค€์˜ ๊ธฐ์ˆ  ๊ตฌํ˜„, ์™ธ๋ถ€ ์ธํ”„๋ผ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑํ•ด์•ผ๋จ

        • ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋Š” ์ถ”์ƒ์ ์ด์—ฌ์•ผ๋˜๊ณ , ๋‹ค๋ฅธ ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„์•ผ๋จ

    4. infrastructure ๋ ˆ์ด์–ด

      • Data access ๊ธฐ์ˆ , IoC ์ปจํ…Œ์ด๋„ˆ, ๊ทธ ์™ธ ๊ธฐ์ˆ ์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ํฌํ•จ

        • Spring IoC ํ™˜๊ฒฝ ๊ตฌ์„ฑ

        • Session, JWT ๋ณด์•ˆ ๊ธฐ๋Šฅ

        • Data Access(Hibernate๋‚˜ MyBatis, JDBC)

        • ๋ฉ”์„ธ์ง• ํ(Rabbit MQ, Kafka)

        • ๋ฉ”์ผ(JavaMail)

Last updated