CodeGym/Java Course/๋ชจ๋“ˆ 3/๋ฉ”์ด๋ธ ํ”Œ๋Ÿฌ๊ทธ์ธ

๋ฉ”์ด๋ธ ํ”Œ๋Ÿฌ๊ทธ์ธ

์‚ฌ์šฉ ๊ฐ€๋Šฅ

6.1 ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ๊ฐœ

ํ‘œ์ค€ ๋ผ์ดํ”„์‚ฌ์ดํด์€ Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์œผ๋กœ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ‘œ์ค€ ์ฃผ๊ธฐ(์˜ˆ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ๋ฐฐํฌ)์— ์ƒˆ ๋‹จ๊ณ„๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋‹จ๊ณ„๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Maven์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํŠน๋ณ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋Œ€๋กœ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด๊ณ  ์ž์ฃผ ์ ‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์˜ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด pom.xml์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ "ํ”Œ๋Ÿฌ๊ทธ์ธ"์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ข…์†์„ฑ๋งŒํผ์ด๋‚˜ ์•„ํ‹ฐํŒฉํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์„น์…˜ ๋Œ€์‹  ํ”Œ๋Ÿฌ๊ทธ์ธ, ์ข…์†์„ฑ ๋Œ€์‹  ํ”Œ๋Ÿฌ๊ทธ์ธ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋Œ€์‹  ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ - ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ.

์˜ˆ:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>2.6</version>
    </plugin>
</plugins>

pom.xml์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ ์–ธํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „์„ ์ˆ˜์ •ํ•˜๊ณ  ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‹จ๊ณ„์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, Maven์€ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋กœ์ ํŠธ์˜ ํŠน์ˆ˜ ๋นŒ๋“œ์— ๋Œ€ํ•ด Maven์„ ๊ฐ€๋ฅด์น˜๋ ค๋ฉด pom.xml์— ํ•„์š”ํ•œ ๋‹จ๊ณ„์—์„œ ํ•„์š”ํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‹œ์ž‘ํ•˜๋ผ๋Š” ํ‘œ์‹œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ˆ˜๋Š” ๋งค์šฐ ๋งŽ์Šต๋‹ˆ๋‹ค. maven์—์„œ ์ง์ ‘ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ ๊ฐœ๋ฐœ์ž์˜ ์ฃผ์š” ์ž„๋ฌด๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ธํŠธ๋ฅผ ์ฐพ์•„ ์ ์šฉํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค .

6.2 ๋ผ์ดํ”„ ์‚ฌ์ดํด๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ

๋งค์šฐ ์ž์ฃผ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํŠน์ • ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ์ผ์ข…์˜ ์ฝ˜์†” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ๋ฐ˜ Java ํด๋ž˜์Šค(๋ฌผ๋ก  ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Œ)๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.example.Main</mainClass>
    <arguments>
      <argument>first-argument</argument>
      <argument>second-argument</argument>
    </arguments>
  </configuration>
</plugin>

์ผ๋ฐ˜์ ์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋งค์šฐ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Maven ๊ฐœ๋ฐœ์ž์˜ ๋ชจ๋“  ๊ณต์‹ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ณต์‹ Maven ์›น ์‚ฌ์ดํŠธ์— ๋งค์šฐ ์ž˜ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Apache Maven ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€์˜ maven-compiler-plugin ์˜ ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ชจ๋“  ๋ณ€์ˆ˜ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ์ค‘์š”ํ•œ ์ •๋ณด. ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ˆ˜๋ช… ์ฃผ๊ธฐ์˜ ๋‹ค๋ฅธ ๋‹จ๊ณ„์—์„œ Maven์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šค์œ™ Java ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๋ช…ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(war) ๊ฐœ๋ฐœ์— ์ผ๋ฐ˜์ ์ธ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅธ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋‹จ๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋˜๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด "mvn test" ๋ช…๋ น์ด ์‹คํ–‰๋˜๋ฉด ํ”„๋กœ์ ํŠธ ์ˆ˜๋ช… ์ฃผ๊ธฐ์˜ ์ „์ฒด ๋‹จ๊ณ„๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. "process-resources", "compile", "process-classes", "process-test" -์ž์›โ€, โ€œํ…Œ์ŠคํŠธ-์ปดํŒŒ์ผโ€, ํ…Œ์ŠคํŠธ. Maven์ด ํ‘œ์‹œํ•˜๋Š” ๋ฉ”์‹œ์ง€์—์„œ ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์–ธ๊ธ‰์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[INFO] Scanning for projects...
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources)     @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile)      @ codegym
[INFO] --- maven-resources-plugin:2.6:testResources         (default-testResources) @ codegym ---
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile)          @ codegym ---
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test)         @ codegym ---
[INFO] Surefire report directory:           t:\ projects\codegym\target\surefire-reports

6.3 Maven์˜ ๋ชฉํ‘œ - ๋ชฉํ‘œ

๋ฉ”์ด๋ธ์—๋Š” ๋ชฉํ‘œ(goal)๋ผ๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค. goal์€ Maven ์‹œ์ž‘ ๋Œ€์ƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉํ‘œ๋Š” ์ฃผ์š” ๋‹จ๊ณ„์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  • ํ™•์ธ;
  • ์—ฎ๋‹ค;
  • ์‹œํ—˜;
  • ํŒจํ‚ค์ง€;
  • ํ™•์ธํ•˜๋‹ค;
  • ์„ค์น˜ํ•˜๋‹ค;
  • ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ˆ˜๋ช… ์ฃผ๊ธฐ์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ์—ฌ๋Ÿฌ ๋ชฉํ‘œ(๋ชฉํ‘œ)๋ฅผ ํฌํ•จํ•˜๋Š” ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ(jar-library)์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "maven-compiler-plugin" ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•œ compiler:compile๊ณผ ํ…Œ์ŠคํŠธ ์ปดํŒŒ์ผ์„ ์œ„ํ•œ compiler:testCompile์˜ ๋‘ ๋Œ€์ƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ณต์‹์ ์œผ๋กœ ๋‹จ๊ณ„ ๋ชฉ๋ก์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ๋‹จ๊ณ„์—์„œ ์ผ๋ถ€ ๋น„ํ‘œ์ค€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ pom.xml์— ์ ์ ˆํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>Name-plugin</artifactId>
  <executions>
    <execution>
      <id>customTask</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>pluginGoal</goal>
      </goals>
    </execution>
  </executions>
</plugin>

์ด ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ "goal"์˜ ๋ชฉํ‘œ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” "์‹คํ–‰/๋‹จ๊ณ„" ๋‹จ๊ณ„์˜ ์ด๋ฆ„์„ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•ด ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด xml์„ ๊ธฐ๋ฐ˜์œผ๋กœ Java ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ "generate-sources" ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋ฐฐ์น˜๋˜๋ฉฐ ํ”„๋กœ์ ํŠธ ์†Œ์Šค์˜ ์ผ๋ถ€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค