시스템 엔지니어링

주싱·2026년 7월 6일

생각

목록 보기
35/35

시스템 엔지니어라는 역할을 새롭게 맡게 되었습니다. 그 동안 소프트웨어 개발에 집중해 왔는데, 이제 더 넓은 관점에서 다양한 파트의 일들을 접하게 될 것 같습니다. 회사 면접에서 시스템 엔지니어링과 관련된 짧은 발표를 요청받았는데 발표를 준비하며 시스템 엔지니어의 중요한 역할에 대한 생각을 정리해 보았습니다.

1. 팀이 미션을 이해하도록

시스템 엔지니어링의 시작은 우리의 미션을 구체적인 언어로 정의하고, 이를 모든 이해관계자들과 공유하는 일이라고 생각합니다. 개발 조직이 미션을 이해하는 충분한 과정 없이 시스템을 개발해 나가면 중요한 기술적인 결정의 순간에 목적에 벗어나는 결정을 하기 쉽습니다. 시스템의 요구사항은 초기에 완전하게 정의되지 않고, 여러 설계 결정사항들도 프로젝트를 진행하며 결정되는데 이때 미션에 대한 이해는 여러 결정의 순간 우리가 길을 잃지 않도록 돕는 등대와 같은 역할을 합니다. 시스템 엔지니어는 개발조직이 미션에 대해 잘 이해하고 스스로 목표를 달성하기 위한 올바른 결정을 할 수 있는 토대를 만들어 주어야 합니다.

2. 사용자의 필요를 공학적인 요구로 재해석하기

사용자의 요구사항은 그대로 엔지니어링 영역에 와 닿을 수 없습니다. 사용자는 순수한 필요를 말하지만 엔지니어는 그것을 구현하는데 여러 제약사항을 가집니다. 따라서 시스템 엔지니어는 사용자의 필요를 공학적인 제약사항 위에서 공학적인 요구로 재정의 할 수 있어야 합니다. 사용자의 언어와 엔지니어가 안고 있는 제약 사항을 함께 이해하여 둘이 공존할 수 있는 언어로 문제를 재정의 하는 것입니다. 시스템 엔지니어는 이를 통해 사용자와 엔지니어를 잇는 가교 역할을 합니다.

3. 테스트 가능한 요구사항

시스템 엔지니어는 요구사항을 정의하는 프로젝트 초기 단계부터 테스트 가능한 시스템을 고민합니다. 시스템을 어떻게 테스트할지 고민하는 과정은 반드시 요구사항을 구체적으로 정의하도록 유도합니다. 테스트 가능한 시스템을 고민함으로 불확실한 프로젝트의 건강한 초석을 다질 수 있습니다. 시스템 엔지니어는 프로젝트 전 과정에서 이 테스트에 대해 고민하고 실제 테스트 계획과 결과가 올바른지 점검도 합니다. 테스트에 대한 고민은 시스템 엔지니어링의 꽃이라고 부를 만큼 중요한 것이라고 생각합니다.

4. 안정적이지만 경제적인 결정하기

프로젝트는 무언가를 ‘결정’하는 일의 연속입니다. 이 모든 결정의 순간에 시스템 엔지니어는 안정적이지만 동시에 경제적인 것을 선택해 나가야 합니다. 경제적이라는 것은 프로젝트의 미션을 달성하는데 불필요한 것들을 찾아 제거하고, 반드시 필요한 것만 남기는 것이라고 다르게 표현 할 수 있습니다. 사용자들은 대게 프로젝트 초기에 자기가 원하는 것을 구체적으로 정의하지 못하는 경우가 많은데, 이로 인한 불안감으로 실제로 필요한 것보다 과도하게 무언가를 요구하는 경우가 있습니다. 시스템 엔지니어는 사용자의 상황과 목적을 잘 이해하고 그 필요를 세밀하게 분석하여 정말 필요한 것만 남을 수 있도록 사용자와 소통해야 합니다. 또한 시스템 엔지니어는 목적을 이루는 방법을 결정할 때 더 쉽고 확실한 방법이 없는지 자신과 조직에게 다시금 질문을 던져보아야 합니다. 한 번 더 생각해 보면 더 쉽고 확실한 해결책이 있을 때가 많습니다.

5. 조기 설계 검증

시스템 엔지니어는 핵심적이고 리스크가 높은 기능을 가능한 프로젝트 초기에 식별하고 설계 컨셉이 생각한 대로 동작하는지 시험하고 개선할 수 있는 구조를 만들어야 합니다. 일반적으로 시스템의 개발은 분석, 설계, 구현, 시험이라는 단계를 거치는데, 우주 분야의 제품은 이 단계들이 순차적으로 진행되는 경우가 많습니다. 그래서 프로젝트 막바지인 시험 단계에 설계 결함이 발견되면 이미 너무 많은 것들이 진행되어 문제를 해결하는데 비용이 과도하게 들거나, 어떤 경우에는 거의 불가능한 경우가 발생하기도 합니다. 시스템 엔지니어는 중요하지만 리스크가 높은 기능들을 조기에 식별하고 설계 단계부터 검증하여 적은 비용으로 수정할 수 있는 기회를 얻게 해야 합니다. 이를 통해 핵심적인 기능이 최종 완성품에서 실패하는 리스크를 크게 줄일 수 있습니다.

6. 인터페이스의 주인

소프트웨어 공학에는 ‘의존성 역전’이라는 설계 원칙이 있습니다. 위성 개발은 주관 기관을 중심으로 다양한 하위 기관들의 협력을 통해 만들어집니다. 이때 하위 기관들의 시스템 사이에 인터페이스 설계가 중요한 업무가 되는데, 주관 기관이 하위 시스템들을 잘 이해하고 적극적으로 인터페이스 요구사항을 내지 못한다면 하위 기관이 인터페이스를 주도해서 정의하고 주관 기관은 그저 하위 기관이 만들어 주는 대로 사용하는 의존 구조를 가지게 됩니다. 이렇게 되면 대게 주관 기관이 원했던 목적에 최적화된 인터페이스 설계가 이루어지지 못하고 프로젝트 후반부에 아쉬운 부분이 있더라고 이를 그대로 수용해야하는 결과를 가져오곤 합니다. 시스템 엔지니어는 서브 시스템들의 동작을 이해하고 인터페이스 설계에 적극적으로 참여하여 시스템의 인터페이스가 목적에 맞게 잘 설계 될 수 있도록 해야합니다.

7. 소통

위성 시스템은 기계, 광학, 전자, 소프트웨어 등 정말 다양한 파트의 전문가 그룹에 의해 개발됩니다. 그리고 그 모든 파트가 원활히 소통하며 한 방향으로 나아가지 못하면 프로젝트는 성공할 수 없습니다. 많은 사람들이 프로젝트가 실패하거나 큰 어려움을 겪는 이유가 조직의 기술적인 역량 부족 때문이라고 생각하지만, 실제로 프로젝트가 실패하거나 큰 어려움을 겪는 결정적인 이유는 소통의 실패에서 오는 경우가 너무나 많습니다. 시스템 엔지니어는 여러 파트들이 원활하게 정보를 교환하고 신속한 의사결정을 내리며 나아갈 수 있도록 그들 사이에 원활한 소통 채널을 만들고 소통을 주도해야 합니다.

제가 생각하는 시스템 엔지니어의 중요한 역할들에 대해 생각해 보았습니다. 저도 이것을 마음에 두고 앞으로 새로운 환경에서 잘 적응하고 조직에 꼭 필요한 일을 할 수 있도록 노력하겠습니다.

profile
Software Engineer

0개의 댓글