[๐Ÿ“ฐ ์œ„ํด๋ฆฌํŽ˜์ดํผ] Spring

han91ยท2026๋…„ 2์›” 2์ผ

[์œ„ํด๋ฆฌํŽ˜์ดํผ]

๋ชฉ๋ก ๋ณด๊ธฐ
5/11

๐Ÿ“Œ ์›น์„œ๋ฒ„ vs WAS

๐Ÿง ์›น์„œ๋ฒ„๋ž€?

์›น ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์˜ HTTP ์š”์ฒญ์„ ๋ฐ›์•„ ์ •์ ์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ์‘๋‹ตํ•˜๋Š” ์„œ๋ฒ„

๐Ÿ’ ์ฃผ์š” ์—ญํ• 

  • HTML, CSS, JS, ์ด๋ฏธ์ง€ ๊ฐ™์€ ์ •์  ํŒŒ์ผ ์ œ๊ณต
  • ์š”์ฒญ์„ WAS๋กœ ์ „๋‹ฌ(ํ”„๋ก์‹œ ์—ญํ• )
  • SSL ์ฒ˜๋ฆฌ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
  • ์บ์‹ฑ

๐Ÿ” ๋Œ€ํ‘œ์ ์ธ ์›น ์„œ๋ฒ„

  • Apache HTTP Server
  • Nginx

๐Ÿ“Œ ํ•ต์‹ฌ ํฌ์ธํŠธ

๐Ÿ‘‰ "ํŒŒ์ผ ์„œ๋น™ + ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋‹ด๋‹น"

๐Ÿง WAS (Web Application Server)?

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ณ  ๋™์  ์ปจํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์„œ๋ฒ„

๐Ÿ’ ์ฃผ์š” ์—ญํ• 

  • Java ์ฝ”๋“œ ์‹คํ–‰
  • DB ์—ฐ๋™
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ
  • Servlet / JSP ์‹คํ–‰
  • ๋™์  HTML ์ƒ์„ฑ

๐Ÿ” ๋Œ€ํ‘œ์ ์ธ ์›น ์„œ๋ฒ„

  • Apache Tomcat
  • JBoss
  • WebLogic
  • WebSphere

๐Ÿ“Œ ํ•ต์‹ฌ ํฌ์ธํŠธ

๐Ÿ‘‰ "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์—”์ง„"

๐Ÿง Spring Boot์˜ ๋‚ด์žฅ ํ†ฐ์บฃ์€ ์–ด๋””์— ํ•ด๋‹น?

Spring Boot ์ž์ฒด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
๊ทธ ์•ˆ์— ํฌํ•จ๋œ ํ†ฐ์บฃ์ด ์„œ๋ฒ„ ์—ญํ• ์„ ํ•จ -> WAS

๐Ÿ‘‰ ๋”ฐ๋กœ Apache๋‚˜ Nginx ์—†์ด๋„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•จ


๐Ÿ“Œ Spring Boot

๐Ÿง Bean?

Spring IoC ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ
์ผ๋ฐ˜์ ์ธ Java ๊ฐ์ฒด(POJO)์ง€๋งŒ, Spring์ด ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์˜์กด์„ฑ ์ฃผ์ž…, ์†Œ๋ฉธ ๋“ฑ์„ ์ฑ…์ž„์ง„๋‹ค๋Š” ์ ์—์„œ ํŠน๋ณ„ํ•œ ๊ด€๋ฆฌ ๋Œ€์ƒ์ด ๋จ

๐Ÿ“Œ ์‰ฝ๊ฒŒ ๋งํ•ด, Spring์— ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ

๐Ÿ” Bean์˜ ์˜ˆ์‹œ

Spring์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ Bean์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ:

  • @Controller, @Service, @Repository๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค
  • @Bean ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑํ•˜๋Š”(return) ๊ฐ์ฒด
  • XML ์„ค์ •์—์„œ <bean>์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด

์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ์Šคํ”„๋ฆฐํŠธ ๋ฏธ์…˜์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ Service์™€ Repository ๋“ฑ์ด ๋ชจ๋‘ Bean์œผ๋กœ ๊ด€๋ฆฌ๋  ๊ฒƒ

๐Ÿ’ Bean ๋“ฑ๋ก ๋ฐฉ์‹

1๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋ฐฉ์‹

ํด๋ž˜์Šค ์œ„์— ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ ๋‘๋ฉด, Spring์ด ์ปดํฌ๋„ŒํŠธ ์Šค์บ”(Component Scan)์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ Bean์œผ๋กœ ๋“ฑ๋กํ•จ

๐Ÿ‘ ์žฅ์ 

  • ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ 
  • Spring Boot์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹
  • ์ฝ”๋“œ ์ฝ๊ธฐ๊ฐ€ ์‰ฌ์›€
  • ๊ณ„์ธต ํ‘œํ˜„์ด ๋ช…ํ™• (Service, Repository ๋“ฑ)

