티스토리 뷰

Spring

To-Do 앱 만들어보기 - 의존성 설정

몰라모르겠어요 2022. 8. 15. 01:47

의존성 추가하기

spring boot 의존성과, lombok, test code를 위한 의존성을 추가해준다.

 

자 여기서 implementation, compileOnly 등이 나오는데 이것이 뭔지 알아보았다.

 

  • Classpath
    클래스나 jar 파일이 존재하는 위치
    • Compile-time classpath
      에러없이 컴파일을 하기 위해 필요한 클래스와 jar들의 위치
    • Run-time classpath
      애플리케이션이 정상적으로 실행하기 위해 필요한 클래스들과 jar들의 경로

위 두 path에 있는 jar들이 있어야 제대로 컴파일과 실행이 될 것이다.

 

 

위처럼 디펜던시가 나온다.

 

dependency configurations

compile -> implementation, api
testCompile -> testImplementation
debugCompile -> debugImplementation
provided -> compileOnly

gradle 3.0 이후 이렇게 변했다.

 

  • api와 implementation 차이
class A{
  public static void main(String[] args){
    B b = new B();
  }
}

class B {
  public int asdf() {
    return new C().sum();
  }
}

class C {
  public int sum(){
    return 5;
  }
}

위 코드를 보면 A -> B -> C 순서로 의존한다.
컴파일을 위해서는(컴파일 타임) A와 B에 대한 경로만 가지고 있으면 될 것이다.
그러나 런타임을 위해서는 C에 대한 정보도 가지고 있어야 할 것이다.
즉, A와 B에 대한 컴파일 타임 의존성을 가지고 있는 것이며, A,B,C에 대해 런타임 의존성을 가지고 있는 것이다.

만약, A가 Class.forName()으로 호출하는 경우에는 컴파일 시에는 B에 대한 정보가 필요하지 않으므로(컴파일 타임에서는 B의 존재를 모름), 컴파일 타임 의존성은 A인 것이고, 런타임 의존성은 A,B라고 볼 수 있다.

더보기

Class.forName() : 물리적인 클래스 파일명을 인자로 넣어주면 이에 해당하는 클래스를 반환해줍니다.

 

만약 B에 대한 디펜던시를 implementation으로 설정하게 되면 compile path에는 B만 들어가게 된다.

즉, 컴파일 타임에서 A를 정의한 이용자는 C를 알수가 없다. 그리고 C가 수정되었다고 하더라도 A를 다시 컴파일 할 필요가 없다. 오직 B만 컴파일하면 된다.

그런데 api로 설정하면 compile path에 C도 포함된다.

즉, 컴파일 타임에서 A를 정의한 이용자는 C를 알고 있는 상태이고, C가 수정이 돼서 재빌드 해야 되는 상황이 오며 A 또한 해주어야 한다.

 

  • compileOnly와 runtimeOnly 차이
    • compileOnly
      compileClass Path에만 추가하겠다.
    • runtimeOnly
      runtimeClass Path에만 추가하겠다.

compileOnly의 대표적인 예는 lombok이다. 컴파일 시에 getter, setter 등 필요한 것을 생성시키고, 런타임 때는 사용하지 않기 때문이다.
runtimeOnly는 DB관련이나 로그 관련 디펜던시를 주로 한다.

그냥 컴파일 때만, 런타임 때만 쓰는 것을 알아두고 설정해주면 되겠다.

 

 

https://bepoz-study-diary.tistory.com/372

 

[Spring] Gradle 파일 implementation, api, runtimeOnly, compileOnly... 등에 대해

Gradle 파일 implementation, api, runtimeOnly, compileOnly ... 등에 대해 아무 생각없이 gradle을 사용해왔는데 우테코 미션에 대한 리뷰 중 다음과 같은 것이 달렸다. 그래서 공부해보았다! 먼저, Classpath..

bepoz-study-diary.tistory.com

이렇게 하고 어플리케이션 실행시키면 실행된다.
당근 스프링 부트는 내장 톰캣이 있기 때문!

어플리케이션 직접 들어가서 실행 버튼 클릭하거나

gradle bootRun
./gradlew bootRun
gradlew bootRun

명령어 실행한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함