이번 프로젝트는 스프링 프레임워크를 사용한다. 파이썬쟁이가 무슨 자프링인가 싶겠지만, 이번에 이 프레임워크를 고른 건 여러 복잡한 이유가 있다.
그중에도 가장 중요한걸 뽑자면 취업 문제와 더 깊이있는 커뮤니티 때문이다.
첫째로 취업문제는 아무래도 코로나부터 경기불황까지 겹쳐 파이썬 백엔드는 설 자리가 부족한것 같아서 자바를 해야한다고 생각했다. (나중에 어찌될지 모르지만 신입은 이게 맞는것 같기도..)
둘째는 나는 프로젝트 구조를 작성하는 방법, 다른 프레임워크에서 코딩하는 방법, 다른 개발자들이 어떻게 생각하는지가 궁금했고 여러 언어 중에서 가장 큰 커뮤니티는 당연히 자프링이기 때문이다.
이번에 자프링을 처음 하는것이 아니다. 물론 자프링으로 내세울 프로젝트를 해본건 없지만 그래도 인프런의 영한쌤의 강의를 좀 봤던 경험이 있다.
대략적인 흐름정도는 알고 있고, 이번에 개발하면서 파이썬과 비교도 할 수 있을 것 같고 재미있는 경험이 될 것이다.
## Gradle이 모듈을 찾는 방법
처음 자바 프로그래밍을 할때는 종속성, 모듈 이런 것을 전혀 신경쓰지 않고 코딩했다. 어떻게 돌아가는 건지, 이게 뭔지 모르고 그냥 그런가 보다~ 하는 식이 대부분이였던 것 같다.
하지만 node와 python을 경험해보고 다시 돌아보면 이 모듈은 어디서 오는거지? 라는 궁금증을 참을 수 없었다.
그래서 찾아봤다.
Gradle의 공식문서에서 이런 글을 찾을 수 있었다.
How does Gradle know where to find the files for external dependencies? Gradle looks for them in a repository. A repository is a collection of modules, organized by group, name and version. Gradle understands different repository types, such as Maven and Ivy, and supports various ways of accessing the repository via HTTP or other protocols.
By default, Gradle does not define any repositories. You need to define at least one with the help of Project.repositories{} before you can use module dependencies.
Gradle은 레포지토리에서 모듈을 가져오는데, 이 레포지토리는 다양하게 있다.
내가 사용하고 싶은 레포지토리는 build.gradle 파일에 명시해야 한다고 나와있다.
여기서 pip나 npm처럼 기본 레포지토리가 있을 줄 알았는데 그건 아닌가보다. (IDE를 쓰면 실제로 직접 작성하는 일은 없겠지만 좀 불편하다)
## 종속성 구분에 대해서
나는 start.spring.io에서 프로젝트 폴더를 생성했는데, 아래의 종속성이 무슨뜻인지 정확히 알지 못했다. (사실 어느정도는 알지만 더 명확히 알고 싶었다)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.h2database:h2'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
그래서 좀 찾아보았는데 이것은 모듈을 어떤 컴파일 / 런타임 시간에 종속시키는지 구분하기 위한 것이였다.
implementation은 모든 상황에서 모듈을 종속시키는 것이고, compileOnly는 컴파일 시간에만 (이게 좀 이상할 수 있는데 자바는 Lombok같이 컴파일 시간에만 필요한 모듈이 있다) runtimeOnly는 런타임에만 모듈을 종속시킨다.
testXxx도 크게 다를건 없다.
'프로그래밍 > A music in a balloon' 카테고리의 다른 글
# 10 스프링 예외처리 (1) | 2024.06.06 |
---|---|
# 9 프로젝트 수정 (0) | 2024.06.06 |
# 8 깃허브 엑션 테스트 적용기 (0) | 2024.06.05 |
# 7 LazyInitializationException을 보았다! (0) | 2024.06.04 |
# 5 게스트 구현 (0) | 2024.05.31 |