어제는 TIL로 쓸만한 것이 크게 없었다. 귀찮은 것도 있었지만, 어제는 주간 과제를 하지 않고 알고리즘 문제 푸는 데만 시간을 거의 다 썼었다. 난이도가 어려운 - 머리를 막 써야 하는 - 건 아니었는데 Kotlin 문법에 익숙하지 않아 써내려가는 속도가 좀 느렸다. 그렇게 50개를 풀고 나니 저녁이 되어 있었다.
오늘 2시까지였던 과제를 모두 마무리하고 - 기초과제는 readme.md까지 거의 확실하게 끝내 놨는데 거기에 신경을 쓴 나머지 심화과제 쪽을 크게 살펴보지 못했다. 그래서 readme.md 작성은 못 하고 코드만 올려서 제출했다 - 과제 해설 후에 있던 튜터 세션에 들어갔는데, 어제부터 고민하던 문제가 어느정도 가닥이 잡혀 이렇게 써보고자 한다.
…
왜 프로젝트명이 패키지명에 안 붙지
상황

Spring initializr의 프로젝트 설정 화면 중 일부이다. 밑의 Project Metadata르 보면 채워넣을 이름들이 여럿 보이는데, 여기서 Package name을 보면 Group ID와 Artifact ID가 합쳐져있는 걸 볼 수 있다. 프로젝트를 생성해서 다운받아 열어보면 패키지 묶음도 그 이름에 맞게 설정된다.

IntelliJ IDEA에서 새 프로젝트를 만들 때도 고급 설정에서 Group ID와 Artifact ID를 설정할 수 있다. 하지만 여기선 패키지명을 만들 때 Artifact ID를 포함시키지 않는다. 예를 들어, Group ID를 spartacodingclub.nbcamp.kotlinspring.assignment라고 하고 Artifact ID를 Calculator라고 정한 뒤 프로젝트 생성을 하면, 패키지명은 spartacodingclub.nbcamp.kotlinspring.assignment로 Group ID를 그대로 따라가게 된다. 같은 Group ID를 쓰는 복수의 프로젝트가 있을 경우 이런 상황에서 패키지명만 보고 혼란이 생길 것 같았다.
해결책(?)
그래서 이 프로젝트명을 패키지명에 붙이고 싶어 방안들을 고민해봤는데, IntelliJ IDEA에서
- 새 프로젝트를 만들 때 그냥
GroupID 끝에 프로젝트 이름을 추가하자. - 일단 만들어놓고 패키지명을 일괄 수정하자.
- 그냥 쓰자.
-는 방안들이 생각났다. 신경이 쓰이는 탓에 선택한 옵션은 1번이었는데 - 2번은 찾는 게 일일 거 같단 튜터님의 답변을 받았다 - 사실 3번도 상관 없다고 한다. 그러니까 고민될 이유도 신경쓸 이유도 없이 그냥 쓰면 된다고 한다.
Spring Initializr Reference Guide - Getting Started - Advanced Options에선 Group, Artifact 등의 요소를 Apache Maven의 그것과 비슷하게 따라간다고 한다. [그 Apache Maven에서의 groupId, artifactId, version 네이밍 컨벤션]((https://maven.apache.org/guides/mini/guide-naming-conventions.html)을 보면
groupId: 프로젝트를 식별할 수 있는 이름.Java의 패키지 명명 규칙 - 뒤집힌 도메인명(example.com을com.example을 사용하는 식이다) - 을 따라야 한다(고 했는데should로must보단 그 강제성이 약하다).artifactId: 프로젝트 빌드 시 만들어지는.jar파일에 붙일 이름.
라고 적혀 있다. 워딩을 봤을 때도 이름을 정할 때 엄격함이 artifactId가 groupId보다 훨씬 덜한 느낌이다(“이상한 기호 없이 소문자로만 이어진 이름이면 어떤 거든 가능” v “Java의 패키지 명명 규칙을 반드시 따라야 함”). IntelliJ IDEA에서 새 프로젝트를 만들 땐 프로젝트 이름과 Artifact ID를 동일하게 만들어버리는데, Group ID를 좀 더 신경써서 짓고 - 기본 틀에 프로젝트명을 추가하는 잠깐의 시간을 더 투자해주고 - Artifact ID는 그냥 신경쓰지 않고 넘겨도 될 것 같다. 그러면 고민이 해결되지 않을까? 그리고 나중에 Spring Initializr를 쓸 때면 이런 고민도 필요가 없어진다. 그냥 Kotlin만 쓰는 프로젝트를 만드는 지금이 그럴 뿐이다.
결론: 패키지명에 프로젝트명이 안 들어가는 걸 굳이 신경쓸 필요는 없을 것 같지만 굳이 써야 하겠다면 잠깐 시간을 투자해서 Group ID에 프로젝트명을 붙여주자.