🌈 [Section3] 13. [ Spring MVC ] μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ/μ‹€ν–‰/배포

ν˜„μ£ΌΒ·2022λ…„ 11μ›” 15일
0

bootcamp

λͺ©λ‘ 보기
53/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό λΉŒλ“œ
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰
  • ν”„λ‘œνŒŒμΌ 적용
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포

✏️ Spring Boot 기반의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό λΉŒλ“œν•˜λŠ” 방법

βœ” IntelliJ IDEλ₯Ό μ΄μš©ν•œ λΉŒλ“œ

  • Spring Boot의 Gradle λΉŒλ“œ νˆ΄μ„ μ΄μš©ν•˜μ—¬ Gradle task λͺ…λ ΉμœΌλ‘œ λΉŒλ“œν•˜λŠ” 방법

    1. 우츑 μƒλ‹¨μ˜ [Gradle] μœˆλ„μš° νƒ­ 클릭
    2. ν”„λ‘œμ νŠΈ λͺ… > Tasks > build 의 :bootJar or :build task 더블 클릭
  1. build/libs 디렉토리에 생긴 Jar 파일둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ κ°€λŠ₯

πŸ’‘ :build vs :bootJar

  • :build νƒœμŠ€ν¬ μ‹€ν–‰ν•˜λ©΄
    ➜ Gradleμ—μ„œ λΉŒλ“œμ™€ κ΄€λ ¨λœ λͺ¨λ“  task듀을 μ‹€ν–‰μ‹œν‚΄
    ➜ μ‹€ν–‰ κ°€λŠ₯ν•œ Jar 파일 이외에 plain Jar 파일 ν•˜λ‚˜λ₯Ό 더 생성
    β €
  • :bootJar νƒœμŠ€ν¬ μ‹€ν–‰ν•˜λ©΄
    ➜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€ν–‰ κ°€λŠ₯ν•œ Jar(Executable Jar)νŒŒμΌμ„ μƒμ„±ν•˜κΈ° μœ„ν•œ task만 μ‹€ν–‰μ‹œν‚΄
    ➜ λ‹¨μˆœνžˆ Executable Jar 파일만 ν•„μš”ν•˜λ‹€λ©΄ :bootJar taskλ₯Ό μ‹€ν–‰

βœ” Gradle Taskλ₯Ό μ΄μš©ν•œ λΉŒλ“œ

  1. Windows ν„°λ―Έλ„μ΄λ‚˜ Git Bash둜 ν”„λ‘œμ νŠΈκ°€ μœ„μΉ˜ν•΄ μžˆλŠ” 디렉토리 경둜둜 이동
    Ex. cd desktop/projects/be-template-build

  2. λͺ…령을 μž…λ ₯ν•˜μ—¬ λΉŒλ“œ 진행

  • Windows ν„°λ―Έλ„μ˜ 경우, μ•„λž˜ λͺ…λ Ή μž…λ ₯ν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ 진행
    ➜ .\gradlew bootJar

  • Git Bash의 경우
    ➜ $ ./gradlew build

( μ•„λž˜λŠ” Git Bash둜 λΉŒλ“œν•œ κ²½μš°μž„ )

  1. λΉŒλ“œκ°€ μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜λ©΄ build/libs 디렉토리에 Jar 파일 생성됨

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

  1. Windows ν„°λ―Έλ„μ΄λ‚˜ Git Bash둜 μƒμ„±λœ Jar 파일이 μžˆλŠ” 디렉토리 경둜둜 이동
    Ex. cd desktop/projects/be-template-build/build/libs
    ( build/libs κ°€ jar 파일이 μƒμ„±λœ λ””λ ‰ν† λ¦¬μž„ ! )

  2. java -jar Jar 파일λͺ….jar λͺ…λ Ή μž…λ ₯ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„œλ²„ ν™˜κ²½μ—μ„œ μ‹€ν–‰ !
    Ex. java -jar section3-week3-template-build-0.0.1-SNAPSHOT.jar

