Spring Bootμ Gradle λΉλ ν΄μ μ΄μ©νμ¬ Gradle task λͺ λ ΉμΌλ‘ λΉλνλ λ°©λ²
[Gradle]
μλμ° ν ν΄λ¦νλ‘μ νΈ λͺ
> Tasks > build
μ :bootJar
or :build task
λλΈ ν΄λ¦build/libs
λλ ν 리μ μκΈ΄ Jar νμΌλ‘ μ ν리μΌμ΄μ
μ€ν κ°λ₯π‘
:build
vs:bootJar
:build
νμ€ν¬ μ€ννλ©΄
β Gradleμμ λΉλμ κ΄λ ¨λ λͺ¨λ taskλ€μ μ€νμν΄
β μ€ν κ°λ₯ν Jar νμΌ μ΄μΈμ plain Jar νμΌ νλλ₯Ό λ μμ±
β :bootJar
νμ€ν¬ μ€ννλ©΄
β μ ν리μΌμ΄μ μ μ€ν κ°λ₯ν Jar(Executable Jar)νμΌμ μμ±νκΈ° μν taskλ§ μ€νμν΄
β λ¨μν Executable Jar νμΌλ§ νμνλ€λ©΄:bootJar
taskλ₯Ό μ€ν
Windows ν°λ―Έλμ΄λ Git Bashλ‘ νλ‘μ νΈκ° μμΉν΄ μλ λλ ν 리 κ²½λ‘λ‘ μ΄λ
Ex. cd desktop/projects/be-template-build
λͺ λ Ήμ μ λ ₯νμ¬ λΉλ μ§ν
Windows ν°λ―Έλμ κ²½μ°, μλ λͺ
λ Ή μ
λ ₯ν΄μ μ ν리μΌμ΄μ
λΉλ μ§ν
β .\gradlew bootJar
Git Bashμ κ²½μ°
β $ ./gradlew build
( μλλ Git Bashλ‘ λΉλν κ²½μ°μ )
build/libs
λλ ν 리μ Jar νμΌ μμ±λ¨Windows ν°λ―Έλμ΄λ Git Bashλ‘ μμ±λ Jar νμΌμ΄ μλ λλ ν 리 κ²½λ‘λ‘ μ΄λ
Ex. cd desktop/projects/be-template-build/build/libs
( build/libs
κ° jar νμΌμ΄ μμ±λ λλ ν 리μ ! )
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
application.yml
β μ ν리μΌμ΄μ
μ μ€ν νκ²½μ μκ΄μμ΄ κ³΅ν΅μΌλ‘ μ¬μ©νλ μ λ³΄λ€ μ€μ
application-local.yml
β λ‘컬 νκ²½μμ μ¬μ©νλ μ λ³΄λ€ μ€μ
( μλ application.yml
μ μλ μ 보λ€μ λΆμ¬λ£κΈ° )
application-server.yml
β μλ² νκ²½μμ μ¬μ©νλ μ λ³΄λ€ μ€μ
( νλ‘νμΌμ μ§μ νλ κ°μ₯ μμ¬μ΄ λ°©λ²μ μμ²λΌ -
λ₯Ό κΈ°μ€μΌλ‘ νλ‘νμΌλͺ
μ yml νμΌ μ΄λ¦μμ ν¬ν¨νλ κ² ! )
Intellij IDEA μμ μ ν리μΌμ΄μ
μ€ν νμΌμ΄ μμΉν μ
λ νΈ λ°μ€λ₯Ό ν΄λ¦ν ν, [Edit Configurations]
ν΄λ¦
νμ±νν νλ‘νμΌ(Active Profile)μ local
λ‘ μ§μ νλ€λ©΄,
--spring.profiles.active=local
μ
λ ₯νμ¬ μ€μ
( μ¬κΈ°μ local
μ application-local.yml
νμΌλͺ
μμμ local
μ κ°λ¦¬ν΄ )
( κ·Έλ₯ local
μ΄λΌκ³ λ§ μμ±ν΄λ κ°λ₯ )
μ ν리μΌμ΄μ
μ€ν ν λ‘κ·Έλ₯Ό 보면, local
νλ‘νμΌμ΄ νμ±ν λ κ²μ νμΈν μ μμ
βοΈ
@Profile
μ λν μ΄μ μ μΆκ°ν΄ νλ‘νμΌ μ μ©νλ λ°©λ²λ μμ
- ν΄λμ€ λ 벨μ μΆκ°
β @Profile("local")
β λ‘μ»¬μΌ λλ§ μλνκ²
β @Profile(value = {"local", "server"})
β λ‘컬μ΄κ±°λ μλ²μΌ λλ§ μλνκ²
β
( μμ κ°μ΄ μ¬μ© )
java -jar Jar νμΌλͺ
.jar
λͺ
λ Ήμ Intellij IDEA μμ νλ‘νμΌ μ μ©νλ κ²κ³Ό λμΌνκ²--spring.profiles.active=local
μ€μ μΆκ°ν΄μ£Όλ©΄ λ¨java -jar section3-week3-template-build-0.0.1-SNAPSHOT.jar --spring.profiles.active=local
( μλλ Git Bashλ‘ μ€νν κ²½μ°μ )
( Spring Boot κΈ°λ°μ Executable Jar νμΌμ μλ²μ λ°°ν¬νλ λ°©λ² )
scp
/ sftp
PaaS
(Platform as a Service)
$ 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
λ°°ν¬ μκ° λ¨μΆ / μ€μ μ€λ¬΄μμλ κ΅μ₯ν λ§μ΄ μ°μ΄λ κΈ°μ
μ€λ μ€μ΅ κ³Όμ λ 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 μ€μ μ°Έκ³
μ€λμ μ¬μ΄κ°λ μ±ν°μλ€!
ꡬκΈμ μ 보λ λ§μκ³ κ°λ¨νκ² λ°λΌνκΈ°λ§ λλ λΆλΆμ΄μλ€.
λ²μ¨ λ΄μΌμ΄ λ λ©΄μ γ