λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜ / λ‹€μš΄λ‘œλ“œ 방법

by 5566 2023. 8. 22.

1. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ κ°œλ…κ³Ό ν•„μš”μ„±

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” μžλ°” 기반의 μ˜€ν”ˆ μ†ŒμŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬λ‘œ, μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κΈ° μœ„ν•œ μœ μš©ν•œ 도ꡬ와 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. μŠ€ν”„λ§μ€ κ²½λŸ‰ μ»¨ν…Œμ΄λ„ˆλ‘œμ„œ Java EE ν™˜κ²½μ—μ„œ κ°œλ°œμ„ κ°„μ†Œν™”ν•˜κ³ , λ‹€μ–‘ν•œ κΈ°λŠ₯을 ν¬ν•¨ν•œ λͺ¨λ“ˆν™”λœ μ•„ν‚€ν…μ²˜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μŠ€ν”„λ§μ€ IoC (Inversion of Control) μ»¨ν…Œμ΄λ„ˆμ™€ DI (Dependency Injection), AOP (Aspect-Oriented Programming) λ“±μ˜ κ°œλ…μ„ 기반으둜 ν•œλ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. 개발 생산성 ν–₯상: μŠ€ν”„λ§μ€ κ°œλ°œμžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ— 집쀑할 수 μžˆλ„λ‘ 기본적인 μ„€μ •κ³Ό λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ μ½”λ“œλ₯Ό μ œκ³΅ν•˜μ—¬ 개발 생산성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
  2. ν™•μž₯μ„±: μŠ€ν”„λ§μ€ λͺ¨λ“ˆν™”λœ μ•„ν‚€ν…μ²˜λ₯Ό μ œκ³΅ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯을 ν•„μš”μ— 따라 μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μœ μ§€λ³΄μˆ˜ μš©μ΄μ„±: μŠ€ν”„λ§μ€ 각각의 μ»΄ν¬λ„ŒνŠΈλ“€ μ‚¬μ΄μ˜ μ˜μ‘΄μ„±μ„ λŠμŠ¨ν•˜κ²Œ μœ μ§€ν•¨μœΌλ‘œμ¨, μœ μ§€λ³΄μˆ˜μ™€ ν…ŒμŠ€νŠΈκ°€ μš©μ΄ν•΄μ§‘λ‹ˆλ‹€.
  4. ν…ŒμŠ€νŠΈ μš©μ΄μ„±: μŠ€ν”„λ§μ€ DI와 IoC μ»¨ν…Œμ΄λ„ˆλ₯Ό 톡해 ν…ŒμŠ€νŠΈμ— μš©μ΄ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜μ—¬ λ‹¨μœ„ ν…ŒμŠ€νŠΈ, 톡합 ν…ŒμŠ€νŠΈ, κΈ°λŠ₯ ν…ŒμŠ€νŠΈ 등을 μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. κΈ°μ—… ν™˜κ²½μ— 적합: μŠ€ν”„λ§μ€ κΈ°μ—… ν™˜κ²½μ—μ„œ 많이 μ‚¬μš©λ˜λŠ” λ³΄μ•ˆ, νŠΈλžœμž­μ…˜ 관리, λ‘œκΉ… λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ§€μ›ν•˜μ—¬ κΈ°μ—… μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— μ ν•©ν•©λ‹ˆλ‹€.

μ•žμœΌλ‘œ 이 κΈ€μ—μ„œλŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  μ„€μΉ˜ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

2. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ λ‹€μš΄λ‘œλ“œμ˜ λ‹€μ–‘ν•œ 방법

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” 방법은 μ—¬λŸ¬ 가지가 μžˆμŠ΅λ‹ˆλ‹€. 주둜 μ‚¬μš©λ˜λŠ” 방법은 Mavenμ΄λ‚˜ Gradle을 ν†΅ν•œ μ˜μ‘΄μ„± 관리 도ꡬλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ•„λž˜λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” λ‹€μ–‘ν•œ 방법에 λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€:

2.1. Maven을 ν†΅ν•œ λ‹€μš΄λ‘œλ“œ