( μ•„λž˜λŠ” Git Bash둜 μ‹€ν–‰ν•œ κ²½μš°μž„ )

❗ intellijμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 싀행쀑이라면 같은 port 번호λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ–΄μ„œ
μ•„λž˜μ™€ 같이 싀행에 μ‹€νŒ¨ν•˜λ‹ˆ intellij의 싀행을 멈좘 ν›„ Git Bashμ—μ„œ μ‹€ν–‰ν•  것 !!

πŸ’‘ But, ν˜„μž¬ μš°λ¦¬κ°€ λ§Œλ“  ν”„λ‘œμ νŠΈλ“€μ€ 둜컬 ν™˜κ²½μ—μ„œ 인메λͺ¨λ¦¬ DB인 H2 μ‚¬μš©μ€‘ !
β €
μ„œλ²„ ν™˜κ²½μ—μ„œ 배포 / 운영 ν•œλ‹€λ©΄ 인메λͺ¨λ¦¬ DB둜 ν•˜λ©΄ μ•ˆλ¨
( μž¬μ‹œμž‘ ν•  경우 데이터 λͺ¨λ‘ μ΄ˆκΈ°ν™” )
β €
둜컬 ν™˜κ²½μ—μ„œ μ‚¬μš©μ‹œμ™€ μ„œλ²„μš© jar 파일 λΉŒλ“œ μ‹œ application.yml 파일의 DB 정보λ₯Ό 계속 λ°”κΏ”κ°€λ©° λΉŒλ“œν•˜λŠ” 것은 μ•„μ£Ό λΉ„νš¨μœ¨μ 
β €
➜ ν”„λ‘œνŒŒμΌ κΈ°λŠ₯ μ‚¬μš©

[IntelliJ IDE μ΄μ™Έμ˜ λ°©λ²•μœΌλ‘œ Spring Boot 기반의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ” 방법 μ°Έκ³ ]
https://docs.spring.io/spring-boot/docs/current/reference/html/cli.html#cli.using-the-cli.run
https://spring.io/guides/gs/spring-boot/


✏️ ν”„λ‘œνŒŒμΌ μ μš©ν•˜κΈ°

  • 둜컬 ν™˜κ²½μ—μ„œ κ°œλ°œν•  λ•Œμ™€ μ„œλ²„μ—μ„œ 배포 / μš΄μ˜ν•  경우의 DBλ₯Ό λ‹€λ₯΄κ²Œ ν•˜κΈ° μœ„ν•΄ ν”„λ‘œνŒŒμΌμ΄λΌλŠ” κΈ°λŠ₯을 적용

  • IntelliJ IDE 같은 개발 ν™˜κ²½μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ ν”„λ‘œνŒŒμΌμ„ λ³€κ²½ν•΄μ•Ό ν•  κ²½μš°λ„ μžˆμ§€λ§Œ
    ν”„λ‘œνŒŒμΌ κΈ°λŠ₯은 주둜 λΉŒλ“œλœ μ‹€ν–‰ νŒŒμΌμ„ μ–΄λŠ ν™˜κ²½μ—μ„œ 싀행할지 μ—¬λΆ€λ₯Ό κ²°μ •ν•  λ•Œ μ‚¬μš©
    ➜ λΉŒλ“œ ν›„ μƒμ„±λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ νŒŒμΌμ— λŒ€ν•œ μ‹€ν–‰ ν™˜κ²½μ„ μ†μ‰½κ²Œ 지정 κ°€λŠ₯

[μ°Έκ³ ]
https://www.baeldung.com/spring-profiles
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.profiles

