코드 종속성은 악마입니다.

“헤라클레이토스(철학자)

오늘날 웹 응용 프로그램을 구축하는 데 사용하는 도구,라이브러리 및 프레임 워크는 불과 몇 년 전에 사용한 도구와 크게 다릅니다.

지금부터 몇 년 후,이러한 기술의 대부분은 다시 극적으로 변화 할 것이다. 그러나 우리 중 많은 사람들이 이러한 우리의 애플 리케이션의 중앙,불가분의 일부를 확인합니다.

우리는 그 달의 풍미있는 프레임 워크를 가져 와서 사용하고 상속합니다. 글쎄… 그리고 그것은 문제입니다.

20 년 이상의 웹 응용 프로그램을 개발,설계 및 설계 한 후 두 가지 중요한 진실을 알게되었습니다:

  1. 외부 종속성은 모든 응용 프로그램의 장기적인 안정성과 실행 가능성에 큰 위협이됩니다.
  2. 외부 종속성을 활용하지 않고 모든 종류의 사소한 앱을 구축하는 것이 점점 더 어려워지고 있습니다.

이 문서는 우리의 애플 리케이션이 장기 생존의 가장 큰 기회를 가질 수 있도록이 두 진리를 화해에 관한 것입니다.

토끼 구멍은 참으로 매우 깊다.

