Spring๊ณผ SpringBoot

2021. 5. 9. 15:35ยท๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง๊ณผ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” versus๊ฐ€ ์•„๋‹ˆ๋ผ with์ด๋‹ค.

 

Spring๊ณผ SpringBoot

 

1. Spring

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ”์—์„œ ๊ฐ€์žฅ ๋Œ€์ค‘์ ์ธ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

 

1) ํŠน์ง•

๊ฐ€์žฅ ์ค‘์š”ํ•œ ํŠน์ง•์€ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)๊ณผ ์ œ์–ด์˜ ์—ญ์ „(Inversion Of Control)์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๊ณ  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜์—ฌ ํ€„๋ฆฌํ‹ฐ ๋†’์€ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

// 1. DI ์—†๋Š” ์˜ˆ์ œ: ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’๋‹ค.

// MyController๋Š” MyService ํด๋ž˜์Šค์— ์˜์กดํ•œ๋‹ค.
// ๊ทธ๋ž˜์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„  new MyService();๋กœ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์–ด์•ผ ํ•œ๋‹ค.
// ๊ทธ๋Ÿฐ๋ฐ MyController์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด Mock ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ,
// ์–ด๋–ป๊ฒŒ MyController๊ฐ€ Mock ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋ฐฉ๋ฒ•์ด ์—†์„ ๊ฒƒ์ด๋‹ค.

@RestController
public class MyController {
    private MyService service = new MyService();

    @RequestMapping("/welcome")
    public String welcome() {
        return service.retrieveWelcomeMessage();
    }
}

// 2. DI ์žˆ๋Š” ์˜ˆ์ œ: ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๋‹ค.

// ๋‘ ๊ฐœ์˜ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ MyService ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
// 1) @Component : ์Šคํ”„๋ง ํŒฉํ† ๋ฆฌ ํŒจํ„ด(BeanFactory)์˜ ๊ตฌํ˜„์ฒด์—์„œ ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด(bean)๊ฐ€ ์žˆ๋Š”๋ฐ,
// ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Ÿฌํ•œ bean ๊ฐ์ฒด๋กœ ๋‘์–ด ์Šคํ”„๋ง ๊ด€๋ฆฌํ•˜์— ๋‘๊ฒ ๋‹ค๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
// 2) @Autowired : Bean ๊ฐ์ฒด์™€ ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„์„œ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ,
// ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ Bean์œผ๋กœ ๋“ฑ๋กํ•˜์ง€ ์•Š์œผ๋ฉด ์ฃผ์ž…ํ•ด ์ค„ ์ˆ˜ ์—†๋‹ค.
// MyService์— ๋Œ€ํ•œ bean์„ ์ƒ์„ฑํ•˜๊ณ  MyController์— ์žˆ๋Š” service ๋ณ€์ˆ˜์— ์ฃผ์ž…ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

@Component
public class MyService {
    public String retrieveWelcomeMessage(){
       return "Welcome to InnovationM";
    }
}

@RestController
public class MyController {
    @Autowired
    private MyService service;

    @RequestMapping("/welcome")
    public String welcome() {
        return service.retrieveWelcomeMessage();
    }
}

 

2) ๊ธฐ๋Šฅ

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—” ๋‹ค๋ฅธ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๋‹ค. ๊ทธ ๊ธฐ๋Šฅ๋“ค์€ ์•ฝ ์Šค๋ฌด ๊ฐœ์˜ ๋ชจ๋“ˆ๋กœ ๋‚˜๋‰˜์–ด ์žˆ์œผ๋ฉฐ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • Spring JDBC
  • Spring MVC
  • Spring AOP
  • Spring ORM
  • Spring JMS
  • Spring Test
  • Spring Expression Language (SpEL)

 

์—ฌ๊ธฐ์„œ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP, Aspect Oriented Programming)์€ ์Šคํ”„๋ง์—์„œ ์•„์ฃผ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•ต์‹ฌ ํฌ์ธํŠธ๋Š” Class์ด์ง€๋งŒ AOP์—์„œ๋Š” ๊ด€์ (Aspect)์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— security๋‚˜ logging ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ธฐ์กด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋Š” ์†์„ ๋Œ€์ง€ ์•Š๊ณ  AOP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠน์ • ๋ฉ”์†Œ๋“œ๊ฐ€ ๋๋‚  ๋•Œ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ˜ธ์ถœ ์ง์ „, ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฆฌํ„ดํ•œ ์งํ›„ ํ˜น์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ƒํ™ฉ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉํ–ฅ์˜ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
๊ทธ๋ž˜์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ์€ ์Šคํ”„๋ง ๋•๋ถ„์— ์‰ฌ์šด ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

3) ์š”์ฒญ-์‘๋‹ต ๊ณผ์ •

https://data-make.tistory.com/714

 

[HTTP Spring ํ†ต์‹  ํ๋ฆ„ ๊ณผ์ •] HTTP Request ๋ถ€ํ„ฐ HTTP Response ๊นŒ์ง€์˜ ์—ฌ์ •

