paint-brush
더 나은 엔지니어가 되는 방법: 강철 스레드~에 의해@jaderubick
1,171 판독값
1,171 판독값

더 나은 엔지니어가 되는 방법: 강철 스레드

~에 의해 Jade Rubick7m2023/03/17
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

강철 스레드는 설계 복잡성을 줄이고 통합 문제를 줄입니다.
featured image - 더 나은 엔지니어가 되는 방법: 강철 스레드
Jade Rubick HackerNoon profile picture

Steel Threads는 강력하지만 모호한 소프트웨어 설계 접근 방식입니다. Steel Threads에 대해 배우면 더 나은 엔지니어가 될 수 있습니다. 통합 문제와 같은 일반적인 문제를 방지하기 위해 이를 사용할 수 있습니다. 그리고 이를 사용하여 시스템 설계의 복잡성을 줄일 수 있습니다.

너무 모호하여 2013년 위키피디아에서 삭제되었습니다.

강철 스레드는 얼마나 알려지지 않았습니까? 이 개념은 2013년에 위키피디아에서 삭제되었습니다 . "이 아이디어는 소프트웨어 엔지니어링 내에서 주목할 만한 것이 아니며 주목할만한 소스로부터 상당한 보도를 받지 못했기 때문입니다." 적용 범위를 추가하고 이것이 왜 그렇게 유용한 접근 방식인지 이야기해 보겠습니다.

강철 스레드는 무엇입니까?

강철 스레드는 소프트웨어 시스템을 통과하는 매우 얇은 기능 조각입니다. 스레드는 소프트웨어 시스템의 다양한 부분을 엮고 중요한 사용 사례를 구현하기 때문에 "스레드"라고 불립니다.


실이 향후 개선을 위한 견고한 기반이 되기 때문에 이를 "강철"이라고 부릅니다.


Steel Thread 접근 방식을 사용하면 시스템 경계를 넘어 중요한 사용 사례를 포괄하는 가장 얇은 버전을 구축할 수 있습니다.

기존의 문제가 있는 접근 방식의 예

모놀리식 코드베이스의 일부를 대체하기 위해 새로운 서비스를 구축한다고 가정해 보겠습니다. 이를 수행하는 가장 일반적인 방법은 다음과 같습니다.


  1. 이전 코드를 살펴보고 새 시스템에 필요한 사항을 파악하세요.


  2. 필요한 기능을 제공하는 API를 설계하고 구축하세요.


  3. 이전 코드로 이동하여 새 API를 사용하도록 참조를 업데이트하세요. 기능 플래그 뒤에서 수행하십시오.

  4. 기능 플래그를 사용하여 잘라냅니다.


  5. 작동할 때까지 발생하는 모든 문제를 수정하고 필요한 경우 이전 코드 경로로 돌아가려면 기능 플래그를 끄세요.


  6. 안정되면 이전 코드 경로를 제거하십시오.


합리적으로 들리죠? 음, 이것이 소프트웨어 엔지니어가 작업하는 가장 일반적인 방식이지만 이 접근 방식에는 많은 지뢰가 있습니다.


이 프로젝트에서 어떤 문제가 발생할 것으로 예상됩니까?


  1. 기존 시스템과 분리된 방식으로 새로운 서비스를 구축하는 것이 매력적일 수 있습니다. 결국 디자인이 더 순수하게 느껴질 수도 있습니다. 그러나 훨씬 더 많은 구조적 변화도 도입하고 있으며 기존 시스템과의 통합 없이 이러한 변경을 수행하고 있습니다. 이로 인해 통합 문제가 크게 증가합니다. 내 기대는 프로젝트에 대한 모든 추정치가 비현실적이라는 것입니다. 그리고 그 결과로 나온 서비스의 디자인이 전반적으로 좋다 하더라도 프로젝트가 완료된 후에는 실패로 간주될 것으로 예상합니다.


  2. 새로운 시스템으로의 전환이 문제가 될 것으로 예상합니다. 전환할 때 이전 코드 경로로 다시 전환하거나 프로젝트의 마지막 단계에서 문제를 해결하기 위해 집중적으로 작업해야 하는 일련의 문제가 발견될 것입니다.


