day66 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 8μ›” 19일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
66/129

ν† ν”½ 1개 - maven, gradle

Mavenκ³Ό Gradle은 μžλ°”μ˜ λŒ€ν‘œμ μΈ λΉŒλ“œ 관리 도ꡬ(Tool)이닀.
λΉŒλ“œ 관리 λ„κ΅¬λž€, ν”„λ‘œμ νŠΈμ—μ„œ ν•„μš”ν•œ xml, properties, jar νŒŒμΌλ“€μ„ μžλ™μœΌλ‘œ μΈμ‹ν•˜μ—¬ λΉŒλ“œν•΄μ£ΌλŠ” 도ꡬλ₯Ό λ§ν•œλ‹€.
λ˜ν•œ λΉŒλ“œν•˜κΈ° μ „ μ†ŒμŠ€ μ½”λ“œλ₯Ό 컴파일 ν•˜κ³ , ν…ŒμŠ€νŠΈ 및 정적 뢄석 등을 톡해 μ‹€ν–‰ κ°€λŠ₯ν•œ Application으둜 λΉŒλ“œν•΄μ€€λ‹€.
그리고 ν”„λ‘œμ νŠΈμ˜ 정보 관리, ν…ŒμŠ€νŠΈ λΉŒλ“œ, 배포 λ“±μ˜ μž‘μ—…μ„ μ§„ν–‰ν•˜λ©°, μ™ΈλΆ€ 라이브러리λ₯Ό μ°Έμ‘°ν•˜μ—¬ μžλ™μœΌλ‘œ λ‹€μš΄λ‘œλ“œ ν•˜κ³  μ—…λ°μ΄νŠΈ λ˜ν•œ 관리해쀀닀.


Maven

메이븐은 이전, μžλ°”μ˜ λŒ€ν‘œμ μΈ 관리 λ„κ΅¬μ˜€λ˜ Antλ₯Ό λŒ€μ²΄ν•˜κΈ° μœ„ν•΄ κ°œλ°œλ˜μ—ˆλ‹€. 기쑴에 μ‚¬μš©ν•˜λ˜ 이 AntλŠ” λΉŒλ“œ κΈ°λŠ₯만 가지고 μžˆμ—ˆλ‹€.
메이븐은 ν”„λ‘œμ νŠΈμ˜ μ™ΈλΆ€ 라이브러리λ₯Ό μ‰½κ²Œ μ°Έμ‘°ν• μˆ˜ 있게 pom.xml 파일둜 κ΄€λ¦¬ν•˜λ©°, μ°Έμ‘°ν•œ μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ—°κ΄€λœ λ‹€λ₯Έ λΌμ΄λΈŒλŸ¬λ¦¬λ„ μžλ™μœΌλ‘œ κ΄€λ¦¬λœλ‹€.
β†’ Maven을 μ‚¬μš©ν•˜λŠ” κ°€μž₯ 큰 μ΄μœ λŠ” 라이브러리λ₯Ό μžλ™μœΌλ‘œ 관리해주기 λ•Œλ¬Έμ΄λ‹€.

Ant와 Maven의 νŠΉμ§•

AntMaven
XML 기반의 λΉŒλ“œ 슀크립트XML 기반의 λΉŒλ“œ 슀크립트
자유둜운 λΉŒλ“œ λ‹¨μœ„ 지정라이프 사이클 λ„μž…
κ°„λ‹¨ν•˜κ³  μ‚¬μš©ν•˜κΈ° 쉬움pom.xml둜 νŽΈν•˜κ²Œ Dependency 관리
λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ λ³΅μž‘ν•΄μ§€λŠ” κ²½ν–₯이 있음
라이프 사이클이 μ—†μŒ

Maven의 λŒ€ν‘œ νƒœκ·Έ

  • modelVersion: maven의 버전을 λœ»ν•œλ‹€.
  • groupId: ν”„λ‘œμ νŠΈ κ·Έλ£Ή idλ₯Ό λœ»ν•˜λ©°, 일반적으둜 λŒ€ν‘œν•˜λŠ” μ‚¬μ΄νŠΈ 도메인을 μ—­μˆœμœΌλ‘œ 적어 μ‚¬μš©ν•œλ‹€.
  • artifactId: groupId 외에 λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ™€ ꡬ뢄될 수 μžˆλŠ” ν”„λ‘œμ νŠΈμ˜ Idλ₯Ό μž‘μ„±ν•œλ‹€.
  • version: ν”„λ‘œμ νŠΈμ˜ 버전을 μ˜λ―Έν•œλ‹€. 개발 단계에 따라 κ΅¬λΆ„ν•˜μ—¬ μž‘μ„±ν•œλ‹€.
  • name: ν”„λ‘œμ νŠΈμ˜ 이름을 λ§ν•œλ‹€.
  • description: ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ— λŒ€ν•œ κ°„λž΅ν•œ μ„€λͺ…을 μž‘μ„±ν•œλ‹€.
  • properties: pom.xml 파일 λ‚΄μ—μ„œ λΉˆλ²ˆν•˜κ²Œ μ‚¬μš©λ˜λŠ” 쀑볡 μƒμˆ˜λ₯Ό μ •μ˜ν•œλ‹€. ν•΄λ‹Ή μ˜μ—­μ˜ μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ${νƒœκ·Έλͺ…}의 ν˜•νƒœλ‘œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.
  • dependencies: ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ—μ„œ μ˜μ‘΄μ„±μ„ 가지고 μ‚¬μš©ν•˜λŠ” 라이브러리λ₯Ό μ •μ˜ν•œλ‹€. 각 λΌμ΄λΈŒλŸ¬λ¦¬λ§ˆλ‹€ <dependency> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬λΆ„ν•œλ‹€.
  • build: ν”„λ‘œμ νŠΈ λΉŒλ“œμ™€ κ΄€λ ¨λœ 정보λ₯Ό μ„€μ •ν•œλ‹€.

