YOUNG-JIN.OH
웃어라. 온 세상이 너와 함께 웃을 것이다.
울어라. 너 혼자만 울게 될 것이다.

Dependency, Repository

이전 게시물처럼 Project 를 생성할 때 Spring Initializr의 “Gradle Project” Type으로 지정한 경우에는 build.gradle 이라는 파일이 만들어 집니다. Gradle 이외에도 Maven이라는 Type이 있어서 비슷한 기능을 제공하는데 저는 Gradle 을 선호합니다. 아뭏든 build.gradle 을 열어보면 현재 Spring Boot 버전이 2.1.2 이고 java plugin 이 적용되어 있으며 repositories, dependencies 등의 내용이 있는데요.

여기서 포인트는 Dependency, Repository 입니다. 번역하면 “의존관계”, “저장소” 정도의 뜻인데 아주 중요한 개념입니다.

우리는 태어나서 혼자 살아갈 수 없고 다른 사람들과 어울려서 살아가야 합니다. 우리 문명은 이전 세대에서 이룩해놓은 성과물을 가지고 고도화 되면서 진화를 하고 있습니다. 단순히 생물학적인 진화가 아니라 과학, 지식등 경험의 축적을 말합니다. 이렇게 복잡하게 연결되어 있는 생태계에서 이미 만들어진 결과물이 마음에 안들어 새롭게 만들 수도 있겠지만, 별다른 문제가 없다면 재사용해서 시간을 절약하면 내가 다른 작업에 시간을 더 투자할 수 있게 됩니다. 그러나 생태계 일부에 어떤 문제가 생기면 그 여파는 전체적으로 퍼지는 문제가 발생할 수 있는 것도 사실이죠.

Dependency는 어떤 지식(코드)을 기반으로 뭔가를 만들었다면 의존관계가 성립하게 되었다는 것입니다. Repository는 우리가 만든 지식(코드)이 모여있는 저장소 입니다. 그런데 이걸 가져다 쓰는 것도 노하우(Knowhow)가 필요한데, 그러한 기술을 제공하는 것이 Gradle 또는 Maven 이라는 것이고, Spring 이라는 Framework에 특화된 Dependency를 지원해 주는 것이 Spring Boot 입니다.

Java 언어의 Repository로는 대표적으로 Maven Repository가 있습니다. Javascript는 경우에는 npmjs, Python의 경우에는 PyPI 가 같은 역할을 합니다. Java의 Gradle, Maven 과 비슷한 것이 Javascript 에는 npm, yarn 이 있고 Python에는 pip 라는 것으로 관리를 합니다.

앞서 MacOS나 Ubuntu 운영체제에서 패키지 관리자를 사용하던 것도 비슷합니다. 참고로, CentOS Linux 는 yum 이라는 패키지 관리자를 씁니다. 어떤 프로그램을 받게 되면 의존관계에 있는 다른 프로그램도 같이 설치가 되죠? 여기서 말한 코드는 대부분 바이너리(Binary) 패키지, 라이브러리나 프레임워크를 의미하는 것인데 소스(Source) 코드의 생태계로 유명한 것은 깃허브(GitHub) 가 있습니다. 결국 프로그래밍 언어나 운영체제 환경 등이 달라서 이름은 다르게 부르지만 모두 같은 개념입니다.

각 언어마다 대표적으로 사용하는 라이브러리 또는 프레임워크가 있는데, Java에서는 Spring이 가장 유명합니다. 그래서 저는 Java로 프로젝트를 만들 때는 Spring Boot를 기반으로 작업을 시작합니다. 이렇게 좋은 환경에서 개발할 수 있도록 수 많은 시행착오와 시간을 들여 좋은 프로그램/코드등을 만들어주신 선배, 동료 개발자분들에게 무한한 존경심과 감사의 마음을 드립니다.

이미지 출처: Photo by Samuel Zeller on Unsplash

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.