2021.09.14

블로그ㅣ‘러스트(Rust)’의 미래

Matt Asay | InfoWorld
러스타시안 원칙(The Rustacean Principles)은 좋은 아이디어 그 이상이다. 이는 개발자들이 ‘러스트(Rust)’에 계속해서 왕관을 수여하는 이유의 핵심이다. 

러스트(사전적 의미: 녹슬다)라는 이름에도 불구하고 이 프로그래밍 언어가 이렇게 빛나고 새로워 보인 적은 없었다. 지난 2016년 스택 오버플로우(Stack Overflow)의 개발자 연례 설문조사에서 러스트는 ‘가장 사랑받는(most loved)’ 언어로 선정됐다. 뒤를 이어 2017년, 2018년, 2019년, 2020년, 2021년에도 ‘가장 사랑받는’ 언어로 뽑혔다. 2022년에도 러스트를 향한 사랑은 계속될 전망이다. 
 
ⓒGratisography (CC0)

러스트 커뮤니티는 여기에 안주하지 않는다. 러스트 프로그래밍 언어 프로젝트의 공동 리더 니코 마사키스, 러스트 재단의 회장 셰인 밀러, 그리고 러스트 커뮤니티의 핵심 구성원들은 러스트가 몇 년, 더 나아가 수십 년 동안 사랑받을 수 있도록 열심히 일하고 있다. 그리고 이를 실천하는 한 가지 방법이 ‘러스타시안 원칙’이다(편집자 주: 러스타시안은 러스트 사용자를 일컫는 별칭이다). 

러스타시안 원칙은 이상과 현실이 부딪힐 때마다 대수롭지 않게 버려지는 모토로 취급될 수 있지만 실제로는 러스트의 장기적인 발전을 위한 강력한 가이드 역할을 한다. 

러스트의 원칙적 행동
러스트 커뮤니티는 러스트를 구축 시 때때로 경쟁적인 개발 우선순위 간의 균형을 맞추기 위해 ‘러스타시안 원칙’을 발전시켰다. 이는 다음과 같다. 

• 안정성(Reliable): 컴파일하면 작동한다. 
• 성능(Performant): 관용적 코드가 효율적으로 실행된다. 
• 지원(Supportive): 언어, 도구, 커뮤니티가 도움을 준다. 
• 생산성(Productive): 적은 노력으로 많은 일을 한다. 
• 투명성(Transparent): 낮은 수준의 세부 사항을 예측하고 제어할 수 있다. 
• 다용도(Versatile): 러스트로 무엇이든 할 수 있다. 


이 원칙들은 대부분 보완적이다. 마사키스가 밝힌 것처럼 “이러한 속성들은 종종 서로 긴장 관계에 있기 때문”이다. 러스트를 ‘신뢰할 수 있게 만드는 것’과 ‘원활히 작동되게 만드는 것’이 충돌할 때 어떤 일이 발생하는가? 

그는 2가지 원칙이 상충한다면 “목록 상위에 있는 목표를 우선시하는 경향이 있다”라고 말했다. 즉, ‘다용도’보다는 ‘안정성’이 더 중요하다는 의미다. 이어서 마사키스는 “순서가 중요하긴 하지만 러스트가 성공하려면 이 모든 걸 한 번에 달성해야 한다는 점을 강조하는 것도 중요하다”라고 덧붙였다. 

러스트의 미래(현재 v1.54이며, 빠르게 발전 중이다)를 살펴보려는 사람들을 위해 목록과 원칙의 순서는 앞으로 러스트 커뮤니티에서 기대할 수 있는 것에 관한 훌륭한 가이드를 제공한다. 이게 실제로 어떻게 진행될지 보려면 특정 예를 살펴보면 된다. 

당신은 신뢰할 수 있다
러스타시안 원칙에 자세하게 설명돼 있는 것처럼 러스트의 안정성은 이 언어가 생산적이고 지원적이라고 느끼게 만드는 것과 대부분 상충한다. 왜 그럴까? 러스트가 전반적인 일관성을 보장하기 위해 시스템 전체에 걸친 교차 검사를 하기 때문이다. 

