쉬운·기술사전비유로 이해하는 AI·개발 용어
더 알아보기

의존성 / 패키지

Dependency / Package

오픈 소스 덕분에 앱을 처음부터 다시 만들 필요가 없어요.

의존성 / 패키지 개념 다이어그램

오픈 소스가 있기에 좋아하는 앱들은 처음부터 만들어지지 않아요. 다른 사람들이 이미 만들어 둔 무료 조각들을 이어붙인 결과물이에요. 그 조각들에는 이름이 있고, 지금 이 순간에도 어떤 프로젝트는 그런 조각 수십 개에 기대고 있어요.

의존성(dependency)이란 정확히 그것이에요. 프로젝트가 직접 짜는 대신 가져다 쓰는, 남이 미리 만들어 둔 코드 덩어리예요. 그걸 쉽게 가져다 쓸 수 있도록 묶어 놓은 것을 패키지(package)라 부르는데, 프로젝트가 그것에 '의존한다'는 뜻에서 붙은 이름이에요.

마트 파이 크러스트. 파이를 만든다고 해 볼게요. 직접 밀가루를 빻아 크러스트를 만들 수도 있지만, 이미 완성도 높게 만들어진 크러스트를 사고 에너지는 진짜 내 것인 속 재료에 쏟는 쪽이 낫죠. 그 마트 크러스트가 바로 의존성이에요. 내 파이는 그것에 기대는 거예요. 내가 만든 게 아니지만, 밀을 직접 키우지 않았다고 누구도 뭐라 하지 않아요.

모든 프로젝트가 이렇게 하는 이유 — 게으름이 아니라 합리성이에요. 날짜 처리, 결제 처리, 파일 파싱, 캘린더 그리기처럼 지루하고 어렵지만 이미 풀린 문제들은 누군가가 수년에 걸쳐 만들고 테스트하고 다듬어 놓았어요. 오픈 소스가 제 역할을 하는 거예요. 직접 다시 짜면 더 느리고 더 허술해져요. 그래서 패키지를 가져다 쓰고, 진짜 내 것인 부분에 집중하는 거예요.

실제로 어디서 보이냐면: package.json이라는 파일이 쇼핑 목록이에요. 프로젝트에 필요한 모든 차용 조각들이 이름과 버전으로 적혀 있거든요. "의존성 설치", 즉 npm install은 그냥 목록에 있는 것들을 다 가져다 팬트리를 채워라는 뜻이에요. 에이전트는 프로젝트를 세팅하는 순간마다 이 작업을 자동으로 실행해요.

솔직히 짚어야 할 두 가지 — 조용히 문제가 생기는 곳이기도 해요.

  1. 의존성에도 의존성이 있어요. 내 파이 크러스트도 누군가의 밀가루로, 그 밀가루도 누군가의 비료로 만들어졌어요. 작은 프로젝트 하나가 본인도 모르게 수백 개의 패키지를 딸려 불러올 수 있고, 대부분 처음 들어본 것들이에요. 그 탑은 대부분 잘 버티지만, 깊은 곳의 벽돌 하나가 망가지거나 고의로 오염되면 무너져요. 공개 코드에서 키를 훔치는 봇 이야기를 들어봤다면, 공급망에 몰래 끼어든 오염 패키지도 그 사촌쯤 돼요. 이런 문이 존재한다는 건 알아 두는 게 좋아요.

  2. 버전이 중요해요. 작년에 산 크러스트와 올해 것은 레시피가 살짝 다를 수 있어요. 쓰는 버전을 고정해 두지 않으면, 무심코 한 "업데이트"가 전체 파이 맛을 조용히 바꿔 놓을 수 있거든요.

개발자가 아닌 사람이 이걸 알아야 하는 이유는, '만든다'는 것이 무엇인지를 다시 보게 해 주기 때문이에요. 원목을 조각해 모든 부품을 깎는 게 아니에요. 좋은 기성 부품을 골라 잘 조립하는 거예요. 그러니 에이전트가 "이건 패키지 하나 추가하면 돼요"라고 할 때, 지름길을 택하는 게 아니에요. 현대 소프트웨어가 만들어지는 방식 그 자체예요.

의존성은 마트에서 산 파이 크러스트예요. 내가 만든 게 아니고, 내 프로젝트는 그것에 기대요. 반칙이 아니에요. 그 덕에 속 재료에 집중할 수 있는 거예요.