웹 앱이 의존하는 모든 것을 생각하기 시작하면 코드에 도달하기 전에 수십 개 이상을 쉽게 생각할 수 있습니다:6283>

  • 가상화 플랫폼
  • 가상화 플랫폼
  • 가상화 플랫폼
  • 가상화 플랫폼
  • 가상화 플랫폼
  • 가상화 플랫폼
  • 가상화 플랫폼
  • 웹서버 플랫폼
  • 앱서버 플랫폼
  • 웹브라우저
  • 개발자로서 이러한 것들을 잘 알고 있는 것은 좋지만,우리가 할 수 있는 일은 별로 없다. 그래서,지금은 그들을 무시하고 코드에 대해서만 이야기합시다.

    코드에는

    1 의 세 가지 종류의 종속성이 있습니다. 우리가 제어하는 종속성

    이것은 우리 또는 우리 조직이 작성하고 소유 한 코드입니다.

    2. 종속성 우리는 제어하지 않습니다

    이것은 타사 공급 업체 또는 오픈 소스 소프트웨어 커뮤니티에서 작성한 코드입니다.

    3. 일단 제거 된 종속성

    이들은 타사 코드 종속성이 의존하는 코드 종속성입니다. (3 배 빠른 것을 말하십시오!

    우리는 주로 우리가 통제하지 않는 의존성에 대해 이야기 할 것입니다.

    우리가 제어하는 종속성과 일단 제거 된 종속성은 여전히 두통을 유발할 수 있지만,우리가 제어하는 종속성의 경우 문제를 직접 개입하고 완화 할 수 있어야합니다.

    일단 제거 된 종속성의 경우,우리는 일반적으로 제 3 자에게 의존하여 우리를 돌볼 수 있습니다.

    타사 코드 종속성이 좋은 이유

    웹 응용 프로그램의 대부분은 일반적인 문제를 해결하기 위해 존재합니다: 인증,권한 부여,데이터 액세스,오류 처리,탐색,로깅,암호화,항목 목록 표시,양식 입력 유효성 검사 등..

    어떤 기술 스택을 사용하든 관계없이 이러한 문제에 대한 일반적인 솔루션이 존재할 가능성이 높으며 코드베이스에 쉽게 획득하고 플러그 인 할 수있는 라이브러리로 사용할 수 있습니다. 이 물건을 처음부터 완전히 쓰는 것은 일반적으로 시간 낭비입니다.

    흔하지 않은 문제를 해결하거나 흔하지 않은 방법으로 일반적인 문제를 해결하는 코드에 집중하려고 합니다. 즉,앱에만 고유한 비즈니스 규칙을 구현하는 코드인”비밀 소스”입니다.”

    구글의 검색 및 페이지 순위 알고리즘,페이스 북의 타임 라인 필터링,넷플릭스의 섹션 및 데이터 압축 알고리즘”당신을 위해 추천”—이러한 모든 기능의 뒤에 코드는”비밀 소스입니다..”

    라이브러리 형태의 타사 코드를 사용하면 앱의 상품화 된 기능을 신속하게 구현할 수 있으므로”비밀 소스에 집중할 수 있습니다.”

    왜 타사 코드 종속성이 나쁜

    지난 몇 년 동안 구축 된 사소한 웹 응용 프로그램을 살펴보고 실제로 타사 라이브러리에서 오는 코드의 양에 의해 절대적으로 놀라게 될 것입니다. 이러한 타사 라이브러리 중 하나 이상이 크게 변경되거나 사라지거나 중단되면 어떻게 될까요?

    그것이 오픈 소스라면,아마도 당신은 그것을 스스로 고칠 수 있습니다. 그러나 당신이 소유하지 않은 라이브러리의 모든 코드를 얼마나 잘 이해합니까? 애초에 라이브러리를 사용하는 큰 이유는 모든 세부 사항에 대해 걱정할 필요없이 코드의 이점을 얻는 것입니다. 하지만 지금 당신은 붙어 있습니다. 당신은 당신이 소유하지 않고 통제하지 않는 이러한 의존성에 당신의 재산을 완전히 묶었습니다.

    걱정하지 마세요,이 기사의 끝에,당신은 새로운 희망을 찾을 수 있습니다.

    아마도 당신은 내가 과장하거나 순전히 학문적 관점에서 말하고 있다고 생각할 것입니다. 내가 당신을 확신하자-나는 완전히 자신의 응용 프로그램에 너무 단단히 타사 코드를 삽입하여 자신을 스누커 클라이언트의 예제 수십 있습니다. 최근 한 가지 예가 있습니다…

    내 전 클라이언트는 구문 분석이라는 페이스 북이 소유 한 백엔드 서비스 제공 업체를 사용하여 앱을 구축했습니다.. 그들은 구문 분석 서비스를 소비하는 구문 분석에서 제공하는 자바 스크립트 클라이언트 라이브러리를 사용했다. 이 과정에서 그들은”비밀 소스”코드를 포함한 모든 코드를이 라이브러리에 단단히 결합했습니다.

    3 개월 내 고객의 초기 제품 출시 후—그들은 실제 좋은 견인을 얻기 시작하는 것처럼,지불 고객—구문 분석은 종료 된 발표.

    이제 제품을 반복하고 고객 기반을 늘리는 데 집중하는 대신,내 고객은 자체 호스팅 된 오픈 소스 버전의 구문 분석으로 마이그레이션하거나 구문 분석을 완전히 대체하는 방법을 파악해야했습니다.

    이 젊은,신생 응용 프로그램에 대한 발생 중단은 내 클라이언트가 결국 완전히 응용 프로그램을 폐기 너무 거대했다.

    좋은 것과 나쁜 것의 균형

    몇 년 전,타사 라이브러리의 이점을 유지하면서 위험을 극복하기위한 내 이동-에 솔루션은 어댑터 패턴을 사용하여 래핑하는 것이 었습니다.

    기본적으로 타사 코드를 작성한 어댑터 클래스 또는 모듈로 래핑합니다. 이렇게 하면 사용자가 제어하는 방식으로 타사 라이브러리의 기능을 노출할 수 있습니다.

    이 패턴을 사용하면 타사 라이브러리 또는 프레임 워크가 변경되거나 사라지면 약간의 어댑터 코드 만 수정하면됩니다. 나머지 앱은 그대로 유지됩니다.

    어댑터 패턴 다이어그램 Dofactory.com

    이 종이에 좋은 소리. 몇 가지 기능 만 제공하는 자체 포함 된 종속성이있는 경우 트릭을 수행합니다. 그러나 일이 빨리 추한 얻을 수 있습니다.

    사용하기 전에 전체 반응 라이브러리를 래핑해야한다고 상상할 수 있습니까? 자바의 랩핑 또는 각도 또는 스프링 프레임 워크는 어떻습니까? 이것은 빠르게 악몽이 된다.

    요즘 좀 더 미묘한 접근 방식을 권장합니다…

    코드베이스에 추가하려는 각 종속성에 대해 두 가지 요소를 곱하여 도입 할 위험 수준을 평가하십시오:

    1. 의존성이 중요한 방식으로 바뀔 가능성.
    2. 종속성에 대한 재료 변경이 응용 프로그램에 미치는 피해 금액입니다.

    다음 중 일부 또는 전부에 해당하는 경우 타사 라이브러리 또는 프레임워크를 변경할 가능성이 적습니다:

    • 그것은 몇 년 동안 주변되었습니다 몇 가지 주요 릴리스를했다.
    • 그것은 많은 상용 응용에 의해 널리 이용됩니다.
    • 그것은 큰 조직—가계 이름 회사 또는 기관의 적극적인 지원.

    타사 라이브러리 또는 프레임워크는 다음 중 일부 또는 전부에 해당하는 경우 응용 프로그램에 대한 손상을 줄입니다:

    • 그것은 단지 오히려 전반에 걸쳐 사용되는 것보다,응용 프로그램의 작은 부분에 의해 사용됩니다.
    • 그것에 의존하는 코드는 앞서 말한”비밀 소스”의 일부가 아닙니다.
    • 이를 제거하려면 코드베이스를 최소한으로 변경해야합니다.
    • 전체 응용 프로그램이 매우 작아서 빠르게 다시 작성할 수 있습니다. (이 하나 조심-그것은 매우 오랫동안 거의 사실이 아니다.)

    더 위험한 무언가 이다,더 할 것 같다 너는 그것을 감싸나 전부 기피한것을 이 일 것인다.

    응용 프로그램의 가치 제안(“비밀 소스”)의 핵심 인 코드에 관해서는 매우 보호해야합니다. 이 코드를 가능한 한 독립적으로 만드십시오. 종속성을 절대적으로 사용해야 하는 경우 종속성을 직접 참조하는 대신 종속성을 주입하는 것이 좋습니다. 그렇다하더라도,조심.

    때때로 이것은 당신이 정말로 멋지다고 생각하는 타사 라이브러리에”아니오”라고 말하거나 한 가지 이유 또는 다른 이유로 사용하기를 원한다는 것을 의미합니다. 강해. 날 믿어,그것은 갚을 것이다. 그냥 모든 곳에서 구문 분석을 사용 각도,또는 내 전 클라이언트의 첫 번째 릴리스에 많이 투자 한 모든 사람들을 부탁드립니다. 재미 없어. 날 믿어.

    재미라고 말하면,이것 좀 봐…

    주석 태그 탐색기의 종속성 그래프

    위 이미지는 주석 태그 탐색기라는 응용 프로그램의 종속성 그래프입니다.

    기존 앱에 대한 종속성 그래프를 생성하는 것은 종속성에 의해 도입되는 위험 수준을 이해하는 좋은 방법입니다. 나는 자바 스크립트를 포함한 다양한 언어로 위와 유사한 그래프를 생성하기위한 무료 도구 목록을 작성했습니다. 여기에서 얻을 수 있습니다.

    다른 사람들을 도와줘

    나는 내 지식과 경험을 그들과 공유함으로써 최대한 많은 개발자들을 돕고 싶다. 아래의 추천 버튼(녹색 심장)을 클릭하여 도와주세요.

    마지막으로 여기에서 자유 의존성 그래프 생성기 목록을 가져 오는 것을 잊지 마십시오.

    답글 남기기

    이메일 주소는 공개되지 않습니다.