HTTP Request ๋ถ€ํ„ฐ HTTP Response ๊นŒ์ง€์˜ ์—ฌ์ • ์š”์ฆ˜ ์—ฌํ–‰ ๊ฐ€๋Š” ๊ฒƒ๋„ ํž˜๋“ ๋ฐ.. HTTP ํƒ€๊ณ  ์—ฌํ–‰์ด๋‚˜ ๊ฐ€๋ณด์ž! ๋จผ์ € HTTP ๋Š” ์ธํ„ฐ๋„ท์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ ์„ ์˜๋ฏธํ•œ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €์— URL ์„

data-make.tistory.com

https://gyoogle.dev/blog/web-knowledge/spring-knowledge/Spring%20MVC.html

 

Spring MVC Framework | ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป Tech Interview

Spring MVC Framework ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ url์„ ํ†ตํ•ด ์š”์ฒญํ•  ๋•Œ ์ผ์–ด๋‚˜๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋™์ž‘์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. MVC ์ง„ํ–‰ ๊ณผ์ • ํด๋ผ์ด์–ธํŠธ๊ฐ€ url์„ ์š”์ฒญํ•˜๋ฉด, ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์Šคํ”„

gyoogle.dev

 

2. SpringBoot

์Šคํ”„๋ง์ด ์ดํ† ๋ก ๋งŽ์€ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•  ๊ธฐ๋Šฅ์„ ์ด๋ฏธ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์™œ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ํ•„์š”ํ•ด์กŒ์„๊นŒ?

๊ฐœ๋ฐœ์ž๋“ค์ด ์Šคํ”„๋ง์„ ์ด์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ง๋ฉดํ•œ ๋ฌธ์ œ๋“ค์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.
์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ์œผ๋กœ Spring MVC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…ํ•˜๋Š”๋ฐ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

"์Šคํ”„๋ง์€ ์„ค์ •์ด ๋ฐ˜์ด๋‹ค"๋ผ๋Š” ๋ง์ด ์žˆ์„ ์ •๋„์ด๋‹ค.
(Transaction Manager, Hibernate Datasource, Entity Manager, Session Factory์™€ ๊ฐ™์€ ์„ค์ •)

 

SpringBoot

 

๊ทธ๋ž˜์„œ ์Šคํ”„๋ง์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ™˜๊ฒฝ ์„ค์ •์„ ์ตœ์†Œํ™”ํ•ด์ฃผ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

1) Spring Boot Starter

๊ธฐ์กด์—๋Š” ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฒ„์ „๊นŒ์ง€ ๋ช…์‹œํ•˜๊ณ  ๋ฒ„์ „์— ๋งž๋Š” ์„ค์ •์„ ํ•˜์˜€์ง€๋งŒ, dependency ๊ด€๋ฆฌ๋ฅผ ์Šคํ”„๋ง ๋ถ€ํŠธ์— ์˜ํ•ด์„œ ๊ด€๋ฆฌ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์ฒ˜๋Ÿผ spring-boot-starter-web์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข…์†๋œ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์•Œ๋งž๊ฒŒ ์ฐพ์•„์„œ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ข…์†์„ฑ์ด๋‚˜ ํ˜ธํ™˜ ๋ฒ„์ „์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋‹จ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
</dependency>

 

2) Embed Tomcat

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ๋‚ด์žฅํ˜• ํ†ฐ์บฃ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ํ†ฐ์บฃ์„ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์กŒ์œผ๋ฉฐ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ jar๋กœ ์†์‰ฝ๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

dzone.com/articles/spring-vs-spring-boot

 

Spring vs. Spring Boot: A Comparison of These Java Frameworks - DZone Java

In this post, we compare and contrast the two most popular Java frameworks — Spring and Spring Boot — to demonstrate the types of problems that they solve.

dzone.com

msyu1207.tistory.com/entry/Spring-VS-Spring-Boot-์ฐจ์ด์ ์„-์•Œ์•„๋ณด์ž?category=640981

 

Spring์˜ ํŠน์ง•๊ณผ Spring Boot์™€์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ˜‰ ์œ ์œ ์ž์ ํ•œ ๊ฐœ๋ฐœ์ž ์œ ๋กœ๋  ์ž…๋‹ˆ๋‹ค ๐Ÿ˜€ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” โœ… ์Šคํ”„๋ง(Spring) ์ด๋ž€? โœ… ์Šคํ”„๋ง(Spring)์˜ ํŠน์ง• โœ… Spring๊ณผ SpringBoot์˜ ์ฐจ์ด์  ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ๐ŸŽ‰ ์Šคํ”„๋ง(Spring)๊ณผ

msyu1207.tistory.com

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Maven(๋ฉ”์ด๋ธ)
  • JSP์™€ Servlet
  • [JAVA] ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
  • [JAVA] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
Spring๊ณผ SpringBoot
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”