이 원칙은 개발자가 러스트로 구축된 시스템에 큰 신뢰를 가질 수 있도록 하지만 다른 원칙을 희생하게 된다. 커뮤니티에서 고심한 서로 다른 원칙의 균형을 어떻게 잡아야 하는지에 관한 좋은 예는 ‘복사하지 않으면 삭제 시 자르기’ 규칙의 최종 채택 문서에 설명돼 있다. 

러스타시안은 러스트에 어떻게 안정성을 구축하는가? 다음의 2가지 방법을 사용한다. 

첫째, 러스트는 유형 안정성(Type safety)을 사용한다. 이는 ‘러스트 코드에 정의되지 않은 동작이 없다’는 의미이며, 컴파일러 작성자가 세그폴트(세그멘테이션 오류), 데이터 레이스, 아웃-오브-바운드 메모리 액세스와 같은 것을 참조하는 데 사용하는 용어다. 

러스트 커뮤니티는 ‘거의 안전한(almost safe)’ API를 절대 허용하지 않는다. 모든 사람이 합리적이고 타당한 작업을 하는 한 코드가 작동하는 것만으로는 충분하지 않다. 

코드는 작동해야 한다. 생산성 원칙에 반할 수 있기 때문에 러스트는 다른 러스타시안 개발 원칙에 부담을 줄 가능성을 줄이고자 (정보를 담은) 문서와 오류 메시지를 전달한다. 

러스트가 안정성을 제공하는 두 번째 방법은 모든 경우를 고려하는 것이다. 이는 무엇을 의미할까? 러스트는 오류 조건을 숨기지 않으며, 모든 가능성을 명시적으로 나열하도록 권장한다는 것이다(또는 무언가 생략됐음을 인정한다). 러스타시안 원칙에 따르면 러스트가 이 하위 원칙을 달성하는 방법은 아래와 같다. 
 

“러스트는 열거형을 반환하는 기능적 언어에서 개척된 접근법을 채택한다. Result 열거형을 사용하면 오류를 강제로 고려하는 방식으로 오류 신호를 보낼 수 있다. 하지만 오류를 처리하는 가장 일반적인 방법은 오류를 호출자에게 전파하는 것이며, 생산성을 느끼려면 이 작업이 간결해야 한다. 사용자에게 오류 경로를 계속 표시하고 완전히 간과하지 않도록 하는 동시에 생산성을 복원하기 위해 러스트의 ? 작업자가 추가됐다.”


큰 오류 메시지와 같은 것은 실제로 언어 자체의 기능이 아니라 러스트의 전반적인 안정성 보장을 지원하는 커뮤니티 행동이다. 이러한 원칙 중 일부는 코드로 표현되는 반면, 다른 일부는 커뮤니티 행동을 통해 전달된다. 따라서 러스타시안 원칙에 ‘러스타시안이 되는 방법(How to Rustacean)’을 포함하고 있다는 게 놀라운 일은 아니다. 

• 친절하고 배려하라
• 사용자에게 즐거움을 선사하라
• (당신의 전문 지식을) 보여줘라 
• 타인의 지식을 인정하라
• 어딘가부터 시작하라
• 계속 팔로우하라
• 지식을 나누어라
• 믿고 위임하라


러스트가 상당 부분 성공한 이유는 러스트 커뮤니티에서 러스트가 의미하는 중심 교리를 희생시키려 하지 않았기 때문이다. 오소(Oso)의 CTO 샘 스콧은 필자에게 “러스트는 가드레일이 있는 시스템 프로그래밍 언어”라고 말했다. 

이러한 가드레일은 러스트 개발 및 채택에 중요한 것으로 드러났다. 이는 러스타시안 원칙에 의해 보존되며, 러스트가 진화하더라도 미래에 어떤 모습일지 알려준다. 

* Matt Asay는 아마존 웹 서비스(AWS)의 Principal이다. 어도비의 개발자 에코시스템 총괄, 몽고DB의 비즈니스 개발, 마케팅, 커뮤니티 부문 부사장을 역임한 바 있다. ciokr@idg.co.kr






 



