IT๊ณต๋ถ€์ผ๊ธฐ
article thumbnail

๐Ÿ” 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๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉ

 

โœ” ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•

์–ด๋–ค ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ฒ„์ „๋ณ„ ํ™•์ธ

-> https://bit.ly/3N0vENa 

 

Dependency Versions

 

docs.spring.io

์Šคํƒ€ํ„ฐ์˜ ์ข…๋ฅ˜์™€ ํŠน์ • ์Šคํƒ€ํ„ฐ์˜ ์˜์กด์„ฑ์ด ๊ถ๊ธˆํ•  ๋•Œ

-> https://bit.ly/40o8bZd 

 

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(์ถ”๊ฐ€์ ์œผ๋กœ))

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ž๋™ ๊ตฌ์„ฑ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์• ํ„ฐํ…Œ์ด์…˜

์Šคํ”„๋ง ๋ถ€ํŠธ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๋ฉ”ํƒ€ ํŒŒ์ผ์„ ์ฝ๊ณ  ์ •์˜๋œ ์„ค์ •๋“ค์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ์—ญํ•