Gradle

κ·Έλž˜λ“€μ€ Groovy 슀크립트λ₯Ό ν™œμš©ν•œ λΉŒλ“œ 관리 도ꡬ이닀.
μ•ˆλ“œλ‘œμ΄λ“œ ν”„λ‘œμ νŠΈμ˜ ν‘œμ€€ λΉŒλ“œ μ‹œμŠ€ν…œμ΄λ©°, λ©€ν‹° ν”„λ‘œμ νŠΈ λΉŒλ“œμ— μ΅œμ ν™”ν•˜μ—¬ μ„€κ³„λ˜μ—ˆλ‹€.
κ·Έλž˜λ“€μ€ 메이븐에 λΉ„ν•΄ 더 λΉ λ₯Έ 처리 속도λ₯Ό 가지고 있으며, 더 κ°„κ²°ν•œ ꡬ성이 κ°€λŠ₯ν•˜λ‹€.

Gradleκ³Ό Maven 비ꡐ

  • 아직은 Gradle에 λΉ„ν•΄ Maven의 점유율이 더 λ†’λ‹€. (점차 Gradle의 점유율이 λ†’μ•„μ§€λŠ” 쀑이닀.)
  • Gradle에 λΉ„ν•΄ Maven의 μ„±λŠ₯이 떨어진닀.
  • Maven에 λΉ„ν•΄ Gradle이 λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ μ„±λŠ₯이 더 μ’‹λ‹€.
  • Gradle은 Gradle Wrapperλ₯Ό 톡해 μ„€μΉ˜ 없이 μ‚¬μš©ν•  수 μžˆλ‹€.
  • Maven: pom.xml, Gradle: build.gradle

Gradle의 λΉŒλ“œ 속도가 λΉ λ₯Έ 이유

  • 점진적 λΉŒλ“œ(Incremental Builds)
    Gradle은 λΉŒλ“œ μ‹€ν–‰ 쀑 λ§ˆμ§€λ§‰ λΉŒλ“œ 호좜 이후에 task의 μž…λ ₯, 좜λ ₯ ν˜Ήμ€ κ΅¬ν˜„μ΄ λ³€κ²½λλŠ”μ§€ ν™•μΈν•œλ‹€. 그리고 μ΅œμ‹  μƒνƒœλ‘œ κ°„μ£Όν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ λΉŒλ“œκ°€ λ”°λ‘œ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

  • λΉŒλ“œ μΊμ‹œ(Build Cache)
    두 개 μ΄μƒμ˜ λΉŒλ“œκ°€ λŒμ•„κ°€κ³ , ν•˜λ‚˜μ˜ λΉŒλ“œμ—μ„œ μ‚¬μš©λ˜λŠ” νŒŒμΌλ“€μ΄ λ‹€λ₯Έ λΉŒλ“œμ— μ‚¬μš©λœλ‹€λ©΄, Gradle은 λΉŒλ“œ μΊμ‹œλ₯Ό μ΄μš©ν•΄ 이전 λΉŒλ“œμ˜ 결과물을 λ‹€λ₯Έ λΉŒλ“œμ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
    즉, λ‹€μ‹œ λΉŒλ“œν•˜μ§€ μ•Šμ•„λ„ λ˜λ―€λ‘œ λΉŒλ“œ μ‹œκ°„μ΄ μ€„μ–΄λ“€κ²Œ λœλ‹€.

  • 데λͺ¬ ν”„λ‘œμ„ΈμŠ€
    데λͺ¬ ν”„λ‘œμ„ΈμŠ€λž€, μ„œλΉ„μŠ€μ˜ μš”μ²­μ— μ‘λ‹΅ν•˜κΈ° μœ„ν•΄ μ˜€λž«λ™μ•ˆ μ‚΄μ•„ μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§ν•œλ‹€.
    Gradle의 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬ 상에 λΉŒλ“œ 결과물을 λ³΄κ΄€ν•œλ‹€. 이둜 인해 ν•œ 번 λΉŒλ“œλœ ν”„λ‘œμ νŠΈλŠ” λ‹€μŒ λΉŒλ“œμ—μ„œ 맀우 적은 μ‹œκ°„λ§Œ μ†Œμš”λœλ‹€.


참고 자료

  1. μ–΄λΌμš΄λ“œν—ˆλΈŒ μŠ€νŠœλ””μ˜€ - AroundHub Studio, β€œμžλ°”μ˜ λŒ€ν‘œμ μΈ λΉŒλ“œ 관리 툴! 메이븐(Maven)κ³Ό κ·Έλ ˆμ΄λ“€(Gradle)”, https://youtu.be/3Jp9kGDb01g

  2. μš°μ•„ν•œTech, β€œ[10λΆ„ ν…Œμ½”ν†‘] λ£¨λ‚˜μ˜ Gradle”, https://youtu.be/ntOH2bWLWQs


νˆ¬λ‘λ¦¬μŠ€νŠΈ κ°œμš” 짜기

profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보