SpringBoot Part1 (1)
Spring ๊ธฐ์ด์ ๋ชฉํ
- Spring Framework ํต์ฌ ๊ฐ๋ ๋ค์ ์ดํดํฉ๋๋ค.
- Spring Framework Core ๋ชจ๋์ ์ดํดํฉ๋๋ค.
- Spring Framework JDBC ๋ชจ๋์ ์ดํดํฉ๋๋ค.
- Spring Framework ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ดํดํฉ๋๋ค.
- Spring Boot๋ก ์คํ๋ง ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค.
- ์คํ๋ง(๋ถํธ) ์์ํ๊ธฐ
- Spring Boot ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
- Spring Framework์ดํดํ๊ธฐ
- ์คํ๋ง ๋ถํธ ์ดํดํ๊ธฐ
- ๋ฐ์ดํฐ๋ก ์์
ํ๊ธฐ
- ๋ฐ์คํธ ์ฝ๋ ์์ฑ
- JDBC ์ด์ฉ
- Spring Framework์ JdbcTemplate ์ฌ์ฉ
- AOP ์ดํดํ๊ธฐ
- ์น ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐํ๊ธฐ
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ดํดํ๊ธฐ
- ๊ฐ๋จํ ์๋ธ๋ฆฟ ๋ง๋ณด๊ธฐ
- ์คํ๋ง MVC ๋์์๋ฆฌ ์ดํดํ๊ธฐ
- CORS์ ๋ํ ์ดํด์ ์ ์ฉํ๊ธฐ
- Spring MVC Test ์ ์ฉํ๊ธฐ
Build Tool
- Maven - build ๋์์ ๊ธฐ์ ํ Build Script๋ฅผ XML์ ๊ธฐ์ (pom.xml)
- Gradle - groovy, kotiln
Build?
: ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ๊ณ classpath์ถ๊ฐ
: ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ
: ํ ์คํธ ์คํ
: ์ปดํ์ผ๋ ์ฝ๋๋ฅผ packing ํฉ๋๋ค. → jar / war / zip etc
: packing๋ ํ์ผ์ ์ฃผ๋ก artifacts ๋ผ๊ณ ๋ถ๋ฅด๋ ์๋ฒ๋ ๋ ํ์งํ ๋ฆฌ์ ๋ฐฐํฌํฉ๋๋ค.
Maven
XML๊ธฐ๋ฐ์ผ๋ก ์ค์ ๋ชจ๋ธ์ ์ ๊ณตํ๊ณ pom.xmlํ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. (Project Object Model)
: achetypes๋ผ๋ ํ๋ก์ ํธ ํ ํ๋ฆฟ์ ์ ๊ณตํด์ค๋ค. (์ผ์ผํ ์ค์ ์ ๋ฐ๋ณตํ์ง ์์๋๋๋ค.)
: ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ dependency๋ฅผ ๊ด๋ฆฌํด์ค๋ค.
: ํ๋ฌ๊ทธ์ธ๊ณผ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ค. → ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ธ๋ถ dependency ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ด์ง์๊ฒ
: dependency๋ฅผ ๋ค์ด ๋ฐ๋ repo๊ฐ ๋ก์ปฌ์ด ๋ ์๋ ์๊ณ Maven Cental์ ๊ฐ์ ๊ณต๊ฐ repo์ผ ์๋ ์๋ค.
Maven Project ์์ฑ
- pom.xml
<groupId>org.prgms</groupId>
<artifactId>dev-kdt-maven</artifactId>
<version>1.0.1</version>
ํ๋ก์ ํธ๋ฅผ ์๋ณํ๋๋ฐ ์ฌ์ฉ๋๋ค.
groupId → ๋ณดํต ํ์ฌ๋ ๋จ์ฒด ์์ฑ
artifactId → ๊ฐ๋ณ ๋ชจ๋ : ํ๋ก์ ํธ ๋ช
- Build Life Cycle์ด ์กด์ฌ
- Transitive Depedencies
Gradle
xml๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ ์์ฑ์ด ๊ฐ๋ฅํ๋ค
- build.gradle
1. Spring Intiializr
Manual Setup
maven/Gradle๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ pom.xml์ด๋ build.gradl์ ์ง์ ์์ ํฉ๋๋ค.
Spring Boot
- Spring Boot CLI ์ด์ฉ
- https://start.spring.io/
- ์์ฑํ ๋ ์ธ๋ถ dependencies ์ถ๊ฐ ๊ฐ๋ฅ (JDBC API, Spring Web ๋ฑ)
Spring init --build maven -j 17 -g org.prgrms -a kdt-spring-demo -n kdt-spring-demo -x kdt-spring-demo
- Spring Initializ ์ด์ฉ
- InterlliJ ์ด์ฉ
2. ์คํ๋ง์ญ์ฌ
- Spring Famework
- ์ฌ๋ฌ Spring ํ๋ก์ ํธ๋ฅผ ์ง์ํ๋ ํฐ ์๋ฏธ์ Framework ์ฌ๋ฌ ๋ชจ๋์ ์ง์ํ๋ค.
- Spring Boot
- ์ปดํจํฐ๋ฅผ ๋ถํ ํ๋ค๋ ๋ง์ฒ๋ผ ์์คํ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ๋ก ๋ง๋๋ ๊ฒ์ ์๋ฏธ
- Spring Boot๊ฐ ์์๋ Setup์ ํ๋๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค.
- ์์ฌ์ด ์คํ, ์๋ ์ค์ , ์ฌ์ด ์ธ๋ถํ๊ฒฝ ์ค์ , developer tools ๋ฑ
3. ์คํ๋ง ํ๋ ์์ํฌ ํต์ฌ ๊ธฐ๋ฅ
Core Technologies
- Spring IoC ์ปจํ ์ด๋ ๊ทธ๋ฆฌ๊ณ Beans
- ๋ฆฌ์์ค ํธ๋ค๋ง
- ๋ฒจ๋ฆฌ๋ฐ์ด์ ๊ณผ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๊ทธ๋ฆฌ๊ณ ํ์ ๋ณํ
- ์คํ๋ง expression ์ธ์ด
- AOP
- Null-Safety
- ๋ฐ์ดํฐ ๋ฒํผ์ ์ฝ๋ฑ
- ๋ก๊น
์์กด์ฑ โ๏ธ
โ Domain Driven Design์ ์ํ ์ฉ์ด
Domain
: ์ ์ฌํ ์ ๋ฌด์ ์งํฉ
Entity
: ์ํฐํฐ๋ ๋ค๋ฅธ ์ํฐํฐ์ ๊ตฌ๋ณํ ์ ์๋ ์๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฐ์ฒด์ ๋๋ค.
: ๋๋ฉ์ธ์์ ๊ฐ๋ณ์ฑ์ด ์๋ ๊ฐ๋ . ์ฃผ๋ฌธ๊ด๋ฆฌ ๋๋ฉ์ธ์์ ‘์ฃผ๋ฌธ’์ด๋ผ๋ entity๊ฐ ์๊ณ ์ฃผ๋ฌธ์ ๊ฐ๊ฐ ์ ๋ํฌํ๋ค.
: UUID(๋ฒ์ฉ ๊ณ ์ ์๋ณ์) type์ผ๋ก ๋ง์ด ์์ฑํ๋ค.
: Entity Class์ ๋น์ง๋์ค ๋ก์ง์ด ๋ค์ด๊ฐ๋ค.
Value Object (๊ฐ ๊ฐ์ฒด)
: ๊ฐ ๊ฐ์ฒด๋ ๊ฐ ์์ฑ์ด ๊ฐ๋ณ์ ์ผ๋ก ๋ณํํ์ง ์๊ณ ๊ฐ ๊ทธ ์์ฒด๋ก ๊ณ ์ ํ ๋ถ๋ณ ๊ฐ์ฒด์ ๋๋ค.
: ๋์ฒด๋ก ์ํฐํฐ๊ฐ value object๋ฅผ ์์ฑ์ผ๋ก ๊ฐ์ง๊ณ ์๋ค.
: ํ๋ฒ ์ฃผ๋ฌธ์ด ๋ง๋ค์ด์ง๋ฉด ์ฃผ๋ฌธ์,๋ฐฐ์ก์ง,์ฃผ๋ฌธ ์์ดํ ์ ๋ณํ์ง์๋๋ค.
โ ์์กด์ฑ ๊ด๋ฆฌ
์ด๋ค ๊ฐ์ฒด๊ฐ ํ๋ ฅํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ์๋ก ํ ๋ ๋ ๊ฐ์ฒด ์ฌ์ด์ ์์กด์ฑ์ด ์กด์ฌํ๊ฒ ๋๋ค. ์์กด์ฑ์ ์คํ ์์ ๊ณผ ๊ตฌํ ์์ ์ ์๋ก ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- ์ปดํ์ผํ์ ์์กด์ฑ : ์ฝํธ๋ฅผ ์์ฑํ๋ ์์ ์์ ๋ฐ์ํ๋ ์์กด์ฑ ํด๋์ค ์ฌ์ด์ ์์กด์ฑ
- ๋ฐํ์ ์์กด์ฑ : ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ์์ ์ ์์กด์ฑ. ๊ฐ์ฒด ์ฌ์ด์ ์์กด์ฑ
Order๊ฐ FixedAmountVourcher์ ์ง์ ์์กดํ๋ ๊ฒ์ ํ๋ ์ฝ๋ฉ (๋ฐ์ฐ์ฒ ๋ฐฉ์์ ๋ฐ๋ผ Order class ์ฝ๋๋ฅผ ๋ณ๊ฒฝ ํด์ค์ผํ๋ค.) ๊ฐํ ๊ฒฝํฉ๋.
๊ฒฐํฉ๋
ํ๋์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ณํ๋ฅผ ์๊ทํ๋ ์ ๋
๋ ์์ ์ฌ์ด์ ์กด์ฌํ๋ ์์กด์ฑ์ด ๋ฐ๋์งํ ๋ ๋์จํ ๊ฒฐํฉ๋ ๋๋ ์ฝํ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง๋ค๊ณ ํ๊ณ ๋ฐ๋๋ก ๊ทธ๋ ์ง ๋ชปํ ๋ ๋จ๋จํ ๊ฒฐํฉ๋ ๋๋ ๊ฐํ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง๋ค๊ณ ๋งํ๋ค.
→ ๋์จํ ๊ฒฐํฉ๋๋ฅผ ์ํด ๋ฐํ์ ์์กด์ฑ์ ๊ฐ๋๋ก ํ๋ค. (์์กด์ฑ ์ฃผ์ ์ ํตํด)
// Order ์์ฑ์ - ์ปดํ์ผ ์์กด์ฑ
public Order(UUID orderId, UUID customerId, List<OrderItem> orderItems, long discount) {
this.orderId = orderId;
this.customerId = customerId;
this.orderItems = orderItems;
this.fixedAmountVoucher = new FixedAmountVoucher(voucherId, discountAmount);
}
// Order ์์ฑ์ - ๋ฐํ์ ์์กด์ฑ voucher ์ฃผ์
๋ฐ๊ธฐ
public Order(UUID orderId, UUID customerId, List<OrderItem> orderItems, Voucher voucher) {
this.orderId = orderId;
this.customerId = customerId;
this.orderItems = orderItems;
this.voucher = voucher;
}
Daliy Mission
- Maven๊ณผ Gradle๋ก ํ๋ก์ ํธ๋ฅผ ์ค๋ฐ๋ก ๊ตฌ์ฑํด๋ด ๋๋ค.
- Spring Boot CLI ์ค์นํด์ ๋ช
๋ น์ด๋ค ์ฌ์ฉํด๋ณด๊ธฐ
- ์ปค๋ฉ๋ ๋ผ์ธ ๋ช ๋ น์ด๋ก ํ๋ก์ ํธ ์์ฑํด๋ณด๊ธฐ
- IntelliJ๋ฅผ ํตํด Spring Boot ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด๊ณ ์๋ฒ๋ฅผ ์คํ์์ผ๋ณด์. (Web)
์ถ์ฒ - ํด๋ฆฌ : SpringBoot Part1
'Back-end ๋ฐ๋ธ์ฝ์ค > week 03 - 05 TIL (Spring)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 221107 - SpringBoot Part2 : Spring Test ์์ํ๊ธฐ (0) | 2022.11.08 |
---|---|
[TIL] 221104 - SpringBoot Part1 : logging, SpringBoot (2) | 2022.11.06 |
[TIL] 221103 - SpringBoot Part1 - ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ ๊ด๋ฆฌ (0) | 2022.11.06 |
[TIL] 221102 - SpringBoot Part1 : Dependecy injection, ์ปดํฌ๋ํธ ์ค์บ (0) | 2022.11.03 |
[TIL] 221101 - SpringBoot Part1 : IoC, DDD, ApplicationContext (0) | 2022.11.03 |
๋๊ธ