βœ” IntelliJ IDEμ—μ„œ ν”„λ‘œνŒŒμΌ 적용

  1. μ•„λž˜μ™€ 같이 application.yml 파일 λ‘κ°œλ₯Ό 더 λ§Œλ“€κΈ°

  • application.yml
    ➜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€ν–‰ ν™˜κ²½μ— 상관없이 κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 정보듀 μ„€μ •

  • application-local.yml
    ➜ 둜컬 ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜λŠ” 정보듀 μ„€μ •
    ( μ›λž˜ application.yml에 있던 정보듀을 λΆ™μ—¬λ„£κΈ° )

  • application-server.yml
    ➜ μ„œλ²„ ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜λŠ” 정보듀 μ„€μ •

( ν”„λ‘œνŒŒμΌμ„ μ§€μ •ν•˜λŠ” κ°€μž₯ μ†μ‰¬μš΄ 방법은 μœ„μ²˜λŸΌ -λ₯Ό κΈ°μ€€μœΌλ‘œ ν”„λ‘œνŒŒμΌλͺ…을 yml 파일 μ΄λ¦„μ•ˆμ— ν¬ν•¨ν•˜λŠ” 것 ! )

  1. Intellij IDEA μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 파일이 μœ„μΉ˜ν•œ μ…€λ ‰νŠΈ λ°•μŠ€λ₯Ό ν΄λ¦­ν•œ ν›„, [Edit Configurations] 클릭

  2. ν™œμ„±ν™”ν•  ν”„λ‘œνŒŒμΌ(Active Profile)을 local둜 μ§€μ •ν•œλ‹€λ©΄,
    --spring.profiles.active=local μž…λ ₯ν•˜μ—¬ μ„€μ •
    ( μ—¬κΈ°μ„œ local은 application-local.yml 파일λͺ…μ—μ„œμ˜ local을 가리킴 )
    ( κ·Έλƒ₯ local이라고만 μž‘μ„±ν•΄λ„ κ°€λŠ₯ )

  3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ν›„ 둜그λ₯Ό 보면, local ν”„λ‘œνŒŒμΌμ΄ ν™œμ„±ν™” 된 것을 확인할 수 있음

βœ”οΈ @Profile μ• λ„ˆν…Œμ΄μ…˜μ„ μΆ”κ°€ν•΄ ν”„λ‘œνŒŒμΌ μ μš©ν•˜λŠ” 방법도 있음

  • 클래슀 λ ˆλ²¨μ— μΆ”κ°€
    β €
  • @Profile("local")
    ➜ 둜컬일 λ•Œλ§Œ μž‘λ™ν•˜κ²Œ
    β €
  • @Profile(value = {"local", "server"})
    ➜ λ‘œμ»¬μ΄κ±°λ‚˜ μ„œλ²„μΌ λ•Œλ§Œ μž‘λ™ν•˜κ²Œ
    β €
    ( μœ„μ™€ 같이 μ‚¬μš© )

βœ” λΉŒλ“œλœ μ‹€ν–‰ νŒŒμΌμ— ν”„λ‘œνŒŒμΌ 적용

  • Windows ν„°λ―Έλ„μ΄λ‚˜ Git Bash둜 Jar 파일이 μžˆλŠ” 디렉토리 κ²½λ‘œμ—μ„œ
    Jar 을 μ‹€ν–‰μ‹œμΌ°λ˜ java -jar Jar 파일λͺ….jar λͺ…령에 Intellij IDEA μ—μ„œ ν”„λ‘œνŒŒμΌ μ μš©ν–ˆλ˜ 것과 λ™μΌν•˜κ²Œ
    --spring.profiles.active=local μ„€μ • μΆ”κ°€ν•΄μ£Όλ©΄ 됨
    β €
    Ex. java -jar section3-week3-template-build-0.0.1-SNAPSHOT.jar --spring.profiles.active=local

( μ•„λž˜λŠ” Git Bash둜 μ‹€ν–‰ν•œ κ²½μš°μž„ )


✏️ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포

( Spring Boot 기반의 Executable Jar νŒŒμΌμ„ μ„œλ²„μ— λ°°ν¬ν•˜λŠ” 방법 )

βœ” 전톡적인 배포 방법