이 두 가지 모두 대규모 컷오버를 하지 않음으로써 피할 수 있습니다. 기능 플래그를 사용하여 새 서비스에 대한 트래픽을 1% 이상 줄이는 것도 컷오버 접근 방식입니다. 왜? 모든 변경 사항에 대한 트래픽의 1%를 동시에 줄입니다.


나는 아직도 그것이 잘 될 것이라고 기대하지 않습니다. 당신은 너무 큰 조치를 취하고 있습니다.

강철 스레드를 사용한 예

이 접근 방식을 Steel Thread 방식과 대조해 보세요.


  1. 귀하가 구축하고 있는 새로운 시스템에 대해 생각해 보십시오. 시스템의 스틸 스레드를 나타내는 몇 가지 좁은 사용 사례를 생각해 보세요. 시스템의 유용한 기능을 다루지만 모든 사용 사례를 처리하지는 않거나 어떤 방식으로든 제한됩니다.


  2. 일부 가치를 제공하는 가능한 한 범위가 좁은 시작 사용 사례를 선택하세요. 예를 들어, 새 서비스의 일부가 될 것으로 생각되는 API 하나를 선택할 수 있습니다.


  3. 새로운 서비스에서 새로운 API를 구축하세요.


  4. 좁은 사용 사례에서만 작동하도록 만드세요. 다른 사용 사례의 경우 이전 코드 경로를 사용하세요. 프로덕션 환경으로 전환하여 최대한 활용하세요. (팁: 새 코드 경로와 기존 코드 경로를 모두 수행하고 비교할 수도 있습니다!)


  5. 그런 다음 필요한 모든 기능을 새 서비스로 이동할 때까지 점차적으로 추가 사용 사례를 추가합니다. 각 사용 사례는 프로덕션 단계에 있습니다.


  6. 완료되면 이전 코드와 기능 플래그를 제거합니다. 이미 새 시스템에서 실행 중이므로 이는 전혀 위험하지 않습니다.


이것도 "strangler" 패턴이 아닌가요? 예, 하지만 새 프로젝트에도 사용할 수 있습니다. 계속해서 그린필드 예시를 읽어보세요.

강철 스레드는 통합 문제를 방지하고 더 높은 자신감을 제공합니다.

통합 문제는 프로젝트의 마지막 순간에 문제가 발생하는 가장 큰 원인 중 하나입니다. 새로운 시스템으로 전환하면 항상 예상하지 못한 문제가 발견됩니다. 컷오버와 관련된 모든 것을 의심해야 합니다. 작은 단위로 작업을 수행하세요.


Steel Threads는 처음부터 통합되므로 통합에 어려움을 겪을 일이 전혀 없습니다. 대신, 전체 과정에서 약간의 통합 문제가 발생합니다.


또한 서비스를 점진적으로 테스트해 왔기 때문에 서비스를 개시하기 전에 테스트할 필요가 없습니다. 생산 부하를 처리할 수 있다는 것을 알고 있습니다. 이미 네트워크 대기 시간을 추가했으므로 그 의미를 알고 있습니다.


모든 놀라움은 서비스를 점진적으로 출시하는 방식의 일부로서 앞으로 나아가고 점진적으로 처리됩니다.


중요한 것은 제대로 작동하는 통합 시스템이 있고, 작업하면서 계속 작동한다는 것입니다. 그리고 시간이 지나면서 구체화됩니다.

강철 스레드는 복잡성을 줄이는 데 도움이 될 수 있습니다

시스템을 설계할 때 많은 복잡성이 발생합니다. 새로운 시스템에 대한 일련의 요구 사항을 구축하는 것은 어려운 노력이 될 수 있습니다.


