์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐ŸŒŸ Spring Boot ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์œผ๋กœ ๋„ˆ๋งŒ์˜ ๊ฐœ์„ฑ ํ‘œํ˜„ํ•˜๊ธฐ ๐ŸŒŸ

๐ŸŒŸ Spring Boot ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์œผ๋กœ ๋„ˆ๋งŒ์˜ ๊ฐœ์„ฑ ํ‘œํ˜„ํ•˜๊ธฐ ๐ŸŒŸ

. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / :: Spring Boot :: ์ปค์Šคํ…€ ๋ฐฐ๋„ˆ์˜ ์„ธ๊ณ„๋กœ!

์•ˆ๋…•? ์˜ค๋Š˜์€ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ทธ ๊ท€์—ฌ์šด ๋ฐฐ๋„ˆ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณผ๊นŒ ํ•ด! ๐ŸŒฑ Spring Boot ๋ฐฐ๋„ˆ๋Š” ๋‹จ์ˆœํ•œ ์žฅ์‹์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž์˜ ๊ฐœ์„ฑ์„ ํ‘œํ˜„ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ์˜ ์ •์ฒด์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์•ผ. ์ด ๊ธ€์—์„œ๋Š” Spring Boot ๋ฐฐ๋„ˆ๋ฅผ ์–ด๋–ป๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์นœ๊ตฌ์ฒ˜๋Ÿผ ํŽธํ•˜๊ฒŒ ์•Œ๋ ค์ค„๊ฒŒ!

ํ˜น์‹œ ์žฌ๋Šฅ๋„ท์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ ์žฌ๋Šฅ์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด, ์ด ๊ธ€์„ ํ†ตํ•ด ๋ฐฐ์šด Spring Boot ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ธฐ์ˆ ๋กœ ๋„ˆ๋งŒ์˜ ๊ฐœ์„ฑ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฑด ์–ด๋•Œ? ๐Ÿš€

๐Ÿ“‹ ๋ชฉ์ฐจ

  1. Spring Boot ๋ฐฐ๋„ˆ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  2. ๊ธฐ๋ณธ ๋ฐฐ๋„ˆ ์ดํ•ดํ•˜๊ธฐ
  3. ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋ฐฉ๋ฒ•
  4. ํ…์ŠคํŠธ ๋ฐฐ๋„ˆ ๋งŒ๋“ค๊ธฐ
  5. ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ ํ™œ์šฉํ•˜๊ธฐ
  6. ๋™์  ๋ฐฐ๋„ˆ ๊ตฌํ˜„ํ•˜๊ธฐ
  7. ๋ฐฐ๋„ˆ ๋น„ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•
  8. ์‹ค์ „ ํ™œ์šฉ ์‚ฌ๋ก€
  9. ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํŒ๊ณผ ํŠธ๋ฆญ
  10. ๋งˆ๋ฌด๋ฆฌ ๋ฐ ์š”์•ฝ

1. ๐ŸŒฑ Spring Boot ๋ฐฐ๋„ˆ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด ์ฝ˜์†”์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ทธ ๋ฉ‹์ง„ ASCII ์•„ํŠธ๋ฅผ ๋ณธ ์  ์žˆ์ง€? ๊ทธ๊ฒŒ ๋ฐ”๋กœ Spring Boot ๋ฐฐ๋„ˆ์•ผ! ์ด ๋ฐฐ๋„ˆ๋Š” ๋‹จ์ˆœํžˆ ์˜ˆ์œ ๊ฒƒ๋งŒ์ด ์•„๋‹ˆ๋ผ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฒ„์ „, ํ™˜๊ฒฝ ์ •๋ณด, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์ž์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ๊ณต๊ฐ„์ด๊ธฐ๋„ ํ•ด. ๐Ÿ˜Š

๋ฐฐ๋„ˆ๋Š” Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋ณด์ด๋Š” ์š”์†Œ๋กœ, ํ”„๋กœ์ ํŠธ์˜ ์ฒซ์ธ์ƒ์„ ๊ฒฐ์ •์ง“๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ด. ๋งˆ์น˜ ๋„ˆ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ "์•ˆ๋…•, ๋‚˜ ์—ฌ๊ธฐ ์žˆ์–ด์š”!"๋ผ๊ณ  ์ธ์‚ฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ง€!

๐Ÿ” ์•Œ๊ณ  ๊ณ„์…จ๋‚˜์š”? Spring Boot ๋ฐฐ๋„ˆ๋Š” ๋‹จ์ˆœํ•œ ์žฅ์‹์ด ์•„๋‹ˆ๋ผ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ด๊ธฐ๋„ ํ•ด์š”. ํŠนํžˆ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ต๋‹ˆ๋‹ค!

2. ๐Ÿ” ๊ธฐ๋ณธ ๋ฐฐ๋„ˆ ์ดํ•ดํ•˜๊ธฐ

Spring Boot์˜ ๊ธฐ๋ณธ ๋ฐฐ๋„ˆ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ํ•œ๋ฒˆ ๋ณผ๊นŒ? ์•„๋ž˜์ฒ˜๋Ÿผ ์ƒ๊ธด ๊ท€์—ฌ์šด ASCII ์•„ํŠธ์•ผ! ๐ŸŽจ

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.0)
    

