๐ Controller ๊ฐ๋จํ ์์
@RestController
public class TestController {
@GetMappling("/test")
public String test() {
return "Hello, World!";
}
}
http://localhost:8080/test์ ์ ์ํ๋ฉด ํ๋ฉด์ Hello, World!๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
1. localhost์ ์์ดํผ๋ 127.0.0.1์ ๋๋ค.
์ด๋ ์ปดํจํฐ ๋คํธ์ํฌ์์ ์ฌ์ฉํ๋ ๋ฃจํ๋ฐฑ ํธ์คํธ๋ช ์ด๋ผ๋ ํ์ฌ ์ฌ์ฉ ์ค์ธ ์ปดํจํฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
2. 8080 : ํฌํธ ๋ฒํธ
3. test : ๊ฒฝ๋ก (@GetMapping์์ ์ค์ ํ ๊ฒฝ๋ก)
/test GET์์ฒญ์ด ์ค๋ฉด test()๋ฉ์๋๋ฅผ ์คํ์ํจ๋ค.
๐ ์คํ๋ง ๋ถํธ ์คํํฐ Spring Boot Starter ์ดํด๋ณด๊ธฐ
์์กด์ฑ์ด ๋ชจ์ฌ ์๋ ๊ทธ๋ฃน์ ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
๋ช ๋ช ๊ท์น : spring-boot-starter-{์์ ์ ํ}
๋ํ์ ์ธ ์คํํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ์คํํฐ | ์ค๋ช |
| spring-boot-starter-web | Spring MVC๋ฅผ ์ฌ์ฉํด์ RESTful ์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋ ํ์ํจ |
| spring-boot-starter-test | ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๊ธฐ ์ํจ |
| spring-boot-starter-validation | ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํจ |
| spring-boot-starter-actuator | ๋ชจ๋ํฐ๋ง์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๊ณตํ๋ ๋ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ ์ฝ๊ฒ ํจ |
| spring-boot-starter-data-jpa | ORM์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ ๋ชจ์์ธ JPA๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉ |
โ ์คํ๋ง ๋ถํธ๊ฐ ์์กด์ฑ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ
์ด๋ค ์์กด์ฑ์ ์ฌ์ฉํ๋์ง ๋ฒ์ ๋ณ ํ์ธ
Dependency Versions
docs.spring.io
์คํํฐ์ ์ข ๋ฅ์ ํน์ ์คํํฐ์ ์์กด์ฑ์ด ๊ถ๊ธํ ๋
GitHub - spring-projects/spring-boot: Spring Boot
Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.
github.com
๐ ์๋๊ตฌ์ฑ
์คํ๋ง ๋ถํธ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ต์ํ์ ์ค์ ๋ง์ผ๋ก๋ ์คํ๋๊ฒ ์ฌ๋ฌ ๋ถ๋ถ์ ์๋์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.
์คํ๋ง ๋ถํธ๋ ์๋ฒ๋ฅผ ์์ํ ๋ ๊ตฌ์ฑ ํ์ผ์ ์ฝ์ด์์ ์ค์ ํ๋๋ฐ ์ด๋ฅผ ์๋์ค์ ์ด๋ผ๊ณ ํฉ๋๋ค.
์๋ ์ค์ ์ META_INF์ ์๋ spring.factories ํ์ผ์ ๋ด๊ฒจ ์์ต๋๋ค.
(์๋ ๊ตฌ์ฑ์ด ์๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ํน์ ๊ธฐ์ ์ ์ฌ์ฉํ ๋๋ง๋ค ์ค์ ํด์ผ ํ๋ ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค์ ํด์ผ ํจ)
๐ SpringApplication์ ์ดํด
@SpringBootApplication
public class SpringBootDeveloperApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDeveloperApplication.class, args);
}
}
@SpringBootApplication : ์คํ๋ง ๋ถํธ ์ฌ์ฉ์ ํ์ํ ๊ธฐ๋ณธ ์ค์
SpringApplication.run() : ์ ํ๋ฆฌ์ผ์ด์ ์คํ
SpringBootDeveloperApplication.class : ์คํ๋ง ๋ถํธ 3 ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ์ธ ํด๋์ค๋ก ์ฌ์ฉํ ํด๋์ค
args : ์ปค๋งจ๋ ๋ผ์ธ์ ์ธ์๋ค์ ์ ๋ฌ
๐ @SpringBootApplication ์ ๋ํ ์ด์ ์ ๊ตฌ์ฑ
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration // ์คํ๋ง ๋ถํธ ๊ด๋ จ ์ค์
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM,
// ์ฌ์ฉ์๊ฐ ๋ฑ๋กํ ๋น์ ์ฝ๊ณ ๋ฑ๋ก
classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM,
classes = AutoConfigurationExcludeFilter.class)
})
@EnableAutoConfiguration // ์๋์ผ๋ก ๋ฑ๋ก๋ ๋น์ ์ฝ๊ณ ๋ฑ๋ก
public @interface SpringBootApplication {
// ์๋ต
}
โ @SpringBootConfiguration
์คํ๋ง ๋ถํธ ๊ด๋ จ ์ค์ ์ ๋ํ๋ด๋ ์ ๋ํ ์ด์
@Configuration์ ์์ํด์ ๋ง๋ ์ ๋ํ ์ด์ ์ ๋๋ค.
@SpringBootConfiguration, @ComponentScan, @EnableAutoConfiguration์ผ๋ก ์ด๋ฃจ์ด์ง
โ @ComponentScan
์ฌ์ฉ์๊ฐ ๋ฑ๋กํ ๋น์ ์ฝ๊ณ ๋ฑ๋กํ๋ ์ ๋ํ ์ด์
@Component ์ ๋ํ ์ด์ ์ ๊ฐ์ง ํด๋์ค๋ค์ ์ฐพ์ ๋น์ผ๋ก ๋ฑ๋กํ๋ ์ญํ ์ ํฉ๋๋ค.
@Controller๊ฐ @ComponentScan์ ํตํด ๋น์ผ๋ก ๋ฑ๋ก๋๋ ์ด์
-> @Controller์์ @Component๋ฅผ ๊ฐ์ง๊ณ ์์
@Component๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ ๋ํ
์ด์
: @Controller, @RestController, @Configuration, @Repository, @Service
โ @Configuration
์ค์ ํ์ผ ๋ฑ๋กํ๋ ์ ๋ํ ์ด์
โ @Repository
ORM ๋งคํํ๋ ์ ๋ํ ์ด์
โ @Controller, @RestController
๋ผ์ฐํฐ : HTTP ์์ฒญ๊ณผ ๋ฉ์๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ฅ์น(ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ง๋ ๋ฉ์๋๋ฅผ ์คํ)
@Controller + @ResponseBody = @RestController
โ @Service
๋น์ฆ๋์ค ๋ก์ง
โ @EnableAutoConfiguration
์๋ ์ค์ ์ผ๋ก ๋ฑ๋ก๋๋ ๋น์ ์ฝ๊ณ ๋ฑ๋กํ๋ ์ ๋ํ ์ด์
(@ComponentScan๊ณผ ๋ฌด์์ด ๋ค๋ฅธ์ง?
-> ๋น์ ๋๋ฒ ๋ฑ๋กํจ, @ComponentScan(์ฒ์) -> @EnableAutoConfiguration(์ถ๊ฐ์ ์ผ๋ก))
์คํ๋ง ๋ถํธ์์ ์๋ ๊ตฌ์ฑ์ ํ์ฑํํ๋ ์ ํฐํ ์ด์
์คํ๋ง ๋ถํธ ์๋ฒ๊ฐ ์คํ๋ ๋ ์คํ๋ง ๋ถํธ์ ๋ฉํ ํ์ผ์ ์ฝ๊ณ ์ ์๋ ์ค์ ๋ค์ ์๋์ผ๋ก ๊ตฌ์ฑํ๋ ์ญํ
