2021. 11. 10. 09:42ใSpring
1. Spring ๊ธฐ๋ณธ 3๊ฐ์ง ๊ณ์ธต
๋๋ถ๋ถ ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ํ๊ธฐ ์ํด์ ๊ณ์ธตํํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ณ์ธต์ผ๋ก๋ ํ๋ฆฌ์ ํ ์ด์ ๊ณ์ธต(Presentation Layer), ์๋น์ค ๊ณ์ธต(Service Layer), ๋ฐ์ดํฐ์ก์ธ์ค ๊ณ์ธต(Data Access Layer) 3๊ฐ์ง ๊ณ์ธต๊ณผ ๋ชจ๋ ๊ณ์ธต์์ ์ฌ์ฉ๋๋ ๋๋ฉ์ธ ๋ชจ๋ธ ํด๋์ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค,
๊ฐ๊ฐ์ ๊ณ์ธต์ ๊ณ์ธต๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ผํ๊ณ , ๊ฐ ๊ณ์ธต์์ ๋ด๋นํด์ผํ ๊ธฐ๋ฅ๋ค์ด ์๋ค.
์์ ์ธ๊ฐ์ง ๊ณ์ธต๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ๋ฆฌํ ์ ์๋๋ก ๊ตฌํํด์ผํ๊ณ , ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ๊ณ์ธต ์ฌ์ด์๋ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ์ฌ ํต์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
1๏ธโฃ ํ๋ฆฌ์ ํ ์ด์ ๊ณ์ธต (Presentation Layer)
ํ๋ฆฌ์ ํ ์ด์ ๊ณ์ธต์ ๋ธ๋ผ์ฐ์ ์์ ์น ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฐ ์๋ต์ ์ฒ๋ฆฌํ๋ค.
์๋น์ค ๊ณ์ธต๊ณผ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์์ ๋ฐ์ํ๋ Exception์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ,
์ต์ข UI์์ ํํํด์ผํ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค.
์ต์ข UI์์ ์ ๋ ฅํ ๋ฐ์ดํฐ์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ํ๋ฆฌ์ ํ ์ด์ ๊ณ์ธต์์ ์ ๊ณตํ๋ค.
๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ต์ข UI ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด์ ์ปจํธ๋กค๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
@Controller ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค.
2๏ธโฃ ์๋น์ค ๊ณ์ธต (Service Layer)
์๋น์ค ๊ณ์ธต์ ์ ํ๋ฆฌ์ผ์ด์ ๋น์ง๋์ค ๋ก์ง ์ฒ๋ฆฌ์ ๋น์ง๋์ค์ ๊ด๋ จ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ ํฉ์ฑ ๊ฒ์ฆํ๋ค.
ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์๋น์ค ๊ณ์ธต์ ํ๋ฆฌ์ ํ ์ด์ ๊ณ์ธต๊ณผ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ๊ณ์ธต๋ค๊ณผ ํต์ ํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
Service ์ธํฐํ์ด์ค์ @Service ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค.
3๏ธโฃ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต (Data Access Layer)
๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ ์๊ตฌ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ก์ง์ ๊ฐ์ฒดํํ๋ค.
๋ฐ์ดํฐ์ CRUD(๋ฑ๋ก, ์กฐํ, ์์ , ์ญ์ )๋ฅผ ํ๋ค.
ORM(Object Relational Mapping) ํ๋ ์์ํฌ(Mybatis, Hibernate)๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ณ์ธต
@Repostiory ์ด๋ ธํ ์ด์ ์ฌ์ฉ
4๏ธโฃ ๋๋ฉ์ธ ๋ชจ๋ธ ํด๋์ค
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฐํฐ์ ๋น์ทํ ๊ฐ๋ ์ ๊ฐ์ง๋ ๊ฒ์ผ๋ก VO(Value Object) ๋๋ DTO(Data Transfer Object)๊ฐ์ฒด์ ํด๋นํ๋ค.
๋๋ฉ์ธ ๋ชจ๋ธ ํด๋์ค๋ 3๊ฐ์ ๊ณ์ธต ์ ์ฒด์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ค.
private๋ก ์ ์ธ๋ ๋ฉค๋ฒ๋ณ์์ getter, setter ๋ฉ์๋๋ฅผ ๊ฐ์ง ํด๋์ค๋ฅผ ์๋ฏธํ๋ค.