์ด ๋ฐฐ๋„ˆ๋Š” SpringApplication ํด๋ž˜์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ถœ๋ ฅ๋ผ. ๊ธฐ๋ณธ์ ์œผ๋กœ banner.txt ํŒŒ์ผ์„ src/main/resources ๊ฒฝ๋กœ์—์„œ ์ฐพ์•„์„œ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด์•ผ. ๋งŒ์•ฝ ์ด ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด, Spring Boot๋Š” ๊ธฐ๋ณธ ๋ฐฐ๋„ˆ๋ฅผ ๋ณด์—ฌ์ฃผ์ง€.

๊ธฐ๋ณธ ๋ฐฐ๋„ˆ์—๋Š” Spring Boot ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ, ์–ด๋–ค ๋ฒ„์ „์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด. ์ด๊ฑด ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•  ๋•Œ ์ •๋ง ์œ ์šฉํ•˜์ง€! ๐Ÿ”ข

๐Ÿ’ก ํŒ: ๊ธฐ๋ณธ ๋ฐฐ๋„ˆ์˜ ๋ชจ์–‘์ด ์ฝ˜์†” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์–ด. ํŠนํžˆ ์œˆ๋„์šฐ CMD์™€ ํŒŒ์›Œ์…ธ, ๋ฆฌ๋ˆ…์Šค ํ„ฐ๋ฏธ๋„ ๋“ฑ์—์„œ ํฐํŠธ๋‚˜ ์ƒ‰์ƒ ์ง€์›์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด์•ผ!

3. ๐ŸŽจ ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋ฐฉ๋ฒ•

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฐฐ๋„ˆ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ๊นŒ? Spring Boot์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฐ๋„ˆ๋ฅผ ๋งž์ถค ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿ˜Ž

3.1 ๋ฐฐ๋„ˆ ํŒŒ์ผ ์œ„์น˜

๋ฐฐ๋„ˆ ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ ์œ„์น˜์— ๋‘˜ ์ˆ˜ ์žˆ์–ด:

  1. src/main/resources/banner.txt - ๊ธฐ๋ณธ ์œ„์น˜
  2. src/main/resources/banner.gif - GIF ์ด๋ฏธ์ง€
  3. src/main/resources/banner.jpg - JPG ์ด๋ฏธ์ง€
  4. src/main/resources/banner.png - PNG ์ด๋ฏธ์ง€

3.2 ์†์„ฑ์„ ํ†ตํ•œ ์„ค์ •

application.properties ๋˜๋Š” application.yml ํŒŒ์ผ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด:

# application.properties
spring.banner.location=classpath:my-banner.txt
spring.banner.image.location=classpath:my-banner.png
spring.banner.charset=UTF-8
    

๋˜๋Š” YAML ํ˜•์‹์œผ๋กœ:

# application.yml
spring:
  banner:
    location: classpath:my-banner.txt
    image:
      location: classpath:my-banner.png
    charset: UTF-8
    

3.3 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •

Java ์ฝ”๋“œ์—์„œ ์ง์ ‘ ๋ฐฐ๋„ˆ๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์–ด:


import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.setBannerMode(Banner.Mode.CONSOLE);  // CONSOLE, LOG, OFF ์ค‘ ์„ ํƒ
        app.run(args);
    }
}

๐ŸŒŸ ์ฐธ๊ณ : ์žฌ๋Šฅ๋„ท์—์„œ Spring Boot ๊ฐœ๋ฐœ์ž๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด, ์ด๋Ÿฐ ์„ธ์„ธํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋Šฅ๋ ฅ์„ ๊ฐ€์ง„ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ํ’ˆ์งˆ์„ ํ•œ์ธต ๋†’์—ฌ์ค„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ!

4. โœ๏ธ ํ…์ŠคํŠธ ๋ฐฐ๋„ˆ ๋งŒ๋“ค๊ธฐ

๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ํ…์ŠคํŠธ ๋ฐฐ๋„ˆ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑฐ์•ผ. banner.txt ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ๋„ˆ๋งŒ์˜ ์ฐฝ์˜์ ์ธ ASCII ์•„ํŠธ๋ฅผ ํ‘œํ˜„ํ•ด๋ณด์ž! ๐ŸŽญ

4.1 ์ง์ ‘ ASCII ์•„ํŠธ ๋งŒ๋“ค๊ธฐ

๊ฐ„๋‹จํ•œ ํ…์ŠคํŠธ ๋ฐฐ๋„ˆ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณผ๊นŒ?

 _____            _             ____              _   
|_   _|          | |           |  _ \            | |  
  | |  ___   ___ | |__   ___   | |_) | ___   ___ | |_ 
  | | / _ \ / _ \| '_ \ / _ \  |  _ < / _ \ / _ \| __|
  | || (_) | (_) | | | | (_) | | |_) | (_) | (_) | |_ 
  |_| \___/ \___/|_| |_|\___/  |____/ \___/ \___/ \__|
                                                      
:: ๋‚˜์˜ ๋ฉ‹์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ::                (v1.0.0)
    