강철 스레드 접근 방식을 사용할 때 핵심 요구 사항 중 일부를 선택하고 시스템 계층을 관통하는 방식으로 이를 표현하고 설계를 연습합니다. 이는 전체 시스템에 일종의 골격 구조를 제공합니다.


그런 다음 해당 강철 스레드의 구현은 추가 요구 사항을 구축할 수 있는 뼈대가 됩니다.


따라서 강철 스레드는 시스템 요구 사항의 하위 집합 입니다.

강철 스레드는 Greenfield 작업에도 사용할 수 있습니다.

Slack의 복제본을 구현한다고 가정해 보겠습니다. 초기 Steel Thread는 다음과 같을 수 있습니다.


“인증되지 않은 사람이라면 누구나 하드코딩된 계정의 #일반실에 메시지를 게시할 수 있습니다. 페이지를 새로 고쳐도 메시지는 지속됩니다.”


이 초기 강철 스레드가 얼마나 제한되어 있는지 확인하십시오. 인증, 사용자 또는 계정을 처리하지 않습니다. 메시지 작성 및 유지를 처리합니다.


두 번째 강철 스레드는 시스템을 더욱 유용하게 만들 수 있습니다. 예를 들어 메시지 포스터가 게시할 이름을 선택할 수 있는 강철 스레드를 가질 수 있습니다.


이 두 번째 강철 스레드는 실제로 많은 작업을 수행하지 않았습니다. 아직 인증도, 계정도, 사용자 개념도 없습니다. 하지만 당신은 그것을 사용할 수 있을 만큼 충분히 작동하는 채팅방을 만들었습니다.


또한 시스템의 모든 부분을 통해 강철 스레드를 당기지는 않았습니다. 그러나 사용자와 계정의 개념을 완전히 이해했습니다.

강철 스레드는 조기 피드백을 제공합니다.

이 Slack 복제 예에서는 아직 많이 구축하지 않았더라도 구축 중인 시스템에 대한 초기 피드백을 얻을 수 있습니다. 이것이 강철 스레드를 사용하는 또 다른 강력한 이유입니다.


두 개의 Steel Thread만 지나면 팀은 채팅방을 풀타임으로 사용할 수 있습니다. 팀이 시스템을 사용하여 얼마나 많은 것을 배울 수 있는지 생각해 보십시오. 일하는 시스템입니다.


이를 사용자 및 계정 시스템 구축, 모든 연결, 마지막으로 채팅방 구축을 통해 배운 내용과 비교해 보세요.

강철 스레드로 시작

강철 스레드는 프로젝트를 설계할 때 시작하기에 좋은 곳인 경우가 많습니다. 그들은 앞으로의 나머지 작업을 위한 뼈대를 만듭니다. 그들은 시스템의 핵심 부분을 고정시켜 자연스럽게 살을 붙일 수 있는 장소를 마련합니다.


Steel Threaded 접근 방식을 시도해 보시기 바랍니다. 나는 그것이 당신의 프로젝트를 변화시킬 수 있다는 것을 알게 될 것이라고 생각합니다. 당신의 경험을 알려주세요!

강철 스레드는 수직 슬라이스와 밀접한 관련이 있습니다.

수직슬라이싱(vertical slicing)이라는 용어를 들어보셨을 겁니다. 나는 Milestones 에 대한 내 게시물에서 개념을 설명합니다.


Steel Threads는 소프트웨어를 수직 조각으로 제공하는 소프트웨어 설계 기술입니다. 이 용어는 시스템의 초기 수직 조각을 설명하는 데 사용되는 경향이 있습니다.


그것들은 밀접하게 관련된 개념이지만 완전히 동일하지는 않습니다.


강철 스레드를 "추적 총알"이라고 부르는 이야기도 들었습니다.


Pixabay 로부터 입수된 Steen Jepsen 님의 이미지 입니다.


이 이야기는 원래 https://www.rubick.com/steel-threads/ 에 게재되었습니다.