๐Ÿ‘Ž ๋‹จ์ 

  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋ž˜์Šค์—๋Š” ์ง์ ‘ ์ ์šฉ ๋ถˆ๊ฐ€
  • Bean ์ƒ์„ฑ ๋กœ์ง์ด ๋ณต์žกํ•˜๋ฉด ํ‘œํ˜„์ด ์–ด๋ ค์›€
  • ์ƒ์„ฑ ์‹œ ์กฐ๊ฑด ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ์—๋Š” ํ•œ๊ณ„

2๏ธโƒฃ @Configuration + @Bean ๋ฐฉ์‹

์„ค์ • ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ง์ ‘ Bean์„ ๋“ฑ๋ก

@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }
}

๐Ÿ‘ ์žฅ์ 

  • Bean ์ƒ์„ฑ ๊ณผ์ •์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ด ๊ฐ€๋Šฅ
  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ์ฒด ๋“ฑ๋ก ๊ฐ€๋Šฅ
  • ์กฐ๊ฑด ์ฒ˜๋ฆฌ / ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํ•ฉ์ด ์‰ฌ์›€
  • ํ…Œ์ŠคํŠธ์šฉ Bean ๊ต์ฒด์—๋„ ์œ ๋ฆฌ

๐Ÿ‘Ž ๋‹จ์ 

  • ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Œ
  • ์„ค์ • ํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žก

3๏ธโƒฃ @Import ์‚ฌ์šฉ

๋‹ค๋ฅธ ์„ค์ • ํด๋ž˜์Šค๋ฅผ ํ˜„์žฌ ์„ค์ •์— ํฌํ•จ์‹œํ‚ด

@Configuration
@Import(AppConfig.class)
public class MainConfig {
}

๐Ÿ‘ ์žฅ์ 

  • ์„ค์ •์„ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ
  • ์ž๋™ ์„ค์ • ๊ตฌ์กฐ์— ํ™œ์šฉ๋จ

๐Ÿ‘Ž ๋‹จ์ 

  • ์˜์กด ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด ์ถ”์ ์ด ์–ด๋ ค์›€

4๏ธโƒฃ XML ๊ธฐ๋ฐ˜ ์„ค์ • (์ „ํ†ต ๋ฐฉ์‹)

XML ํŒŒ์ผ์— Bean์„ ์ •์˜

<bean id="userService" class="com.example.UserService"/>

๐Ÿ‘ ์žฅ์ 

  • ์„ค์ •๊ณผ ์ฝ”๋“œ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ
  • ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์™€ ํ˜ธํ™˜
  • ๋Ÿฐํƒ€์ž„ ์ˆ˜์ •์ด ๊ฐ€๋Šฅ

๐Ÿ‘Ž ๋‹จ์ 

  • ์š”์ฆ˜์€ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
  • ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ถ€์กฑ
  • ์œ ์ง€๋ณด์ˆ˜ ๋ถˆํŽธ

๐Ÿ‘‰ Spring Boot์—์„œ๋Š” ๊ฑฐ์˜ ์“ฐ์ด์ง€ ์•Š๋Š” ๋ฐฉ์‹

5๏ธโƒฃ FactoryBean ์‚ฌ์šฉ

Bean์„ ์ง์ ‘ ๋งŒ๋“ค์ง€ ์•Š๊ณ ,Bean ์ƒ์„ฑ ์ฑ…์ž„์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์œ„์ž„

public class MyFactoryBean implements FactoryBean<MyObject> {
}

๐Ÿ‘ ์žฅ์ 

  • ์ƒ์„ฑ ๋กœ์ง ์บก์Аํ™”
  • ํ”„๋ก์‹œ ๊ฐ์ฒด ์ƒ์„ฑ ๋“ฑ์— ์‚ฌ์šฉ๋จ

๐Ÿ‘Ž ๋‹จ์ 

  • ๊ตฌ์กฐ ์ดํ•ด๊ฐ€ ์–ด๋ ค์›€
  • ๋””๋ฒ„๊น…์ด ๊นŒ๋‹ค๋กœ์›€

6๏ธโƒฃ ์กฐ๊ฑด๋ถ€ ๋“ฑ๋ก (@Conditional, @Profile)

ํ™˜๊ฒฝ์ด๋‚˜ ์„ค์ • ๊ฐ’์— ๋”ฐ๋ผ Bean์„ ์„ ํƒ์ ์œผ๋กœ ๋“ฑ๋ก

@Profile("dev")
@Bean
public DataSource devDataSource() {
    ...
}

๐Ÿ‘ ์žฅ์ 

  • ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ
  • ์šด์˜/๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋ถ„๋ฆฌ ์‰ฌ์›€
  • ์ž๋™ ์„ค์ • ๊ตฌํ˜„์— ํ•„์ˆ˜

๐Ÿ‘Ž ๋‹จ์ 

  • ์กฐ๊ฑด์ด ๋งŽ์•„์ง€๋ฉด ํŒŒ์•…์ด ์–ด๋ ค์›€
profile
์ฒœ๋ฐฉ์ง€์ถ•์–ด๋ฆฌ๋‘ฅ์ ˆ๋น™๊ธ€๋น™๊ธ€๋Œ์•„๊ฐ€๋Š”๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€