์ด๋Ÿฐ ์‹์œผ๋กœ ์ง์ ‘ ASCII ์•„ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์†”์งํžˆ ๋งํ•˜๋ฉด ์ข€ ๊ท€์ฐฎ์„ ์ˆ˜ ์žˆ์–ด. ๊ทธ๋ž˜์„œ ์˜จ๋ผ์ธ ASCII ์•„ํŠธ ์ƒ์„ฑ๊ธฐ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒŒ ํ›จ์”ฌ ํŽธ๋ฆฌํ•ด! ๐Ÿ‘

4.2 ์˜จ๋ผ์ธ ASCII ์•„ํŠธ ์ƒ์„ฑ๊ธฐ ํ™œ์šฉํ•˜๊ธฐ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜จ๋ผ์ธ ๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋ฉ‹์ง„ ASCII ์•„ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด:

  1. FIGlet - http://www.figlet.org/
  2. Text to ASCII Art Generator - http://patorjk.com/software/taag/
  3. ASCII Art Generator - https://asciiart.club/

4.3 ๋ฐฐ๋„ˆ์— ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ

๋ฐฐ๋„ˆ ํ…์ŠคํŠธ์— ๋™์ ์ธ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด, Spring Boot์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋ ˆ์ด์Šคํ™€๋” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด:

${application.title} v${application.version}
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘: ${application.formatted-version}
์ž๋ฐ” ๋ฒ„์ „: ${java.version}
์Šคํ”„๋ง ๋ถ€ํŠธ ๋ฒ„์ „: ${spring-boot.version}
    

์ด๋Ÿฐ ๋ณ€์ˆ˜๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์ œ ์ •๋ณด๋กœ ๋Œ€์ฒด๋˜์–ด ์ถœ๋ ฅ๋ผ. ์ •๋ง ์œ ์šฉํ•˜์ง€? ๐Ÿ”„

โš ๏ธ ์ฃผ์˜: ASCII ์•„ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ์ฝ˜์†” ํญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ด. ๋„ˆ๋ฌด ๋„“์€ ์•„ํŠธ๋Š” ์ฝ˜์†”์—์„œ ์ค„๋ฐ”๊ฟˆ์ด ๋ฐœ์ƒํ•ด ์›๋ž˜ ๋ชจ์–‘์ด ๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด!

ASCII ์•„ํŠธ ๋ฐฐ๋„ˆ ๋งŒ๋“ค๊ธฐ ๊ณผ์ • 1. ์•„์ด๋””์–ด ๊ตฌ์ƒ ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์— ๋งž๋Š” ๋ฐฐ๋„ˆ ์ปจ์…‰ ์ƒ๊ฐํ•˜๊ธฐ 2. ๋„๊ตฌ ์„ ํƒ ์˜จ๋ผ์ธ ASCII ์ƒ์„ฑ๊ธฐ ๋˜๋Š” ์ง์ ‘ ์ œ์ž‘ 3. ์ ์šฉ ๋ฐ ํ…Œ์ŠคํŠธ banner.txt์— ์ €์žฅํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

5. ๐Ÿ–ผ๏ธ ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ ํ™œ์šฉํ•˜๊ธฐ

ํ…์ŠคํŠธ ๋ฐฐ๋„ˆ๋„ ์ข‹์ง€๋งŒ, ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐ๋„ˆ๋Š” ๋” ํ™”๋ คํ•˜๊ณ  ๋ˆˆ์— ๋„๋Š” ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์–ด! Spring Boot๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ASCII ์•„ํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด. ๐ŸŒˆ

5.1 ์ง€์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ํ˜•์‹

Spring Boot๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฏธ์ง€ ํ˜•์‹์„ ์ง€์›ํ•ด:

  1. PNG (banner.png)
  2. JPG (banner.jpg)
  3. GIF (banner.gif)

5.2 ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ ์„ค์ •ํ•˜๊ธฐ

์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ด๋‹น ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ src/main/resources ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜์‹œํ‚ค๋ฉด ๋ผ. Spring Boot๋Š” ์ž๋™์œผ๋กœ ์ด ์ด๋ฏธ์ง€๋ฅผ ASCII ์•„ํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ณด์—ฌ์ค„ ๊ฑฐ์•ผ.

์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ์˜ ๋ณ€ํ™˜ ๋ฐฉ์‹์„ ์กฐ์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, application.properties ํŒŒ์ผ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด:

# ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ ์„ค์ •
spring.banner.image.location=classpath:my-banner.png
spring.banner.image.width=100  # ๋„ˆ๋น„ (๋ฌธ์ž ๋‹จ์œ„)
spring.banner.image.height=30  # ๋†’์ด (๋ฌธ์ž ๋‹จ์œ„)
spring.banner.image.margin=1   # ์—ฌ๋ฐฑ
spring.banner.image.invert=true  # ์ƒ‰์ƒ ๋ฐ˜์ „ ์—ฌ๋ถ€
    

5.3 ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ ํŒ

์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์€ ์ด๋ฏธ์ง€๊ฐ€ ASCII ์•„ํŠธ๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์ด๋ฏธ์ง€๋Š” ๋ณ€ํ™˜ ํ›„ ์•Œ์•„๋ณด๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์•ผ. ๊ฐ„๋‹จํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ด๋ฏธ์ง€๋‚˜ ๋กœ๊ณ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„! ๐Ÿ–ผ๏ธ