2021.09.14

블로그ㅣ‘러스트(Rust)’의 미래

Matt Asay | InfoWorld
러스타시안 원칙(The Rustacean Principles)은 좋은 아이디어 그 이상이다. 이는 개발자들이 ‘러스트(Rust)’에 계속해서 왕관을 수여하는 이유의 핵심이다. 

러스트(사전적 의미: 녹슬다)라는 이름에도 불구하고 이 프로그래밍 언어가 이렇게 빛나고 새로워 보인 적은 없었다. 지난 2016년 스택 오버플로우(Stack Overflow)의 개발자 연례 설문조사에서 러스트는 ‘가장 사랑받는(most loved)’ 언어로 선정됐다. 뒤를 이어 2017년, 2018년, 2019년, 2020년, 2021년에도 ‘가장 사랑받는’ 언어로 뽑혔다. 2022년에도 러스트를 향한 사랑은 계속될 전망이다. 
 
ⓒGratisography (CC0)

러스트 커뮤니티는 여기에 안주하지 않는다. 러스트 프로그래밍 언어 프로젝트의 공동 리더 니코 마사키스, 러스트 재단의 회장 셰인 밀러, 그리고 러스트 커뮤니티의 핵심 구성원들은 러스트가 몇 년, 더 나아가 수십 년 동안 사랑받을 수 있도록 열심히 일하고 있다. 그리고 이를 실천하는 한 가지 방법이 ‘러스타시안 원칙’이다(편집자 주: 러스타시안은 러스트 사용자를 일컫는 별칭이다). 

러스타시안 원칙은 이상과 현실이 부딪힐 때마다 대수롭지 않게 버려지는 모토로 취급될 수 있지만 실제로는 러스트의 장기적인 발전을 위한 강력한 가이드 역할을 한다. 

러스트의 원칙적 행동
러스트 커뮤니티는 러스트를 구축 시 때때로 경쟁적인 개발 우선순위 간의 균형을 맞추기 위해 ‘러스타시안 원칙’을 발전시켰다. 이는 다음과 같다. 

• 안정성(Reliable): 컴파일하면 작동한다. 
• 성능(Performant): 관용적 코드가 효율적으로 실행된다. 
• 지원(Supportive): 언어, 도구, 커뮤니티가 도움을 준다. 
• 생산성(Productive): 적은 노력으로 많은 일을 한다. 
• 투명성(Transparent): 낮은 수준의 세부 사항을 예측하고 제어할 수 있다. 
• 다용도(Versatile): 러스트로 무엇이든 할 수 있다. 


이 원칙들은 대부분 보완적이다. 마사키스가 밝힌 것처럼 “이러한 속성들은 종종 서로 긴장 관계에 있기 때문”이다. 러스트를 ‘신뢰할 수 있게 만드는 것’과 ‘원활히 작동되게 만드는 것’이 충돌할 때 어떤 일이 발생하는가? 

그는 2가지 원칙이 상충한다면 “목록 상위에 있는 목표를 우선시하는 경향이 있다”라고 말했다. 즉, ‘다용도’보다는 ‘안정성’이 더 중요하다는 의미다. 이어서 마사키스는 “순서가 중요하긴 하지만 러스트가 성공하려면 이 모든 걸 한 번에 달성해야 한다는 점을 강조하는 것도 중요하다”라고 덧붙였다. 

러스트의 미래(현재 v1.54이며, 빠르게 발전 중이다)를 살펴보려는 사람들을 위해 목록과 원칙의 순서는 앞으로 러스트 커뮤니티에서 기대할 수 있는 것에 관한 훌륭한 가이드를 제공한다. 이게 실제로 어떻게 진행될지 보려면 특정 예를 살펴보면 된다. 

당신은 신뢰할 수 있다
러스타시안 원칙에 자세하게 설명돼 있는 것처럼 러스트의 안정성은 이 언어가 생산적이고 지원적이라고 느끼게 만드는 것과 대부분 상충한다. 왜 그럴까? 러스트가 전반적인 일관성을 보장하기 위해 시스템 전체에 걸친 교차 검사를 하기 때문이다. 