Maven을 μ‚¬μš©ν•˜λ©΄ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ λ‹€μ–‘ν•œ λͺ¨λ“ˆμ„ κ΄€λ¦¬ν•˜κ³  μ˜μ‘΄μ„±μ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ Maven을 톡해 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€:

  1. pom.xml νŒŒμΌμ— μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ κ°€μž₯ 기본적인 μ˜μ‘΄μ„± μ„€μ • μ˜ˆμ‹œμž…λ‹ˆλ‹€:

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.10</version>
        </dependency>
    </dependencies>
  2. Maven을 톡해 ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œν•©λ‹ˆλ‹€. Maven은 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ˜μ‘΄μ„±μ„ μžλ™μœΌλ‘œ λ‹€μš΄λ‘œλ“œν•˜κ³  ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ ν”„λ‘œμ νŠΈ λ””λ ‰ν† λ¦¬μ—μ„œ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€:

    mvn clean install
  3. Maven은 둜컬 μ €μž₯μ†Œμ— μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ JAR νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€. 이 JAR νŒŒμΌμ€ ν”„λ‘œμ νŠΈμ—μ„œ μ°Έμ‘°ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2.2. Gradle을 ν†΅ν•œ λ‹€μš΄λ‘œλ“œ

Gradle은 Mavenκ³Ό λΉ„μŠ·ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λΉŒλ“œ λ„κ΅¬μž…λ‹ˆλ‹€. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό Gradle을 톡해 λ‹€μš΄λ‘œλ“œν•˜λŠ” 방법은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€:

  1. build.gradle νŒŒμΌμ— μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ κ°€μž₯ 기본적인 μ˜μ‘΄μ„± μ„€μ • μ˜ˆμ‹œμž…λ‹ˆλ‹€:

    dependencies {
        implementation 'org.springframework:spring-context:5.3.10'
    }
  2. Gradle을 톡해 ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œν•©λ‹ˆλ‹€. Gradle은 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ˜μ‘΄μ„±μ„ μžλ™μœΌλ‘œ λ‹€μš΄λ‘œλ“œν•˜κ³  ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ ν”„λ‘œμ νŠΈ λ””λ ‰ν† λ¦¬μ—μ„œ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€:

    ./gradlew build
  3. Gradle은 둜컬 μ €μž₯μ†Œμ— μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ JAR νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€. 이 JAR νŒŒμΌμ€ ν”„λ‘œμ νŠΈμ—μ„œ μ°Έμ‘°ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2.3. μŠ€ν”„λ§ 곡식 μ›Ήμ‚¬μ΄νŠΈμ—μ„œ λ‹€μš΄λ‘œλ“œ