๐Ÿ’ก ํŒ: ํ‘๋ฐฑ ์ด๋ฏธ์ง€๋‚˜ ์‹ค๋ฃจ์—ฃ ํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€๊ฐ€ ASCII ์•„ํŠธ๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์ž˜ ๋ณด์—ฌ! ๋ณต์žกํ•œ ์ƒ‰์ƒ์ด๋‚˜ ๊ทธ๋ผ๋ฐ์ด์…˜์€ ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ ๋งŽ์€ ์ •๋ณด๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์–ด.

6. ๐Ÿ”„ ๋™์  ๋ฐฐ๋„ˆ ๊ตฌํ˜„ํ•˜๊ธฐ

์ •์ ์ธ ๋ฐฐ๋„ˆ๋„ ์ข‹์ง€๋งŒ, ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‚˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๋ฐฐ๋„ˆ๋ฅผ ๋งŒ๋“ค๋ฉด ๋” ๋ฉ‹์ง€์ง€ ์•Š์„๊นŒ? Spring Boot์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ๋„ˆ๋ฅผ ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿง™โ€โ™‚๏ธ

6.1 Banner ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ํ•˜๊ธฐ

Spring Boot์˜ Banner ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์™„์ „ํžˆ ์ปค์Šคํ…€๋œ ๋ฐฐ๋„ˆ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด:


import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;

import java.io.PrintStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MyCustomBanner implements Banner {
    
    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
        out.println("----------------------------------------");
        out.println("  ๋‚˜์˜ ๋ฉ‹์ง„ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜");
        out.println("  ์‹คํ–‰ ์‹œ๊ฐ„: " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        out.println("  ํ”„๋กœํ•„: " + String.join(", ", environment.getActiveProfiles()));
        out.println("  ์ž๋ฐ” ๋ฒ„์ „: " + System.getProperty("java.version"));
        out.println("----------------------------------------");
    }
}

๊ทธ๋ฆฌ๊ณ  ์ด ์ปค์Šคํ…€ ๋ฐฐ๋„ˆ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•˜๋ ค๋ฉด:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.setBanner(new MyCustomBanner());
        app.run(args);
    }
}

6.2 ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ๋ฐฐ๋„ˆ ๋ณ€๊ฒฝ

๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ์šด์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฐ๋„ˆ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด:


public class EnvironmentAwareBanner implements Banner {
    
    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
        String[] activeProfiles = environment.getActiveProfiles();
        
        if (contains(activeProfiles, "dev")) {
            out.println("๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค!");
            // ๊ฐœ๋ฐœ์šฉ ๋ฐฐ๋„ˆ ์ถœ๋ ฅ
        } else if (contains(activeProfiles, "test")) {
            out.println("ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค!");
            // ํ…Œ์ŠคํŠธ์šฉ ๋ฐฐ๋„ˆ ์ถœ๋ ฅ
        } else if (contains(activeProfiles, "prod")) {
            out.println("โš ๏ธ ์ฃผ์˜: ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค! โš ๏ธ");
            // ์šด์˜์šฉ ๋ฐฐ๋„ˆ ์ถœ๋ ฅ
        } else {
            out.println("์•Œ ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.");
            // ๊ธฐ๋ณธ ๋ฐฐ๋„ˆ ์ถœ๋ ฅ
        }
    }
    
    private boolean contains(String[] profiles, String profile) {
        for (String p : profiles) {
            if (p.equals(profile)) {
                return true;
            }
        }
        return false;
    }
}

๐Ÿ”ฅ ํ™œ์šฉ ์•„์ด๋””์–ด: ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋œ ๋ฐฐ๋„ˆ๋ฅผ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ๋„์›€๋ง์ด๋‚˜ ํŒ์ด ํฌํ•จ๋œ ๋ฐฐ๋„ˆ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉด ์‹ค์ˆ˜๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด!

7. ๐Ÿšซ ๋ฐฐ๋„ˆ ๋น„ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•

๋•Œ๋กœ๋Š” ๋ฐฐ๋„ˆ๊ฐ€ ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€. ํŠนํžˆ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด๋‚˜ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐฐ๋„ˆ๊ฐ€ ๋กœ๊ทธ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด. ์ด๋Ÿด ๋•Œ๋Š” ๋ฐฐ๋„ˆ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‘๋ฉด ์ข‹์•„! ๐Ÿ”‡

7.1 ์†์„ฑ์„ ํ†ตํ•œ ๋น„ํ™œ์„ฑํ™”

application.properties ํŒŒ์ผ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด:

# ๋ฐฐ๋„ˆ ๋น„ํ™œ์„ฑํ™”
spring.main.banner-mode=off
    

๋˜๋Š” YAML ํ˜•์‹์œผ๋กœ:

spring:
  main:
    banner-mode: "off"
    

7.2 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋น„ํ™œ์„ฑํ™”

Java ์ฝ”๋“œ์—์„œ ์ง์ ‘ ๋ฐฐ๋„ˆ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜๋„ ์žˆ์–ด:


import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.setBannerMode(Banner.Mode.OFF);
        app.run(args);
    }
}

7.3 ๋ฐฐ๋„ˆ ๋ชจ๋“œ ์˜ต์…˜