이 원칙은 개발자가 러스트로 구축된 시스템에 큰 신뢰를 가질 수 있도록 하지만 다른 원칙을 희생하게 된다. 커뮤니티에서 고심한 서로 다른 원칙의 균형을 어떻게 잡아야 하는지에 관한 좋은 예는 ‘복사하지 않으면 삭제 시 자르기’ 규칙의 최종 채택 문서에 설명돼 있다. 

러스타시안은 러스트에 어떻게 안정성을 구축하는가? 다음의 2가지 방법을 사용한다. 

첫째, 러스트는 유형 안정성(Type safety)을 사용한다. 이는 ‘러스트 코드에 정의되지 않은 동작이 없다’는 의미이며, 컴파일러 작성자가 세그폴트(세그멘테이션 오류), 데이터 레이스, 아웃-오브-바운드 메모리 액세스와 같은 것을 참조하는 데 사용하는 용어다. 

러스트 커뮤니티는 ‘거의 안전한(almost safe)’ API를 절대 허용하지 않는다. 모든 사람이 합리적이고 타당한 작업을 하는 한 코드가 작동하는 것만으로는 충분하지 않다. 

코드는 작동해야 한다. 생산성 원칙에 반할 수 있기 때문에 러스트는 다른 러스타시안 개발 원칙에 부담을 줄 가능성을 줄이고자 (정보를 담은) 문서와 오류 메시지를 전달한다. 

러스트가 안정성을 제공하는 두 번째 방법은 모든 경우를 고려하는 것이다. 이는 무엇을 의미할까? 러스트는 오류 조건을 숨기지 않으며, 모든 가능성을 명시적으로 나열하도록 권장한다는 것이다(또는 무언가 생략됐음을 인정한다). 러스타시안 원칙에 따르면 러스트가 이 하위 원칙을 달성하는 방법은 아래와 같다. 
 

“러스트는 열거형을 반환하는 기능적 언어에서 개척된 접근법을 채택한다. Result 열거형을 사용하면 오류를 강제로 고려하는 방식으로 오류 신호를 보낼 수 있다. 하지만 오류를 처리하는 가장 일반적인 방법은 오류를 호출자에게 전파하는 것이며, 생산성을 느끼려면 이 작업이 간결해야 한다. 사용자에게 오류 경로를 계속 표시하고 완전히 간과하지 않도록 하는 동시에 생산성을 복원하기 위해 러스트의 ? 작업자가 추가됐다.”


큰 오류 메시지와 같은 것은 실제로 언어 자체의 기능이 아니라 러스트의 전반적인 안정성 보장을 지원하는 커뮤니티 행동이다. 이러한 원칙 중 일부는 코드로 표현되는 반면, 다른 일부는 커뮤니티 행동을 통해 전달된다. 따라서 러스타시안 원칙에 ‘러스타시안이 되는 방법(How to Rustacean)’을 포함하고 있다는 게 놀라운 일은 아니다. 

• 친절하고 배려하라
• 사용자에게 즐거움을 선사하라
• (당신의 전문 지식을) 보여줘라 
• 타인의 지식을 인정하라
• 어딘가부터 시작하라
• 계속 팔로우하라
• 지식을 나누어라
• 믿고 위임하라


러스트가 상당 부분 성공한 이유는 러스트 커뮤니티에서 러스트가 의미하는 중심 교리를 희생시키려 하지 않았기 때문이다. 오소(Oso)의 CTO 샘 스콧은 필자에게 “러스트는 가드레일이 있는 시스템 프로그래밍 언어”라고 말했다. 

이러한 가드레일은 러스트 개발 및 채택에 중요한 것으로 드러났다. 이는 러스타시안 원칙에 의해 보존되며, 러스트가 진화하더라도 미래에 어떤 모습일지 알려준다. 

* Matt Asay는 아마존 웹 서비스(AWS)의 Principal이다. 어도비의 개발자 에코시스템 총괄, 몽고DB의 비즈니스 개발, 마케팅, 커뮤니티 부문 부사장을 역임한 바 있다. ciokr@idg.co.kr






 

X