프로그래밍 언어는 잘 사라지지 않습니다. 생태계, 레거시 시스템, 규제, 새로운 런타임 등이 어떻게 오래된 언어를 새로운 틈새로 이동시켜 생존하게 하는지 알아보세요.

사람들은 프로그래밍 언어가 소셜 미디어에서 화제가 되지 않거나 개발자 설문에서 점수가 떨어지거나 최신 부트캠프에서 가르치지 않으면 "죽었다"고 말하곤 합니다. 그러나 그것은 죽음이 아니라 가시성의 상실입니다.
언어가 진짜로 “죽었다”고 할 수 있는 경우는 실무에서 더 이상 사용할 수 없을 때뿐입니다. 현실적으로는 보통 다음이 동시에 발생합니다: 실제 사용자가 거의 남지 않고, 유지되는 컴파일러나 인터프리터가 없으며, 새 코드를 빌드하거나 실행할 합리적인 방법이 사라집니다.
구체적인 체크리스트가 필요하다면, 대부분 다음이 참일 때 언어는 거의 사라져가는 것으로 봅니다:
그럼에도 불구하고 “죽음”은 희귀합니다. 소스 코드와 명세는 보존될 수 있고, 포크로 유지보수가 재개될 수 있으며, 소프트웨어가 여전히 가치가 있다면 기업이 툴체인을 유지하기 위해 비용을 지불하기도 합니다.
더 흔한 패턴은 언어가 축소되거나, 전문화되거나, 다른 스택 안에 포함되는 것입니다.
산업별로 다양한 "사후생활"을 볼 수 있습니다: 엔터프라이즈 시스템은 오래된 언어를 프로덕션에 유지하고, 과학은 검증된 수치 도구를 고수하며, 임베디드 장치는 안정성과 예측 가능한 성능을 우선시하고, 웹은 플랫폼 진화 덕분에 장기간 쓰이는 언어들을 계속 연명시킵니다.
이 글은 비기술 독자와 의사결정권자—기술 선택, 재작성 비용 산정, 리스크 관리 등을 하는 사람들—를 위해 쓰였습니다. 목표는 모든 오래된 언어가 좋은 선택이라고 주장하려는 것이 아니라, “죽은 언어”라는 제목이 실제로 중요한 것을 놓치기 쉽다는 점을 설명하는 것입니다: 그 언어가 여전히 실행되고, 진화하고, 지원될 현실적인 길이 남아 있는가 하는 점입니다.
언어가 살아남는 이유는 인기도 경연에서 이기기 때문이 아닙니다. 그 언어로 작성된 소프트웨어가 헤드라인이 바뀐 뒤에도 가치를 계속 제공하기 때문입니다.
2주마다 급여를 처리하는 시스템, 청구서를 대조하는 결제 엔진, 창고의 재고를 유지하는 물류 스케줄러 같은 소프트웨어는 "멋"과는 거리가 멉니다. 하지만 비즈니스가 잃을 수 없는 종류의 시스템입니다. 동작하고 신뢰할 수 있으며 수년간의 예외 처리가 포함되어 있다면, 그 밑의 언어는 연관효과로 긴 수명을 갖게 됩니다.
대부분 조직은 최신 스택을 쫓지 않습니다. 그들이 하려는 것은 리스크를 줄이는 것입니다. 성숙한 시스템은 예측 가능한 동작, 알려진 실패 모드, 감사와 운영 지식의 흔적을 가지고 있습니다. 이를 교체하는 것은 단순한 기술 프로젝트가 아니라 비즈니스 연속성 프로젝트입니다.
동작하는 시스템을 재작성하면 다음이 필요할 수 있습니다:
재작성은 "가능하다" 하더라도 기회비용을 감수할 만한 가치가 아닐 수 있습니다. 그래서 메인프레임·금융 플랫폼·제조 제어계처럼 오래가는 시스템과 연관된 언어들이 여전히 활발히 쓰입니다: 구문을 좋아해서가 아니라 그 소프트웨어가 입증되고 신뢰할 수 있기 때문입니다.
프로그래밍 언어를 가젯이 아니라 인프라로 취급하세요. 휴대폰은 몇 년마다 바꾸더라도, 다리가 새 디자인이 유행한다고 해서 매번 재건되지는 않습니다. 다리가 안전하게 교통을 수송한다면 보수하고 보강하며 진입로를 추가합니다.
많은 기업이 핵심 소프트웨어를 이렇게 취급합니다: 유지하고, 가장자리를 현대화하고, 입증된 기반은 수십 년 동안 같은 언어로 계속 운영하는 식입니다.
"레거시 시스템"은 나쁜 시스템이 아닙니다—생산 환경에서 충분히 오래 가치를 제공해 필수적이 된 소프트웨어입니다. 급여·결제·재고·연구 장비·고객 기록 등을 운영할 수 있습니다. 코드가 오래돼도 비즈니스 가치는 현재이며, 이것이 엔터프라이즈 전반에서 "레거시 언어"를 계속 쓰게 만드는 이유입니다.
조직은 종종 오래된 애플리케이션을 새 스택으로 재작성하는 것을 고려합니다. 문제는 기존 시스템에 수년간 축적된 지식이 들어 있다는 점입니다:
재작성할 때는 단순히 기능을 다시 만드는 것이 아니라 동작을 다시 만들어야 합니다. 미묘한 차이는 가동 중단, 재무 오류, 규제 문제로 이어질 수 있습니다. 그래서 예를 들어 메인프레임과 COBOL 시스템은 구문을 좋아해서가 아니라 그 소프트웨어가 검증되고 신뢰할 수 있어서 중요한 워크플로우를 계속 구동합니다.
많은 기업은 "빅뱅" 재작성 대신 단계적으로 모던화합니다. 안정적인 코어를 유지하면서 주변을 점차 교체합니다:
이 접근법은 리스크를 줄이고 비용을 분산시킵니다. 또한 프로그래밍 언어의 장수성을 설명합니다: 가치 있는 시스템이 언어에 의존하는 한 그 언어의 기술·툴링·커뮤니티는 계속 존재합니다.
오래된 코드베이스는 종종 새로움보다 예측 가능성을 우선합니다. 규제가 엄격하거나 고가용성 환경에서는 "지루한" 안정성이 기능입니다. 수십 년 동안 같은 검증된 프로그램을 실행할 수 있는 언어(예: 과학계의 Fortran, 금융의 COBOL)는 빠르게 변하지 않는다는 점 때문에 오히려 계속 사용됩니다.
프로그래밍 언어는 단순한 문법이 아니라 매일 사용할 수 있게 해주는 주변 생태계입니다. 사람들이 언어를 "죽었다"고 말할 때 자주 의미하는 바는 "그 언어로 실무 소프트웨어를 만들고 유지하기 어렵다"는 것입니다. 좋은 툴링이 그 문제를 막아줍니다.
컴파일러와 런타임은 기초지만, 생존은 일상 도구에 달려 있습니다:
이러한 도구들이 유지된다면 오래된 언어도 계속 "살아" 있을 수 있습니다.
놀랍게도 언어 기능보다 툴링 업그레이드가 언어를 부활시키는 경우가 많습니다. 현대적인 언어 서버, 더 빠른 컴파일러, 명확한 오류 메시지, 매끄러운 의존성 워크플로우는 오래된 코드베이스를 새로 접근하기 쉽게 만듭니다.
신규 개발자는 언어 그 자체보다 그 언어로 무언가를 만드는 경험을 평가합니다. 설정이 수시간이 아니라 수분이면 커뮤니티가 성장하고 튜토리얼이 늘며 채용이 쉬워집니다.
장수성은 사용자에게 피해를 주지 않는 것에서도 옵니다. 장기지원(LTS) 릴리스, 명확한 폐기 정책, 보수적인 업그레이드 경로는 기업이 계획적으로 업그레이드할 수 있게 합니다. 업그레이드가 안전하고 예측 가능하다고 느끼면 조직은 언어에 계속 투자합니다.
명확한 가이드, 마이그레이션 노트, 실무 레시피는 다음 세대의 진입장벽을 낮춥니다. 잘 정비된 문서를 가진 언어는 단순히 견디는 것이 아니라 채택 가능성을 유지합니다.
언어가 오래가는 큰 이유 중 하나는 ‘사업적 안전성’을 제공하기 때문입니다. 팀이 수년간 소프트웨어에 투자하면 코드는 계속 컴파일되고 같은 식으로 동작할 것이라 기대할 수 있어야 합니다.
언어에 명확하고 안정된 명세가 있으면 한 벤더나 컴파일러 팀에 덜 의존하게 됩니다. 표준은 언어의 의미—문법, 핵심 라이브러리, 엣지 케이스 동작—를 정의합니다.
이런 안정성은 대기업이 "다음 릴리스에서 무슨 일이 일어날지 모르는" 상황에 베팅하지 않게 합니다. 또한 여러 구현을 허용해 락인을 줄이고 오래된 시스템을 유지하면서 점진적으로 현대화할 수 있게 합니다.
하위호환성은 오래된 코드가 새 컴파일러·런타임·라이브러리와 계속 작동하거나 적어도 문서화된 마이그레이션 경로가 있다는 의미입니다. 엔터프라이즈는 이를 통해 총소유비용을 낮춥니다:
규제 환경에서는 검증된 시스템이 중요하기 때문에 업그레이드가 점진적이고 감사 가능하도록 하려 합니다.
자주 깨지는 변경은 사람들을 밀어냅니다. 각 새 버전마다 수천 줄을 수정하고 의존성을 재작업해야 한다면 팀은 업그레이드를 미루거나 생태계를 떠납니다.
호환성과 표준화를 우선한 언어는 지루한 신뢰를 쌓습니다. 그 지루함이 바로 유행이 지난 뒤에도 언어를 쓸 수 있게 하는 힘입니다.
언어가 모든 최신 트렌드를 ‘이겨야’ 할 필요는 없습니다. 대신 현재의 스택에 연결되는 방식으로 유용성을 유지합니다.
유지되는 런타임이나 잘 관리된 라이브러리가 있으면 오래된 언어도 현대적 기능에 접근할 수 있습니다:
이 때문에 “오래된”이 자동으로 “고립된”은 아닙니다. 신뢰성 있게 외부와 통신할 수 있다면 계속 가치 있는 역할을 할 수 있습니다.
FFI는 외부 함수 인터페이스(foreign function interface)의 약자입니다. 쉽게 말하면: 한 언어로 작성된 코드가 다른 언어의 코드를 호출하게 해주는 다리입니다.
이 다리는 중요합니다. 많은 성능 민감형·기본 소프트웨어가 C/C++로 작성되어 있기 때문에 C/C++를 호출할 수 있다는 것은 풍부한 부품 상자에 접근하는 것과 같습니다.
하나의 패턴은 고성능 C/C++ 라이브러리 호출입니다. Python은 C 확장을, Ruby와 PHP는 네이티브 확장을 사용합니다. 많은 새 언어도 C ABI 호환을 제공합니다. 애플리케이션 코드는 바뀌더라도 이런 C 라이브러리는 안정적이고 광범위하게 지원되는 경우가 많습니다.
다른 패턴은 인터프리터 임베딩입니다. 대규모 시스템을 재작성하는 대신 Lua, Python, JavaScript 엔진 같은 스크립트 언어를 기존 애플리케이션 안에 심어 설정·플러그인·빠른 기능 개발을 가능하게 합니다. 이 경우 임베디드 언어는 제품 전체가 아니라 강력한 컴포넌트로 남습니다.
상호운용성은 "생존"의 의미를 재정의합니다: 언어는 글루 코드, 확장 레이어, 또는 현대적 작업을 전문 모듈에 위임하는 안정된 코어로서 필수적일 수 있습니다.
특정 산업은 안정성을 신기함보다 더 가치 있게 평가하기 때문에 언어가 남습니다. 시스템이 돈을 이동시키거나 긴급 전화를 라우팅하거나 의료 기기를 모니터링한다면, 예측 가능한 동작을 포기하기 어렵습니다.
금융은 전형적인 예입니다: 핵심 뱅킹과 결제 처리는 대규모 검증된 코드베이스에서 운영되고 다운타임 비용이 큽니다. COBOL이나 대규모 트랜잭션 시스템에서의 Java 같은 언어는 대량 처리와 일관된 결과를 입증했기 때문에 계속 쓰입니다.
통신 시스템도 유사합니다: 통신사는 연속 운용, 긴 하드웨어 수명주기, 신중한 업그레이드를 필요로 합니다. 결정론적 동작과 성숙한 운영 도구를 지원하는 기술이 오래 남습니다.
항공·방위에서는 인증이 생존 필터 역할을 합니다. DO-178C 같은 표준 때문에 변경 비용이 크므로 Ada나 엄격히 관리된 C/C++ 하위집합이 여전히 흔합니다.
의료는 환자 안전과 추적성을 추가로 요구합니다. 의료 소프트웨어·기기(IEC 62304 또는 FDA 기대사항에 부합)는 요구사항·테스트·변경 이력을 문서화할 수 있어야 하므로 개발자 편의성보다 검증 가능성이 중요합니다.
SOX, PCI DSS, HIPAA 같은 규제와 감사는 잘 이해되고 문서화되며 반복 검증 가능한 기술을 선호하게 만듭니다. 새 언어가 더 낫더라도 그것을 안전하고 준수 가능하며 운영적으로 통제할 수 있음을 증명하려면 수년이 걸릴 수 있습니다.
대기업은 다년간의 벤더 지원 계약을 구매하고 직원을 교육하며 승인된 스택을 표준화합니다. 조달 주기는 기술 유행보다 오래갈 수 있고 규제기관은 연속성을 기대합니다. 언어에 성숙한 벤더 생태계, 장기 지원, 인재 파이프라인이 있으면 그 언어는 틈새를 지킵니다.
결과적으로 언어가 남는 이유는 향수 때문만이 아니라 그들의 강점—안전성, 결정론, 성능, 입증된 운영 행동—이 규제되고 결과가 중요한 산업의 제약과 잘 맞기 때문입니다.
언어가 구직 공고를 장악하지 않아도 오랫동안 살아남을 수 있습니다. 대학, 교과서, 연구실이 여러 언어를 수십 년 동안 돌려씁니다—때로는 주된 교육용으로, 때로는 새로운 사고방식을 익히게 하는 두 번째 언어로.
교실에서 언어는 고용 경로라기보다 패러다임의 명확한 예제로 사용됩니다:
이런 교육적 역할은 보상받지 못하는 상금이 아닙니다. 다음 세대 개발자들이 언어의 아이디어를 이해하게 되고, 그들이 나중에 그 아이디어를 다른 스택으로 가져오게 됩니다.
학계와 산업 연구 그룹은 종종 새 언어 기능을 프로토타입으로 먼저 개발합니다: 타입 시스템, 패턴 매칭, 가비지 컬렉션 기법, 모듈 시스템, 동시성 모델, 형식 검증 등. 이런 프로토타입은 연구 언어에 수년 동안 머물 수 있지만 논문·컨퍼런스·오픈소스 구현을 통해 주류 언어에 영향을 줍니다.
이런 영향 때문에 오래된 언어가 완전히 사라지기 어렵습니다: 문법이 복사되지 않더라도 아이디어는 지속되어 다른 형태로 재등장합니다.
교육에서의 채택은 강의실 밖에서도 실용적 효과를 만듭니다. 졸업생들은 라이브러리·인터프리터·컴파일러·툴링을 가지고 나오고 블로그를 쓰며 틈새 오픈소스 커뮤니티를 만들고 때론 배운 것을 실제 도메인에 배포합니다.
따라서 언어가 강의와 연구에서 계속 쓰인다면, 그것은 "죽었다"가 아니라 여전히 소프트웨어 설계에 영향을 주고 있다는 뜻입니다.
모든 언어가 향수나 레거시 때문에 남는 것은 아닙니다. 어떤 언어는 특정 작업에서 여전히 더 잘하거나 덜 골칫거리를 만들기 때문에 남습니다.
하드웨어 한계를 밀어붙이거나 동일한 계산을 수백만 번 반복할 때 소액의 오버헤드도 실제 비용이 됩니다. 예측 가능한 성능과 단순한 실행 모델, 메모리 제어를 제공하는 언어는 대체하기 어렵습니다.
이것이 ‘하드웨어 근접성’이 오랫동안 유지되는 이유입니다. 기계가 정확히 무엇을, 언제 할지 알아야 한다면 기계에 잘 대응하는 언어는 바꾸기 어렵습니다.
수치 계산의 Fortran은 고전적 예시입니다. 대규모 시뮬레이션과 선형대수 작업에서 Fortran 컴파일러와 라이브러리는 수십 년간 최적화되어 왔습니다. 연구에서 검증된 결과를 안정적으로 재현하는 것이 우선이라면 문법의 트렌드는 중요하지 않습니다.
임베디드의 C도 비슷한 이유로 지속됩니다: 메모리와 리소스 제약, 하드 실시간 요구사항, 맞춤 하드웨어 지원에서 예측 가능한 동작과 광범위한 지원이 중요합니다.
데이터 질의의 SQL은 문제가 무엇인지를 설명하는 데 맞춰진 언어라서 지속됩니다. 새 플랫폼이 등장해도 도구들은 종종 SQL 인터페이스를 유지합니다—팀과 도구, 수십 년의 지식이 공유되는 공통 언어이기 때문입니다.
건강한 엔지니어링 문화는 하나의 언어로 모든 것을 강제하지 않습니다. 제약·실패 모드·장기 유지보수를 기준으로 도구를 고릅니다. 이런 관점에서 오래된 언어는 그 틈새에서 여전히 실용적입니다.
언어가 인기 차트에서 1위를 하지 않아도 두 번째 생명을 얻을 수 있습니다. 부활은 보통 언어 주변의 변화에서 옵니다—실행 방식, 패키징, 혹은 현대적 워크플로우에서의 위치가 바뀌는 경우입니다.
많은 복귀가 반복되는 패턴을 따릅니다:
새 틈새는 보통 언어가 특정 표면적(surface area)에 최적으로 맞아떨어질 때 생깁니다. 몇 가지 경로:
틈새가 자리잡으면 튜토리얼, 라이브러리, 채용 파이프라인이 그 용도에 맞춰 정렬되며 자기강화됩니다.
오픈소스 유지관리자와 커뮤니티 이벤트는 예상보다 훨씬 중요합니다. 몇 명의 전담 유지관리자가 툴링을 현대화하고 릴리스를 관리하며 보안 이슈에 대응하면 큰 변화를 만듭니다. 컨퍼런스, 밋업, 해커위크는 새 기여자를 끌어들이고 관행을 전파하며 성공 사례를 문서화합니다.
단순한 과대광고는 오래가지 못합니다. 복귀가 지속되려면 반복되는 문제를 대체보다 나은 방식으로 해결하고 매년 꾸준히 해나가야 합니다.
장기용 언어 선택은 어떤 언어가 유행할지 예측하는 것이 아니라, 제품과 조직이 변해도 운영·유지·채용이 가능한 도구를 고르는 것입니다.
의견보다 검증 가능한 제약을 기준으로 시작하세요:
언어 선택은 데모에 보이지 않는 비용에 영향을 줍니다:
초기에는 "저렴한" 언어가 희소한 전문가나 잦은 재작성으로 인해 결국 비싸질 수 있습니다.
불확실성을 줄이려면 소규모·의도적인 단계를 취하세요:
아이디어와 작동 가능한 증명을 더 빠르게 확인하고 싶다면 프로토타이핑을 가속하는 도구를 활용하세요. 예를 들어 Koder.ai는 채팅으로 웹·백엔드·모바일 프로토타입을 만들고 소스 코드(프론트엔드는 React, 백엔드는 Go + PostgreSQL, 모바일은 Flutter)를 내보낼 수 있게 해 출구 경로와 점진적 리팩터링을 유지하면서 개념 증명을 빠르게 만들 수 있습니다.
스택을 확정하기 전에 확인하세요:
실무에서 더 이상 사용될 수 없을 때, 즉 현재 시스템에서 합리적으로 소프트웨어를 빌드·실행·유지보수할 수 없게 되면 그 언어는 사실상 "죽었다"고 볼 수 있습니다.
인기 감소, 밈, 또는 부트캠프 커리큘럼에서 사라지는 것은 가시성의 문제일 뿐 실제로 쓸 수 없는 상태와는 다릅니다.
유행은 관심을 측정할 뿐 운영능력을 측정하지는 않습니다. 설문에서 순위가 떨어져도 중요한 급여·청구·물류 시스템을 계속 구동하고 있을 수 있습니다.
의사결정자에게 중요한 질문은: 그 언어로 작성된 시스템을 여전히 운영·지원할 수 있는가? 입니다.
다음이 대부분 해당되면 언어는 소멸 직전이라고 볼 수 있습니다:
그럼에도 포크로 유지보수를 재개하거나, 보존된 툴체인을 복원하거나, 기업이 유료로 지원해 살릴 수 있습니다.
가치 있는 소프트웨어는 유행을 앞섭니다. 시스템이 계속 가치를 제공하면 조직은 교체보다 유지·운영을 택합니다.
시스템이 중요하면 그 아래의 언어는 ‘연관효과’로 오래 살아남습니다.
재작성은 단순한 코드 변경이 아니라 비즈니스 연속성 이벤트입니다. 숨겨진 비용은 보통 다음과 같습니다:
그래서 많은 경우 점진적 모던화가 더 안전한 선택입니다.
언어의 생존력은 문법보다 주변 도구(워크벤치)에 달려 있습니다. 유지되는 컴파일러/런타임뿐 아니라 다음이 중요합니다:
툴링 개선은 종종 언어의 부활을 촉발합니다. 문법이 바뀌는 것보다 사용자 경험이 좋아지면 신규 유입이 늘어납니다.
표준과 하위호환성은 운영 리스크를 줄여줍니다. 안정된 규격이 있으면 한 벤더나 컴파일러에 종속되지 않고 여러 구현이 공존할 수 있습니다.
실무에서의 장점은 다음과 같습니다:
특히 규제 환경에서는 예측 가능한 동작이 개발 속도만큼 중요합니다.
상호운용성은 언어가 고립되지 않고 현대 스택과 연결되게 합니다. 흔한 방식은:
이런 연결 고리가 있으면 언어는 ‘접착제’나 ‘확장 레이어’로서 계속 중요해질 수 있습니다.
고위험 분야는 안정성을 중시하므로 새 기술로 쉽게 바꾸지 않습니다. 금융, 통신, 항공·방위, 의료 같은 분야가 대표적입니다.
규제·감사·인증 절차와 장기 지원 계약은 기술 선택을 고착화시켜 입증된 툴체인과 예측 가능한 동작을 선호하게 만듭니다.
언어가 채용 공고에서 주류가 아니더라도, 대학과 연구실이 아이디어를 보존하고 전파합니다.
교육용 언어는 패러다임을 가르치는 도구로 사용되며, 연구용 프로토타입은 이후 주류 언어에 영향을 줍니다. 따라서 교육·연구에서의 사용은 언어의 영향력이 계속되는 현실적 효과를 만듭니다.
어떤 작업에서는 오래된 언어가 여전히 최선의 도구일 수 있습니다. 성능·예측 가능성·하드웨어 근접성이 중요한 경우가 그렇습니다.
예시:
요약하면 ‘적재적소’의 관점에서 오래된 언어는 특정 문제에 대해 가장 안정적인 선택일 수 있습니다.
부활은 종종 주변 환경의 변화에서 옵니다. 공통적인 촉발 요인:
새로운 틈새는 보통 스크립팅, 인프라 도구, 또는 시스템 간 접착 역할처럼 특정 영역에서 최적화되며, 한 번 자리잡으면 튜토리얼·라이브러리·채용 파이프라인이 강화됩니다.
장기 프로젝트용 언어 선택은 유행 예측이 아니라 운영 가능성·유지보수성·채용 가능성을 따져야 합니다.
검토 기준:
위험 완화 방법:
결정 전에 체크리스트를 활용하면 의사결정을 더 안전하게 할 수 있습니다.