Spring Boot๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฐ๋„ˆ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•ด:

  1. Banner.Mode.CONSOLE - ์ฝ˜์†”์— ๋ฐฐ๋„ˆ ์ถœ๋ ฅ (๊ธฐ๋ณธ๊ฐ’)
  2. Banner.Mode.LOG - ๋กœ๊ทธ์—๋งŒ ๋ฐฐ๋„ˆ ์ถœ๋ ฅ
  3. Banner.Mode.OFF - ๋ฐฐ๋„ˆ ์ถœ๋ ฅ ์•ˆ ํ•จ

๐Ÿ“ ์ฐธ๊ณ : LOG ๋ชจ๋“œ๋Š” ์ฝ˜์†”์—๋Š” ๋ฐฐ๋„ˆ๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ๋กœ๊ทธ ํŒŒ์ผ์—๋งŒ ๊ธฐ๋กํ•ด. ์ด ๋ฐฉ์‹์€ ๋กœ๊ทธ ํŒŒ์ผ์„ ํ†ตํ•ด ์–ด๋–ค ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ธ์ œ ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€ ์ถ”์ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ด!

8. ๐Ÿš€ ์‹ค์ „ ํ™œ์šฉ ์‚ฌ๋ก€

์ด๋ก ์€ ์ถฉ๋ถ„ํžˆ ์•Œ์•„๋ดค์œผ๋‹ˆ, ์ด์ œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐฐ๋„ˆ๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ช‡ ๊ฐ€์ง€ ์žฌ๋ฏธ์žˆ๋Š” ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณผ๊นŒ? ๐ŸŽฏ

8.1 ํ”„๋กœ์ ํŠธ ์ •๋ณด ํ‘œ์‹œ

๋ฐฐ๋„ˆ์— ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œ์ผœ ๊ฐœ๋ฐœ์ž๋“ค์ด ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ์ค‘์ธ์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์ž:

 _____                 _                   _____  _____  _____ 