βœ” ν΄λΌμš°λ“œ μ„œλΉ„μŠ€λ₯Ό μœ„ν•œ 배포 방법

  • PaaS (Platform as a Service)

    • Cloud Foundry, Heroku
      β €
      ➜ PaaS 제곡 기업인 Cloud Foundryμ—μ„œ μ œκ³΅ν•˜λŠ” cf command line 툴 μ‚¬μš©
      β €
      Ex. $ cf push acloudyspringtime -p target/app-0.0.1-SNAPSHOT.jar
  • IaaS (Infrastructure as a Service)

    • AWS Elastic Beanstalk, AWS Container Registry, AWS Code Deploy 같은 μ„œλΉ„μŠ€ 이용

    • Azure Spring Cloud, Azure App Service μ—μ„œ Spring Boot 기반의 Executable Jar 파일 배포 κΈ°λŠ₯을 제곡
      ( Microsoft의 ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μΈ Azure )

    • Google Cloud μ‚¬μš©
      ➜ Executable Jar 파일 배포λ₯Ό μœ„ν•œ μ—¬λŸ¬κ°€μ§€ μ˜΅μ…˜μ„ 제곡

  • CI / CD ν”Œλž«νΌμ„ μ‚¬μš©ν•œ 배포

    • CI / CD ν”Œλž«νΌ μ΄μš©ν•˜μ—¬ AWSλ‚˜ Azure 같은 ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μ— Executable Jar νŒŒμΌμ„ μžλ™ λ°°ν¬ν•˜λ„λ‘ ꡬ성 κ°€λŠ₯
      Ex. Github Actions / Circle CI

    • 배포 μ‹œκ°„ 단좕 / μ‹€μ œ μ‹€λ¬΄μ—μ„œλ„ ꡉμž₯히 많이 μ“°μ΄λŠ” 기술


😜 μ‹€μŠ΅

  • projects - be-reference-profile-examples
  • git - be-homework-build

였늘 μ‹€μŠ΅ κ³Όμ œλŠ” application-server.yml νŒŒμΌμ— MySQLκ³Ό μ—°λ™ν•˜κΈ° μ˜€λ‹€ !

λ¨Όμ €, build.gradle 폴더에 μ•„λž˜μ™€ 같은 μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•΄μ£Όκ³ 

implementation 'mysql:mysql-connector-java'

application-server.yml νŒŒμΌμ—

spring:
  jpa:
    hibernate:
      ddl-auto: create-drop  # (1) μŠ€ν‚€λ§ˆ μžλ™ 생성
    show-sql: true      # (2) SQL 쿼리 좜λ ₯
    properties:
      hibernate:
        format_sql: true  # (3) SQL pretty print
  datasource: // μ—¬κΈ°μ„œλΆ€ν„° μΆ”κ°€ν•œ λΆ€λΆ„
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/coffee_order?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=Asia/Seoul
    username: root
    password: 1234

μ΄λ ‡κ²Œ μΆ”κ°€ν•΄μ£Όκ³ 

Edit Configurationsμ—μ„œ --spring.profiles.active=server μ΄λ ‡κ²Œ μ„€μ •ν•΄μ£Όλ©΄

μ„œλ²„λ‘œ mysql이 μ—°λ™λœλ‹€ !

개발 ν™˜κ²½μ— λ”°λ₯Έ application.yml μ„€μ • μ°Έκ³ 


🌈 λŠλ‚€μ 

μ˜€λŠ˜μ€ μ‰¬μ–΄κ°€λŠ” μ±•ν„°μ˜€λ‹€!
ꡬ글에 정보도 λ§Žμ•˜κ³  κ°„λ‹¨ν•˜κ²Œ λ”°λΌν•˜κΈ°λ§Œ λ˜λŠ” λΆ€λΆ„μ΄μ—ˆλ‹€.
벌써 내일이 또 λ©΄μ ‘ γ… 

0개의 λŒ“κΈ€