모든 내용은 아직 초보인 제가 스스로 학습하며 알게된 정보와 그에 대한 제 견해가 섞여있기 때문에 공식적이거나 정확한 정보가 아닙니다. 부족한 부분이 있다면 날카로운 지적들 주시면 감사하겠습니다 :)
스프링 부트를 이용한 프로젝트를 이것 저것 작게 해왔지만 한 번도 패키지명에 대해 고민해본 적이 없었다. 최근 RESTful API 서버를 만들기 위해 깊이 있는 공부를 결심하고 처음으로 만난 질문은 바로 패키지명이었다.
Group 은 뭐고 Artifact 는 뭐고 왜 Artifact 를 치면 Name 도 같이 입력되는 건데요...
chatGPT 에게 어떻게 스프링 부트 프로젝트 패키지명을 짜야 소문이 나냐고 물어보니 다음처럼 답한다.
네이버는 naver.com, 구글은 google.com 과 같이 회사마다 도메인을 갖고 있다. 이걸 역순으로 표현한 거라고 우선 생각해두면 된다. 그러면 네이버는 com.naver, 구글은 com.google 이 될테니 Spring.io 가 주는 com.example 이 어떤 모형을 기반으로 만들어진 것인지 알 수 있다.
하나의 프로젝트에 많은 구성 요소들이 포함되어 있을 것이다. naver.com 이란 도메인명 하나로 네이버의 지식인, 뉴스, 쇼핑과 기타 여러 서비스들이 모두 표현되지 않는 것처럼 말이다.
이렇게 더 세부적으로 들어가기 위해 역순으로 작성하는 것이다. 예를 들면, com.naver.shopping, com.naver.dictionary 와 같이 말이다. 저기서도 분명 더 세부적으로 나뉠 것이다. 이러한 구조를 편리하게 갖추도록 역순으로 작성한 것이다.
하지만 세계에 shopping 이란 이름의 프로젝트를 짓는 곳이 과연 naver 한 곳 뿐이란 말인가? 아니다. kakao 도 있을 것이다. 그렇다면 com.kakao.shopping 이 될 것이다. 그럼 둘은 앞선 패키지명 중 앞서 있는 패키지인 naver 와 kakao 로 구분된다. 따라서 두 shopping 모두 서로 다른 녀석들이지만 동시에 존재할 수 있게 된다.
바로 Reverse 구조 덕분에 말이다!
회사명을 말한다. 말 그대로 어떤 그룹에서 이 프로젝트를 만들고 있느냐를 묻는 지점. 앞에서 본 naver, kakao, google 을 생각하면 된다.
내가 만드는 토이 프로젝트의 경우에는 회사에 소속되어 만드는 것이 아니기 때문에 그냥 공란으로 두었다. 상관 없다.
내가 빌드할 프로젝트의 결과물의 이름이다. 내가 todolist 를 만들면 todolist 가 될 것이며, 주문 시스템을 만들 것이면 order 로 지을 수 있겠다.
Optional 한 부분이다. 기본적으로 Artifact 를 입력할 때 함께 입력된다. Artifact 가 곧 프로젝트의 이름이기 때문에 함께 입력되지만, 함께 입력된 부분 뒤에 뭔가를 더 적으면 적히기는 한다. Artifact 가 공식적 이름, Name 은 비공식적 이름으로 생각하면 될 것 같다.
위의 필수적인 이름들과 함께 전체 패키지명이 결정되는 것이다. 각 속성들을 종합해서 com.naver.shopping 과 같이 말이다!
그동안 아무 생각없이 따라 치기만 하면서 말 그대로 '클론 코딩'을 해왔던 나를 돌아보며 이제는 벗어나려 한다. 나에게 무수히 많은 질문을 던지며 스스로 답하기 위해 꿈틀대려 한다!