|_   _|               | |                 / __  \|  _  ||  ___|
  | | ___   ___  ___  | |__    ___   ___ `' / /'| |/' ||___ \ 
  | |/ _ \ / _ \/ __| | '_ \  / _ \ / _ \  / /  |  /| |    \ \
  | | (_) | (_) \__ \ | | | || (_) | (_) |./ /___\ |_/ //\__/ /
  \_/\___/ \___/|___/ |_| |_| \___/ \___/ \_____/ \___/ \____/ 
                                                               
ํ”„๋กœ์ ํŠธ: ${application.title} 
๋ฒ„์ „: ${application.version}
๋นŒ๋“œ ์‹œ๊ฐ„: ${application.formatted-version}
์Šคํ”„๋ง ๋ถ€ํŠธ: ${spring-boot.version}
ํ”„๋กœํ•„: ${spring.profiles.active}
    

8.2 ํŒ€ ๋ธŒ๋žœ๋”ฉ

ํšŒ์‚ฌ๋‚˜ ํŒ€์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ๋ฐฐ๋„ˆ์— ๋ฐ˜์˜ํ•ด๋ณด์ž:

  ______                           _____ _             _ _       
 |  ____|                         / ____| |           | (_)      
 | |__   __ _ __ _ _   _ _ __   | (___ | |_ _   _  __| |_  ___  
 |  __| / _` / _` | | | | '_ \   \___ \| __| | | |/ _` | |/ _ \ 
 | |___| (_| \__, | |_| | | | |  ____) | |_| |_| | (_| | | (_) |
 |______\__,_|___/ \__, |_| |_| |_____/ \__|\__,_|\__,_|_|\___/ 
                    __/ |                                        
                   |___/                                         

:: ์ด๊ธ€ ์ŠคํŠœ๋””์˜ค์˜ ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ ::
๊ฐœ๋ฐœํŒ€ ์—ฐ๋ฝ์ฒ˜: dev@eaglestudio.com
๊ธฐ์ˆ  ์ง€์›: support@eaglestudio.com
    

8.3 ์œ ๋จธ์™€ ์žฌ๋ฏธ ์ถ”๊ฐ€ํ•˜๊ธฐ

๋•Œ๋กœ๋Š” ์žฌ๋ฏธ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋‚˜ ASCII ์•„ํŠธ๋กœ ํŒ€์˜ ์‚ฌ๊ธฐ๋ฅผ ๋†’์ผ ์ˆ˜๋„ ์žˆ์–ด:

       _..._
     .'     '.      _
    /    .-""-\   _/ \
   /_   /      \,'   |
   /  `-'       |     \
   |            \     /
   |             `._,'
    \              /
     `._        _,'
        `""""""'

์ปคํ”ผ ํ•œ ์ž”๊ณผ ํ•จ๊ป˜ ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?
์˜ค๋Š˜์˜ ๋ช…์–ธ: "์ฝ”๋“œ๋Š” ๊ฑฐ์ง“๋ง์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฃผ์„์€ ๊ฐ€๋”..."
    

8.4 ํ™˜๊ฒฝ๋ณ„ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€

์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จ์‹œ์ผœ ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด:

 _    _                _             _
| |  | |              (_)           | |
| |  | | __ _ _ __ ___ _ _ __   __ _| |
| |/\| |/ _` | '__/ __| | '_ \ / _` | |
\  /\  / (_| | | | (__| | | | | (_| |_|
 \/  \/ \__,_|_|  \___|_|_| |_|\__, (_)
                                __/ |
                               |___/
 
โš ๏ธ ์ฃผ์˜: ํ˜„์žฌ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค! โš ๏ธ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: PRODUCTION
๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์‹ค์ œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
    

๐ŸŽจ ์ฐฝ์˜์  ํ™œ์šฉ: ์žฌ๋Šฅ๋„ท์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์˜๋ขฐํ•  ๋•Œ, ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋Šฅ๋ ฅ์ด ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์ฐพ์œผ๋ฉด ํ”„๋กœ์ ํŠธ์— ํŠน๋ณ„ํ•œ ๊ฐœ์„ฑ์„ ๋ถˆ์–ด๋„ฃ์„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ!

9. ๐Ÿ’ก ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํŒ๊ณผ ํŠธ๋ฆญ

๋ฐฐ๋„ˆ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฟ€ํŒ์„ ์•Œ๋ ค์ค„๊ฒŒ! ๐Ÿฏ

9.1 ์ƒ‰์ƒ ์ถ”๊ฐ€ํ•˜๊ธฐ

ANSI ์ƒ‰์ƒ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ๋„ˆ์— ์ƒ‰์ƒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด:

${AnsiColor.BRIGHT_GREEN}Welcome to Spring Boot!${AnsiColor.DEFAULT}
${AnsiColor.RED}This is a warning message${AnsiColor.DEFAULT}
    

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ANSI ์ƒ‰์ƒ ์ฝ”๋“œ:

  1. ${AnsiColor.BLACK}
  2. ${AnsiColor.RED}
  3. ${AnsiColor.GREEN}
  4. ${AnsiColor.YELLOW}
  5. ${AnsiColor.BLUE}
  6. ${AnsiColor.MAGENTA}
  7. ${AnsiColor.CYAN}
  8. ${AnsiColor.WHITE}
  9. ${AnsiColor.BRIGHT_BLACK}
  10. ${AnsiColor.BRIGHT_RED}
  11. ${AnsiColor.BRIGHT_GREEN}
  12. ${AnsiColor.BRIGHT_YELLOW}
  13. ${AnsiColor.BRIGHT_BLUE}
  14. ${AnsiColor.BRIGHT_MAGENTA}
  15. ${AnsiColor.BRIGHT_CYAN}
  16. ${AnsiColor.BRIGHT_WHITE}
  17. ${AnsiColor.DEFAULT}

9.2 ํ…์ŠคํŠธ ์Šคํƒ€์ผ ๋ณ€๊ฒฝํ•˜๊ธฐ

ANSI ์Šคํƒ€์ผ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…์ŠคํŠธ ์Šคํƒ€์ผ๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด:

${AnsiStyle.BOLD}๊ตต์€ ํ…์ŠคํŠธ${AnsiStyle.NORMAL}
${AnsiStyle.ITALIC}๊ธฐ์šธ์ž„๊ผด ํ…์ŠคํŠธ${AnsiStyle.NORMAL}
${AnsiStyle.UNDERLINE}๋ฐ‘์ค„ ํ…์ŠคํŠธ${AnsiStyle.NORMAL}
    

9.3 ์—ฌ๋Ÿฌ ๋ฐฐ๋„ˆ ํŒŒ์ผ ์ค€๋น„ํ•˜๊ธฐ

๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋งž๋Š” ์—ฌ๋Ÿฌ ๋ฐฐ๋„ˆ ํŒŒ์ผ์„ ์ค€๋น„ํ•ด๋‘๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด:


// ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์šฉ ๋ฐฐ๋„ˆ ์„ค์ •
@Profile("dev")
@Configuration
public class DevBannerConfig {
    @Bean
    public Banner banner() {
        ResourceBanner banner = new ResourceBanner(new ClassPathResource("banners/dev-banner.txt"));
        return banner;
    }
}

// ์šด์˜ ํ™˜๊ฒฝ์šฉ ๋ฐฐ๋„ˆ ์„ค์ •
@Profile("prod")
@Configuration
public class ProdBannerConfig {
    @Bean
    public Banner banner() {
        ResourceBanner banner = new ResourceBanner(new ClassPathResource("banners/prod-banner.txt"));
        return banner;
    }
}

9.4 ๋ฐฐ๋„ˆ ์ƒ์„ฑ ์ž๋™ํ™”ํ•˜๊ธฐ

Maven์ด๋‚˜ Gradle ๋นŒ๋“œ ๊ณผ์ •์—์„œ ๋ฐฐ๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์–ด:


// build.gradle
task generateBanner {
    doLast {
        def bannerFile = file('src/main/resources/banner.txt')
        bannerFile.text = """
${AnsiColor.GREEN}Application: ${project.name}
Version: ${project.version}
Spring Boot Version: \${spring-boot.version}
Build time: ${new Date()}
${AnsiColor.DEFAULT}
"""
    }
}

processResources.dependsOn generateBanner

๐Ÿ”ง ๊ณ ๊ธ‰ ํŒ: ๋ฐฐ๋„ˆ ํŒŒ์ผ์„ ์™ธ๋ถ€ ๊ฒฝ๋กœ์— ๋‘๊ณ  spring.banner.location ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐฐ๋„ˆ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด!

๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํŒ ์š”์•ฝ ๐ŸŽจ ์ƒ‰์ƒ ์ถ”๊ฐ€ํ•˜๊ธฐ AnsiColor ๋ณ€์ˆ˜๋กœ ์ƒ‰์ƒ ์ ์šฉ ๐Ÿ“ ํ…์ŠคํŠธ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ๊ตต๊ฒŒ, ๊ธฐ์šธ์ž„, ๋ฐ‘์ค„ ๋“ฑ ์ ์šฉ ๐Ÿ”„ ๋™์  ์ •๋ณด ํ‘œ์‹œ ๋ณ€์ˆ˜๋กœ ์‹ค์‹œ๊ฐ„ ์ •๋ณด ํฌํ•จ ๐Ÿ“ ์—ฌ๋Ÿฌ ๋ฐฐ๋„ˆ ์ค€๋น„ ํ™˜๊ฒฝ๋ณ„ ๋‹ค๋ฅธ ๋ฐฐ๋„ˆ ์‚ฌ์šฉ โš™๏ธ ์ž๋™ํ™” ์„ค์ • ๋นŒ๋“œ ๊ณผ์ •์—์„œ ๋ฐฐ๋„ˆ ์ƒ์„ฑ ๐Ÿ” ์™ธ๋ถ€ ๊ฒฝ๋กœ ํ™œ์šฉ ์žฌ๋นŒ๋“œ ์—†์ด ๋ฐฐ๋„ˆ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

10. ๐Ÿ“ ๋งˆ๋ฌด๋ฆฌ ๋ฐ ์š”์•ฝ

์—ฌ๊ธฐ๊นŒ์ง€ Spring Boot ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด! ์ด์ œ ๋„ˆ๋งŒ์˜ ์ฐฝ์˜์ ์ธ ๋ฐฐ๋„ˆ๋ฅผ ๋งŒ๋“ค ์ค€๋น„๊ฐ€ ๋์ง€? ๐Ÿ˜Š

10.1 ๋ฐฐ์šด ๋‚ด์šฉ ์ •๋ฆฌ

  1. Spring Boot ๋ฐฐ๋„ˆ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์ค‘์š”์„ฑ
  2. ํ…์ŠคํŠธ ๋ฐฐ๋„ˆ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๊ณผ ์˜จ๋ผ์ธ ๋„๊ตฌ ํ™œ์šฉ๋ฒ•
  3. ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ ์„ค์ • ๋ฐฉ๋ฒ•๊ณผ ์ตœ์ ํ™” ํŒ
  4. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋™์  ๋ฐฐ๋„ˆ ๊ตฌํ˜„ํ•˜๊ธฐ
  5. ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ๋ฐฐ๋„ˆ ๋ณ€๊ฒฝ ๋ฐ ๋น„ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•
  6. ์ƒ‰์ƒ๊ณผ ์Šคํƒ€์ผ์„ ํ™œ์šฉํ•œ ๋ฐฐ๋„ˆ ๊พธ๋ฏธ๊ธฐ
  7. ์‹ค์ „ ํ™œ์šฉ ์‚ฌ๋ก€์™€ ์ฐฝ์˜์ ์ธ ์•„์ด๋””์–ด

10.2 ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์˜ ์ด์ 

๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์€ ๋‹จ์ˆœํ•œ ๊พธ๋ฏธ๊ธฐ ์ด์ƒ์˜ ๊ฐ€์น˜๊ฐ€ ์žˆ์–ด:

  1. ํ”„๋กœ์ ํŠธ ์‹๋ณ„์„ฑ ํ–ฅ์ƒ - ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰ ์ค‘์ธ์ง€ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„
  2. ์ค‘์š” ์ •๋ณด ์ „๋‹ฌ - ๋ฒ„์ „, ํ™˜๊ฒฝ, ๋นŒ๋“œ ์ •๋ณด ๋“ฑ์„ ํ•œ๋ˆˆ์— ํ™•์ธ
  3. ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๊ฐœ์„  - ์žฌ๋ฏธ์žˆ๊ณ  ์ฐฝ์˜์ ์ธ ์š”์†Œ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ํ–ฅ์ƒ
  4. ์‹ค์ˆ˜ ๋ฐฉ์ง€ - ์šด์˜ ํ™˜๊ฒฝ์—์„œ ํŠน๋ณ„ํ•œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋กœ ์ฃผ์˜ ํ™˜๊ธฐ
  5. ํŒ€ ๋ฌธํ™” ํ˜•์„ฑ - ํŒ€์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ๋‚˜ ์œ ๋จธ๋ฅผ ๋ฐ˜์˜ํ•œ ๋ฐฐ๋„ˆ๋กœ ์†Œ์†๊ฐ ๊ฐ•ํ™”

10.3 ๋‹ค์Œ ๋‹จ๊ณ„

์ด์ œ ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ๋Œ€ํ•ด ์•Œ์•˜์œผ๋‹ˆ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„์ „์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด:

  1. ๋„ˆ๋งŒ์˜ ์ฐฝ์˜์ ์ธ ๋ฐฐ๋„ˆ ๋งŒ๋“ค์–ด๋ณด๊ธฐ
  2. ํ™˜๊ฒฝ๋ณ„๋กœ ๋‹ค๋ฅธ ๋ฐฐ๋„ˆ ์„ค์ •ํ•ด๋ณด๊ธฐ
  3. ๋ฐฐ๋„ˆ์— ์œ ์šฉํ•œ ๊ฐœ๋ฐœ ์ •๋ณด๋‚˜ ํŒ ํฌํ•จ์‹œํ‚ค๊ธฐ
  4. ํŒ€ ํ”„๋กœ์ ํŠธ์— ํ†ต์ผ๋œ ๋ฐฐ๋„ˆ ์Šคํƒ€์ผ ์ ์šฉํ•ด๋ณด๊ธฐ
  5. ๋ฐฐ๋„ˆ ์ƒ์„ฑ์„ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•ด๋ณด๊ธฐ

๐ŸŒŸ ๋งˆ๋ฌด๋ฆฌ ๋ฉ”์‹œ์ง€: Spring Boot ๋ฐฐ๋„ˆ๋Š” ์ž‘์€ ๋””ํ…Œ์ผ์ด์ง€๋งŒ, ์ด๋Ÿฐ ์ž‘์€ ๋ถ€๋ถ„๊นŒ์ง€ ์‹ ๊ฒฝ ์“ฐ๋Š” ๊ฒƒ์ด ์ „๋ฌธ์ ์ธ ๊ฐœ๋ฐœ์ž์˜ ์ž์„ธ์•ผ. ์žฌ๋Šฅ๋„ท์—์„œ Java ๊ฐœ๋ฐœ์ž๋ฅผ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋Ÿฐ ์„ธ์‹ฌํ•œ ๋ถ€๋ถ„๊นŒ์ง€ ์‹ ๊ฒฝ ์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ๋งŒ๋‚˜๋ณผ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ! ๋ฐฐ๋„ˆ ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•ด์„œ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ’ˆ์งˆ๊นŒ์ง€ ๋†’์—ฌ๋ณด์ž! ๐Ÿš€

๐Ÿ”„ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ (FAQ)

Q1: Spring Boot ๋ฐฐ๋„ˆ๋Š” ์–ด๋””์— ์ €์žฅํ•ด์•ผ ํ•˜๋‚˜์š”?

A: ๊ธฐ๋ณธ์ ์œผ๋กœ src/main/resources ๋””๋ ‰ํ† ๋ฆฌ์— banner.txt ๋˜๋Š” banner.png, banner.jpg, banner.gif ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋ฉด ๋ผ. Spring Boot๊ฐ€ ์ž๋™์œผ๋กœ ์ด ํŒŒ์ผ๋“ค์„ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•  ๊ฑฐ์•ผ.

Q2: ๋ฐฐ๋„ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋‚˜์š”?

A: ์ฃผ์š” ๋ณ€์ˆ˜๋กœ๋Š” ${application.version}, ${application.formatted-version}, ${spring-boot.version}, ${spring-boot.formatted-version}, ${application.title}, ${java.version}, ${java.vendor} ๋“ฑ์ด ์žˆ์–ด. ์ด ๋ณ€์ˆ˜๋“ค์€ ์‹ค์ œ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋˜์–ด ์ถœ๋ ฅ๋ผ.

Q3: ๋ฐฐ๋„ˆ๊ฐ€ ์ฝ˜์†”์— ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

A: ๋ฐฐ๋„ˆ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์–ด. spring.main.banner-mode ์†์„ฑ์ด off๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ๋„ˆ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์„ ์ˆ˜ ์žˆ์–ด. ๋˜๋Š” ๋กœ๊น… ์„ค์ •์— ๋”ฐ๋ผ ์ฝ˜์†” ์ถœ๋ ฅ์ด ์–ต์ œ๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ์ง€.

Q4: ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ์˜ ํฌ๊ธฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

A: application.properties ํŒŒ์ผ์—์„œ spring.banner.image.width์™€ spring.banner.image.height ์†์„ฑ์„ ์„ค์ •ํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ฐฐ๋„ˆ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์–ด. ์ด ๊ฐ’๋“ค์€ ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ง€์ •๋ผ.

Q5: ๋ฐฐ๋„ˆ๋ฅผ ํ™˜๊ฒฝ(๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ์šด์˜)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

A: ๋„ค, ๊ฐ€๋Šฅํ•ด! application-dev.properties, application-test.properties, application-prod.properties ํŒŒ์ผ์— ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐฐ๋„ˆ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฐ๋„ˆ๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด.

Spring Boot ๋ฐฐ๋„ˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ๋Œ€ํ•œ ์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๊ธธ ๋ฐ”๋ผ! ๐ŸŒฑ

๋” ๋งŽ์€ Java์™€ Spring Boot ๊ด€๋ จ ์ •๋ณด๋Š” ์žฌ๋Šฅ๋„ท์˜ '์ง€์‹์ธ์˜ ์ˆฒ'์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์–ด. ๐Ÿ˜Š

ํ–‰๋ณตํ•œ ์ฝ”๋”ฉ ๋˜์„ธ์š”! ๐Ÿ‘‹

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.