μŠ€ν”„λ§ 곡식 μ›Ήμ‚¬μ΄νŠΈμ—μ„œλŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ μ΅œμ‹  버전을 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ μŠ€ν”„λ§ 곡식 μ›Ήμ‚¬μ΄νŠΈμ—μ„œ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€:

  1. μŠ€ν”„λ§ 곡식 μ›Ήμ‚¬μ΄νŠΈ(https://spring.io)에 μ ‘μ†ν•©λ‹ˆλ‹€.
  2. 상단 λ©”λ‰΄μ—μ„œ "Projects" μ„Ήμ…˜μœΌλ‘œ μ΄λ™ν•˜μ—¬ "Spring Framework"λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  3. ν•΄λ‹Ή νŽ˜μ΄μ§€μ—μ„œ "Download" νƒ­μœΌλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.
  4. λ‹€μš΄λ‘œλ“œ νŽ˜μ΄μ§€μ—μ„œλŠ” λ‹€μ–‘ν•œ ν˜•μ‹μ˜ λ‹€μš΄λ‘œλ“œ μ˜΅μ…˜μ΄ μ œκ³΅λ©λ‹ˆλ‹€. μ›ν•˜λŠ” ν˜•μ‹μ„ μ„ νƒν•˜κ³  λ‹€μš΄λ‘œλ“œ λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.

μŠ€ν”„λ§ 곡식 μ›Ήμ‚¬μ΄νŠΈλ₯Ό 톡해 λ‹€μš΄λ‘œλ“œ 받은 νŒŒμΌμ€ μ••μΆ• 파일 ν˜•νƒœλ‘œ 제곡되며, 압좕을 ν•΄μ œν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이와 같이 본인의 개발 ν™˜κ²½μ΄λ‚˜ ν”„λ‘œμ νŠΈμ— κ°€μž₯ μ ν•©ν•œ λ°©λ²•μœΌλ‘œ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜ 전에 ν•„μš”ν•œ 사전 μž‘μ—…

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ„€μΉ˜ν•˜κΈ° 전에 λͺ‡ 가지 사전 μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ„€μΉ˜ 과정이 μ›ν™œν•˜κ²Œ 진행될 수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜ 전에 ν•„μš”ν•œ 사전 μž‘μ—…μ— λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€:

3.1. μžλ°” 개발 ν™˜κ²½ μ„€μΉ˜

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” μžλ°”λ‘œ 개발되며, λ”°λΌμ„œ μžλ°” 개발 ν™˜κ²½μ΄ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ‹€μŒμ€ μžλ°” 개발 ν™˜κ²½μ„ μ„€μΉ˜ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€:

  1. Oracle λ˜λŠ” OpenJDKμ—μ„œ μ œκ³΅ν•˜λŠ” JDK(Java Development Kit) μ„€μΉ˜ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€. JDKλŠ” μžλ°” κ°œλ°œμ— ν•„μš”ν•œ 도ꡬ와 μ‹€ν–‰ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

  2. λ‹€μš΄λ‘œλ“œν•œ JDK μ„€μΉ˜ νŒŒμΌμ„ μ‹€ν–‰ν•˜κ³ , μ„€μΉ˜ 과정을 λ”°λΌκ°‘λ‹ˆλ‹€. μΌλ°˜μ μœΌλ‘œλŠ” κΈ°λ³Έ 섀정을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜ν•˜λ©΄ λ©λ‹ˆλ‹€.

  3. μ„€μΉ˜κ°€ μ™„λ£Œλ˜λ©΄, ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. μžλ°” 개발 ν™˜κ²½κ³Ό κ΄€λ ¨λœ ν™˜κ²½ λ³€μˆ˜λŠ” JAVA_HOME, PATH λ“±μž…λ‹ˆλ‹€. 각 μš΄μ˜μ²΄μ œλ³„λ‘œ μ„€μ • 방법이 λ‹€λ₯Ό 수 μžˆμœΌλ―€λ‘œ, ν•΄λ‹Ή 운영체제의 μ„€μ • κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

3.2. μ˜μ‘΄μ„± 관리 도ꡬ μ„€μΉ˜

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” Mavenμ΄λ‚˜ Gradleκ³Ό 같은 μ˜μ‘΄μ„± 관리 도ꡬλ₯Ό 톡해 κ΄€λ¦¬λ˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” μ΄λŸ¬ν•œ 도ꡬ가 μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ‹€μŒμ€ Mavenκ³Ό Gradle을 μ„€μΉ˜ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€:

3.2.1. Maven μ„€μΉ˜

  1. Apache Maven 곡식 μ›Ήμ‚¬μ΄νŠΈ(https://maven.apache.org)μ—μ„œ Maven μ„€μΉ˜ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€.

  2. λ‹€μš΄λ‘œλ“œν•œ Maven μ„€μΉ˜ νŒŒμΌμ„ μ••μΆ• ν•΄μ œν•œ ν›„, μ›ν•˜λŠ” κ²½λ‘œμ— μ €μž₯ν•©λ‹ˆλ‹€.

  3. ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. M2_HOME ν™˜κ²½ λ³€μˆ˜λ₯Ό Maven μ„€μΉ˜ 경둜둜 μ„€μ •ν•˜κ³ , PATH ν™˜κ²½ λ³€μˆ˜μ— %M2_HOME%\bin을 μΆ”κ°€ν•©λ‹ˆλ‹€.

3.2.2. Gradle μ„€μΉ˜

  1. Gradle 곡식 μ›Ήμ‚¬μ΄νŠΈ(https://gradle.org)μ—μ„œ Gradle μ„€μΉ˜ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€.

  2. λ‹€μš΄λ‘œλ“œν•œ Gradle μ„€μΉ˜ νŒŒμΌμ„ μ••μΆ• ν•΄μ œν•œ ν›„, μ›ν•˜λŠ” κ²½λ‘œμ— μ €μž₯ν•©λ‹ˆλ‹€.

  3. ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. GRADLE_HOME ν™˜κ²½ λ³€μˆ˜λ₯Ό Gradle μ„€μΉ˜ 경둜둜 μ„€μ •ν•˜κ³ , PATH ν™˜κ²½ λ³€μˆ˜μ— %GRADLE_HOME%\bin을 μΆ”κ°€ν•©λ‹ˆλ‹€.

3.3. IDE μ„€μΉ˜

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ κ°œλ°œμ„ μœ„ν•΄μ„œλŠ” 톡합 개발 ν™˜κ²½(IDE)λ₯Ό μ„€μΉ˜ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν”νžˆ μ‚¬μš©λ˜λŠ” IDE인 IntelliJ, Eclipse, Spring Tools Suite 등을 μ„ νƒν•˜μ—¬ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 각 IDE의 μ„€μΉ˜ 과정은 ν•΄λ‹Ή μ œν’ˆμ˜ 곡식 μ›Ήμ‚¬μ΄νŠΈλ₯Ό μ°Έκ³ ν•˜λ©΄ λ©λ‹ˆλ‹€.

μœ„μ˜ 사전 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©΄ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ›ν™œν•˜κ²Œ μ„€μΉ˜ν•˜κ³  μ‚¬μš©ν•  수 μžˆλŠ” μ€€λΉ„κ°€ λλ‚©λ‹ˆλ‹€.

4. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ λ‹€μš΄λ‘œλ“œ 및 μ„€μΉ˜ 방법

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  μ„€μΉ˜ν•˜λŠ” 방법은 κ°„λ‹¨ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  μ„€μΉ˜ν•˜λŠ” 단계에 λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…μž…λ‹ˆλ‹€:

4.1. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ λ‹€μš΄λ‘œλ“œ

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” μŠ€ν”„λ§ 곡식 μ›Ήμ‚¬μ΄νŠΈ(https://spring.io)μ—μ„œ λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€:

  1. μŠ€ν”„λ§ 곡식 μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•©λ‹ˆλ‹€.

  2. 상단 λ©”λ‰΄μ—μ„œ "Projects" μ„Ήμ…˜μœΌλ‘œ μ΄λ™ν•˜μ—¬ "Spring Framework"λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

  3. ν•΄λ‹Ή νŽ˜μ΄μ§€μ—μ„œ "Download" νƒ­μœΌλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

  4. λ‹€μš΄λ‘œλ“œ νŽ˜μ΄μ§€μ—μ„œλŠ” λ‹€μ–‘ν•œ ν˜•μ‹μ˜ λ‹€μš΄λ‘œλ“œ μ˜΅μ…˜μ΄ μ œκ³΅λ©λ‹ˆλ‹€. μ›ν•˜λŠ” ν˜•μ‹μ„ μ„ νƒν•˜κ³  λ‹€μš΄λ‘œλ“œ λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€. μΌλ°˜μ μœΌλ‘œλŠ” "ZIP" ν˜•μ‹μ„ μ„ νƒν•˜μ—¬ λ‹€μš΄λ‘œλ“œν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.

  5. λ‹€μš΄λ‘œλ“œκ°€ μ™„λ£Œλ˜λ©΄ 압좕을 ν•΄μ œν•©λ‹ˆλ‹€. μ••μΆ• νŒŒμΌμ„ μ›ν•˜λŠ” 디렉토리에 μ €μž₯ν•˜κ³  압좕을 ν•΄μ œν•©λ‹ˆλ‹€.

4.2. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ μ„€μΉ˜ 과정은 λ‹€μš΄λ‘œλ“œν•œ νŒŒμΌμ„ μ›ν•˜λŠ” μœ„μΉ˜μ— μ••μΆ• ν•΄μ œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” Windows 운영체제 κΈ°μ€€μœΌλ‘œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€:

  1. 압좕을 ν•΄μ œν•œ 폴더에 λ“€μ–΄κ°€λ©΄ λ‹€μ–‘ν•œ 파일과 디렉토리가 μžˆμŠ΅λ‹ˆλ‹€. 이 쀑 lib λ””λ ‰ν† λ¦¬λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ 핡심 JAR 파일이 μœ„μΉ˜ν•œ κ³³μž…λ‹ˆλ‹€.

  2. ν•„μš”ν•œ JAR νŒŒμΌμ„ ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•˜κΈ° μœ„ν•΄ 압좕을 ν•΄μ œν•œ 폴더 경둜λ₯Ό λ³΅μ‚¬ν•©λ‹ˆλ‹€.

  3. ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•˜κ³  μžˆλŠ” IDEμ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ—½λ‹ˆλ‹€.

  4. ν”„λ‘œμ νŠΈμ˜ λΉŒλ“œ 섀정을 μ—΄κ±°λ‚˜ κ΄€λ¦¬ν•˜λŠ” 방법은 IDEλ§ˆλ‹€ λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ μ ˆν•œ μœ„μΉ˜μ—μ„œ ν”„λ‘œμ νŠΈμ˜ 쒅속성(dependency) 섀정을 μ°ΎμŠ΅λ‹ˆλ‹€.

  5. 쒅속성 μ„€μ • μ˜μ—­μ—μ„œ lib 디렉토리 경둜λ₯Ό μΆ”κ°€ν•˜κ³ , ν•„μš”ν•œ JAR νŒŒμΌμ„ μ„ νƒν•˜μ—¬ μΆ”κ°€ν•©λ‹ˆλ‹€. IDE에 따라 μ„€μ • 방법이 λ‹€λ₯Ό 수 μžˆμœΌλ―€λ‘œ ν•΄λ‹Ή IDE의 λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

μ΄λ ‡κ²Œν•˜λ©΄ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ JAR νŒŒμΌμ„ ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μΆ”κ°€λœ JAR νŒŒμΌμ€ ν”„λ‘œμ νŠΈμ—μ„œ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” 데 ν•„μš”ν•œ ν΄λž˜μŠ€μ™€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

5. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜ ν›„ μΆ”κ°€ μ„€μ • 및 μ‹€ν–‰ 예제

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ„€μΉ˜ν•œ ν›„μ—λŠ” λͺ‡ 가지 μΆ”κ°€ 섀정을 ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ˜ν•œ, μ„€μΉ˜κ°€ μ˜¬λ°”λ₯΄κ²Œ μ΄λ£¨μ–΄μ‘ŒλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ κ°„λ‹¨ν•œ μ‹€ν–‰ 예제λ₯Ό μ‹€ν–‰ν•΄λ³΄λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ•„λž˜λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜ ν›„ μΆ”κ°€ μ„€μ • 및 μ‹€ν–‰ μ˜ˆμ œμ— λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…μž…λ‹ˆλ‹€:

5.1. μŠ€ν”„λ§ ν”„λ‘œμ νŠΈ 생성

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ΄μš©ν•˜μ—¬ κ°œλ°œμ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ λ¨Όμ € μŠ€ν”„λ§ ν”„λ‘œμ νŠΈλ₯Ό 생성해야 ν•©λ‹ˆλ‹€. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” 일반적으둜 Maven λ˜λŠ” Gradle을 μ΄μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό κ΄€λ¦¬ν•˜λ―€λ‘œ, 이듀 λΉŒλ“œ 도ꡬλ₯Ό 톡해 ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” Maven을 μ‚¬μš©ν•˜μ—¬ μŠ€ν”„λ§ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€:

  1. 터미널 λ˜λŠ” λͺ…λ Ή ν”„λ‘¬ν”„νŠΈλ₯Ό μ—΄κ³  μ›ν•˜λŠ” μœ„μΉ˜λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

  2. λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ Maven을 μ΄μš©ν•˜μ—¬ μŠ€ν”„λ§ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€:

    mvn archetype:generate -DgroupId=com.example -DartifactId=myproject

    μœ„μ˜ λͺ…령을 μ‹€ν–‰ν•˜λ©΄ com.example κ·Έλ£Ή ID와 myproject μ•„ν‹°νŒ©νŠΈ IDλ₯Ό 가진 Maven ν”„λ‘œμ νŠΈκ°€ μƒμ„±λ©λ‹ˆλ‹€. μ΄λŠ” 본인의 ν”„λ‘œμ νŠΈμ— 맞게 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. μƒμ„±λœ ν”„λ‘œμ νŠΈ ν΄λ”λ‘œ μ΄λ™ν•œ ν›„ ν•΄λ‹Ή 폴더λ₯Ό IDE에 importν•˜κ±°λ‚˜, ν…μŠ€νŠΈ μ—λ””ν„°μ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό μ—½λ‹ˆλ‹€.

5.2. μΆ”κ°€ μ„€μ •

μŠ€ν”„λ§ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•œ ν›„μ—λŠ” λͺ‡ 가지 μΆ”κ°€ 섀정이 ν•„μš”ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” μŠ€ν”„λ§ ν”„λ‘œμ νŠΈμ— λŒ€ν•œ μΆ”κ°€ 섀정에 λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€:

5.2.1. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ˜μ‘΄μ„± μΆ”κ°€

μŠ€ν”„λ§ ν”„λ‘œμ νŠΈμ—μ„œ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ˜μ‘΄μ„±(dependency)을 μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. Maven을 μ‚¬μš©ν•˜λŠ” 경우, pom.xml νŒŒμΌμ„ μ—΄κ³  λ‹€μŒκ³Ό 같이 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•©λ‹ˆλ‹€:

<dependencies>
    <!-- μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ˜μ‘΄μ„± -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.8</version>
    </dependency>
</dependencies>

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” spring-context μ˜μ‘΄μ„±μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ 핡심 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€. ν•„μš”ν•œ λ‹€λ₯Έ μ˜μ‘΄μ„±λ„ ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5.2.2. μŠ€ν”„λ§ μ„€μ • 파일 생성

μŠ€ν”„λ§ ν”„λ‘œμ νŠΈμ—μ„œλŠ” μŠ€ν”„λ§ μ„€μ • 파일이 ν•„μš”ν•©λ‹ˆλ‹€. μŠ€ν”„λ§ μ„€μ • νŒŒμΌμ€ μŠ€ν”„λ§ 빈(bean)κ³Ό κ·Έλ“€ κ°„μ˜ μ˜μ‘΄μ„±μ„ μ •μ˜ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 일반적으둜 XML 파일둜 μž‘μ„±λ˜κ±°λ‚˜, μ΅œκ·Όμ—λŠ” μžλ°” μ–΄λ…Έν…Œμ΄μ…˜μ„ μ΄μš©ν•˜μ—¬ μž‘μ„±λ˜κΈ°λ„ ν•©λ‹ˆλ‹€. μŠ€ν”„λ§ μ„€μ • 파일의 이름과 μœ„μΉ˜λŠ” 자유둭게 지정할 수 μžˆμ§€λ§Œ, 일반적으둜 applicationContext.xmlμ΄λΌλŠ” μ΄λ¦„μœΌλ‘œ src/main/resources 폴더에 μœ„μΉ˜μ‹œν‚΅λ‹ˆλ‹€.

applicationContext.xml νŒŒμΌμ„ μƒμ„±ν•˜κ³  μŠ€ν”„λ§ 빈과 κ·Έλ“€μ˜ μ˜μ‘΄μ„±μ„ μ„€μ •ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” κ°„λ‹¨ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="helloBean" class="com.example.HelloBean">
        <property name="name" value="John" />
    </bean>

</beans>

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” HelloBeanμ΄λΌλŠ” μŠ€ν”„λ§ λΉˆμ„ μƒμ„±ν•˜κ³ , nameμ΄λΌλŠ” ν”„λ‘œνΌν‹°μ— "John"μ΄λΌλŠ” 값을 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. ν•„μš”μ— 따라 μŠ€ν”„λ§ 빈과 κ·Έλ“€μ˜ μ˜μ‘΄μ„±μ„ 더 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5.3. μ‹€ν–‰ 예제

μŠ€ν”„λ§ ν”„λ‘œμ νŠΈμ˜ μΆ”κ°€ 섀정이 μ™„λ£Œλ˜λ©΄ κ°„λ‹¨ν•œ μ‹€ν–‰ 예제λ₯Ό λ§Œλ“€μ–΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. μ‹€ν–‰ μ˜ˆμ œλŠ” μŠ€ν”„λ§ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μŠ€ν”„λ§ λΉˆμ„ 가져와 μ‚¬μš©ν•˜λŠ” κ°„λ‹¨ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€. 예제λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같이 App.java νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.example.HelloBean;

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        HelloBean helloBean = (HelloBean) context.getBean("helloBean");
        System.out.println(helloBean.sayHello());
    }
}

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” applicationContext.xml νŒŒμΌμ„ λ‘œλ“œν•˜μ—¬ μŠ€ν”„λ§ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 그리고 helloBeanμ΄λΌλŠ” μ΄λ¦„μ˜ μŠ€ν”„λ§ λΉˆμ„ 가져와 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ κ²°κ³Όλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

이제 예제λ₯Ό 싀행해보면 Hello, John! μ΄λΌλŠ” λ©”μ‹œμ§€κ°€ 좜λ ₯될 κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” HelloBean이 "John"μ΄λΌλŠ” 값을 가진 name ν”„λ‘œνΌν‹°λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” Maven을 μ‚¬μš©ν•˜λŠ” 경우, Maven을 μ΄μš©ν•˜μ—¬ 예제λ₯Ό μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ 예제λ₯Ό μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€:

mvn compile
mvn exec:java -Dexec.mainClass="com.example.App"

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜ ν›„ μΆ”κ°€ μ„€μ • 및 μ‹€ν–‰ μ˜ˆμ œμ— λŒ€ν•œ λ‚΄μš©μ„ μƒμ„Ένžˆ μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ°Έκ³ ν•˜μ—¬ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ›ν™œν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€