์คํ๋ง๋ถํธ ๊ฐ์ ๋ฃ๊ธฐ ์ ์ ์ฒด ํ๋ฆ์ ์ก๊ณ ์ ์ฑ ํ ๋ฒ ํ๊ณ ๊ฐ์ ๋ฃ๊ธฐ๋ก ํจ
โ
โถ์คํ๋ง๋ถํธ์ ๋ฑ์ฅ
- ์คํ๋ง๋ถํธ : ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ ์ํ๋ก ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ์ ๋๋ก ์ดํดํ๊ธฐ
- ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
- web Framwork
โ RoR (๊ฒฝ๋) Ruby๋ก ๋ง๋ฆ
โกFlask&Djang (๊ฒฝ๋)
โขNode.js&Nest.js (๊ฒฝ๋)
โฃSpring : Enterprise, ๋ฌด๊ฑฐ์ ⇒ (๊ฒฝ๋ํ, ์์ ๊ฒ๋ค๊ณผ ๊ฒฝ์ํ๋ ค๊ณ ) ⇒ SpringBoot
- ์คํ๋ง๋ถํธ์ ์ฅ์ (์คํ๋ง๊ณผ์ ์ฐจ์ด์ )
|
์คํ๋ง๋ถํธ
|
์คํ๋ง
|
๋ผ์ด๋ธ๋ฌ๋ฆฌ
|
|
|
์ค์ ์ ์๋ํ
(๋น ๋ฑ๋ก) |
|
|
ํ
์คํธ ํ๊ฒฝ
|
|
|
ํฐ์บฃ
|
|
|
JAR ํจํค์ง
|
|
|
- ์คํ๋ง๋ถํธ์ ๊ฐ์ฅ ํฐ ํน์ง
-Stater : ํ๋ก์ ํธ ๊ฐ๋ฐ์ ์ฝ๊ฒ ์์ํ ์ ์๋๋ก ๋ค์ํ ์คํํฐ ํจํค์ง๋ฅผ ์ ๊ณต
-AutoConfiguration : ๋ณ๋์ ์ค์ ์์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ์๋์ผ๋ก ๊ตฌ์ฑ
-Actuater : ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ์ก์ถ์์ดํฐ๋ฅผ ์ ๊ณต
โถ ํ๊ฒฝ์ค์
- ์ด ์ฑ ์์๋ Maven๊ณผ ์ดํด๋ฆฝ์ค๋ฅผ ์ด์ฉํด์ ๋ณต์กํ ํ๋ก์ ํธ ์์์ ํ๋๋ฐ
- https://start.spring.io/ ๋ฅผ ์ด์ฉํ๋ฉด ๋จ
- ์ฌ์ฉํ๊ณ ์ถ์ ๋ชจ๋์ ์ฒดํฌ๋ง ํ๋ฉด ์๋์ผ๋ก ์ถ๊ฐ๋จ.
ex) web ์ ํ๋ง์ผ๋ก JUnit, SpringMvc ๋ฑ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ ํฌํจ๋จ
โถ ํต ์คํํธ(ํ๋ก์ ํธ ๋๋ฌ๋ณด๊ธฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ)
- ํ๋ก์ ํธ์ ์ค์ฌ ๊ตฌ์กฐ
- static : ์ ์ ์น ๋ฆฌ์์ค ์ ์ฅ
- templates : ํ ํ๋ฆฟ ๊ธฐ๋ฐ์ ์น ๋ฆฌ์์ค ์ ์ฅ
- application.properties : ํ๋ก์ ํธ ์ ์ฒด์์ ์ฌ์ฉํ ํ๋กํผํฐ ์ ๋ณด ์ ์ฅ(๋ชจ๋ ์ค์ )
- ๋ฉ์ด๋ธ์ ๊ฒฝ์ฐ pom.xml์์ pomํ์ผ์ด ๊ณ์ธกํ๋์ด ์์ด์ ์์ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
- ๊ทธ๋ ์ด๋ค์ ํ๋ก์ ํธ ๊ฐ์ ์์์ ๋ช ์์ ์ผ๋ก ์ง์ํ์ง ์์ง๋ง ๋์ , ํ๋ก์ ํธ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ๊ณต์ ํ๊ฑฐ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- ํฐ์บฃ์ด ๋ด์ฅ๋์ด ์์ด์ main()์ ์คํํ๋ฉด ๋ด์ฅํฐ์บฃ์ด ๋์๊ฐ.
- ์น ์๋ฒ ๊ตฌ๋์ด ์๋ ๋ด๋ถ ๋์์ผ๋ก ์คํํด๋ณด๊ณ ์ถ๋ค๋ฉด application.properties์ ์ค์ ์ none์ผ๋ก ๋ฐ๊พธ๋ฉด ๋จ
spring.main.web-application-type=none
- ํฐ์บฃ ์๋ฒ ํฌํธ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด ๊ด๋ จ ํ๋กํผํฐ ์ถ๊ฐ
server.port=8000
- ์คํ๋ง์์๋ xml ์ค์ ํ์ผ์ ์ปดํฌํดํธ์ค์บ์ ์ค์ ํด์ผ ์ปจํ ์ด๋๊ฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํด์ค. ์คํ๋ง๋ถํธ๋ ์ง์ ์ค์ ํ์ง ์์๋ ๋จ. → ๋ฐ๋ก @SpringBootApplication ๋๋ถ
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@AliasFor(annotation = EnableAutoConfiguration.class)
Class<?>[] exclude() default {};
...
}
- ์์๋ ์ฌ๋ฌ ์ ๋ํ ์ด์ ์ด ์๋๋ฐ ๋น ๊ด๋ จ๋ ์ ๋ํ ์ด์ ์ ๊ฐ๋จํ๊ฒ ๊ตฌ๋ถํด๋ณด๋ฉด ์ด๋ ๋ค
์ ๋ํ
์ด์
|
๋น ๊ด๋ จ
|
ํน์ง
|
@SpringBootConfiguration
|
๋น์ ์ ์
|
@Configuration์ ํน๋ณํ ๋ฒ์ ,
์คํ๋ง ๋ถํธ์์ ์ฌ์ฉํ๋ ์ค์ ํด๋์ค๋ฅผ ์ ์ |
@EnableAutoConfiguration
|
๋น์ ์์ฑํ๊ณ ๊ตฌ์ฑ
|
์๋ ๊ตฌ์ฑ์ ํ์ฑํ(ํด๋์ค ๊ฒฝ๋ก์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ ๋น์ ์๋์ผ๋ก ์์ฑํ๊ณ ๊ตฌ์ฑ)
ex) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฐ๊ฒฐ, ์น ์๋ฒ ์ค์ , ๋ณด์ ์ค์ |
@ComponentScan
|
๋น์ผ๋ก ๋ฑ๋ก
|
์คํ๋ง์์ ์ปดํฌ๋ํธ ์ค์บ์ ํ์ฑํ(์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋กํ ํด๋์ค๋ฅผ ์ฐพ์์ ๋น์ผ๋ก ๋ฑ๋ก)
์ปดํฌ๋ํธ ์ค์บ์ด ์์๋๋ ๋ฒ ์ด์คํจํค์ง๋ฅผ ์ง์ ํ ์ ์ |
- @RestController: JSP๊ฐ์ ๋ทฐ๋ฅผ ๋ณ๋๋ก ๋ง๋ค์ง ์๋ ๋์ ์ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๊ฐ ๋ฆฌํดํ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํจ. ๋๋ถ๋ถ ๋ฌธ์์ด์ด๊ฑฐ๋ DTO(์ปฌ๋ ์ ํํ์ ์๋ฐ๊ฐ์ฒด). ์๋ฐ ๊ฐ์ฒด์ ์ ๋ฌ๊ฒฝ์ฐ ์๋์ผ๋ก JSON์ผ๋ก ๋ณํํด์ค.
- ์ปจํธ๋กค๋ฌ ์์ ์ ๋งค๋ฒ ์ ํ๋ฆฌ์ผ๋์ ์ฌ์คํ์ด ๊ท์ฐฎ๋ฉด ์คํ๋ง๋ถํธ๊ฐ ์ ๊ณตํ๋ DevTools ๊ธฐ๋ฅ ์ด์ฉํ๊ธฐ(๋ฌผ๋ก ๊ฐ๋ฐ์์๋ง ํ์ฑํ ํ๊ณ ์ค์ ์ด์์์๋ ๋นํ์ฑํ ํด์ผํจ) ์๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
- Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
- Gradle
dependencies {
developmentOnly 'org.springframework.boot:spring-boot-devtools'
}
- ์ค์ ํ์ผ
spring.devtools.restart.poll-interval=1000ms
spring.devtools.restart.quiet-period=1000ms
- ์ธํ ๋ฆฌ์ ์ด์ recompile๋ฐฉ๋ฒ : ๋ฉ๋ด -build-ecompile
- ๋กฌ๋ณต ๋ผ์ด๋ธ๋ฌ๋ฆฌ : Getter, Setter, toString ์ฝ๋ ์๋ ์ถ๊ฐ
- @Data๋ ๋ชจ๋ ์ ๋ํ ์ด์ ๋ชจ๋ ํฌํจ(Setter ์๋ ์ถ๊ฐํ๋ฏ๋ก ์ ๋ณ์ ์ผ๋ก ์ฌ์ฉํ )
'๐ฅ๏ธ ๋ฐฑ์๋ > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.5 ์คํ๋ง๋ฐ์ดํฐ JPA (0) | 2023.11.23 |
---|---|
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.4 JPA API (0) | 2023.11.23 |
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.3 ํ ์คํธ, ๋ก๊น , ๋น๋ (1) | 2023.11.23 |
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.2 ์์กด์ฑ๊ณผ ์๋์ค์ (0) | 2023.11.23 |
[๋ณด์] ์ฟ ํค์ ์ธ์ ๊ทธ๋ฆฌ๊ณ JWT (1) | 2023.11.23 |