스텁
1k
2019-03-20 08:31:12 작성 2019-03-20 08:36:47 수정됨
10
2027

C/C++ 언어를 다시 생각해야 되나 봅니다


최근에 언어 관련 토론이 좀 있어서 그렇지만, 조금 다른 각도입니다.

JS 생태계에 어느정도 익숙해져서 다음 기술스택으로 어떤것에 제 시간을 투자할까 고민중이였습니다. 개인적으로 자바는 좀 별로 였고 파이썬/고랭에 관심이 갔는데 파이썬은 머신러닝에 요즘 핫하지만 동적타입 인터프리터 언어라는 점에서 JS와 좀 겹쳐서 백엔드에서 요즘 강세인 고랭쪽으로 기울었습니다.

그 와중에 역시 C/C++이 뭔가 개발자 갬성이 있어서 개발자 간지하면 C/C++이라는 막연한 느낌적인 느낌때문에 그것도 역시 끌렸으나 C/C++은 좝마켓이 좀 좁다는것, 제가 정확한 워딩을 기억하지 못지만 임베디드 쪽에 있었던 지인의 의견으로 매크로? 들어가기 시작하면 도대체 언어 자체로는 이해하기 어려워진다. 아마도 너무나 하드웨어 종속적이다...라는 뉘앙스로 기억을...틀릴수도 있으니 이것에 대해서는 이견 제시 안하셔도 됩니다.

그리고 언어에 대해서 지인들과 이야기 할때 항상 나오는 이야기가 언어야 아무때나 하면 되지 2주면 다 띌수 있는건데...뭐 이런식의 의견이 항상 나옵니다. 당연히 언어자체로는 뭐 문법들이 특이할것도 없구요, 제가 중요하게 생각하는건 그 언어의 개발 생태계가 얼마나 잘 되어 있냐입니다. 언어 하나로만 따지면 베이직을 해도 되죠. 그 언어로 할수 있는게 없어서 그렇지. 

근데 최근에 검색을 하다가 이미 몇개월전에 이름은 알고있었던 와즘(wasm) 즉 웹어셈블리에 대해서 좀 다시 검색을 하다보니..이것이 보통 c/c++코드를 컴파일 해줘서 wasm으로 변환해주고 wasm이 브라우저나 노드에서 돌아갑니다. 그러면 메모리 관리나 가비지 컬렉션(이건 차후에 지원예정)등 로우레벨 언어의 장점을 사용하면서 브라우저/노드 환경에서 사용이 가능하게 되더라구요.

웹어셈블리는 이미 크롬/파폭/엣지/사파리등에서 네이티브하게 지원하고 있구요. 결과적으로는 c/c++/rust 등의 언어 -> 컴파일 -> 중간코드(wasm) -> 브라우저/노드(즉 vm과 같은 개념) 로 되어  가상 머신격인 브라우저 위에서 돌아가는 C/C++ 소스코드라는 개념으로 생각하니 상당히 흥미로웠습니다

c/c++이라는 언어를 개발환경에 많이 구애 안받고 웹생태게에서 쓰면서 익숙해진다음 혹시라도 원한다면 하드코어한 c/c++ 프로젝트도 건드려볼수 있는 다리가 되지 않을까 하는 기대감이 생겼습니다. 레디스를 쓰면서 레디스 코드베이스를 들여다보고 싶은 욕구가 있었는데 사실 c로 되어있어서 볼생각도 안했는데 조금 만만해지는거죠.

JS가 장난감 언어라는 오명을 웹생태계가 다시 살려낸것처럼 C/C++도 접근하기 힘든 언어라는 장애물을 wasm이 해결해주지 않을까 하는 기대감이 생겼고, 시간을 투자한만큼 뽑아낼수 있는(좝 마켓) 가능성도 있지 않을까 하는 기대감이 생겼습니다. 또한 웹 생태계에서 벗어나지 않으니 시너지 효과도 기대되구요.

혹시 wasm에 관심있었던 분들이 있었다면 여러가지 의견이 궁금해서 글 올려봅니다. 

0
0
  • 댓글 10

  • mirheeoj
    8k
    2019-03-20 08:48:26

    매니지드 C/C++의 한 종류로군요. 브라우저 기반이고, 스탠드얼론 실행도 가능하니 비록 언어와 구조는 다르지만 일렉트론 생각이 나네요 


    저런 기술을 기반으로 UI설계만 좀 쉽게 할 수 있으면 좋을것 같은데.. IDE를 통해 위지윅 방식으로 쉽게 UI를 붙일 수 있으면 얼마나 좋을까요. 구조적으론 혹해서 배워보고 싶다가도 문외한이 시도하기엔 UI에 너무 손이 많이 가서 계속 포기하게 됩니다. 


    그리고 이건 좀 딴 얘기지만 잡 마켓 크기는 해외로 눈을 돌리면 되긴 합니다. 



    0
  • 스텁
    1k
    2019-03-20 08:56:32

    네 JS도 브라우저 엔진을 써서 노드 및 일렉트론을 활용하고..이것도 언어만 다르고 브라우저 위에서 도는건 비슷하다고 봐도 되지 않나싶습니다. https://webassembly.org/demo/Tanks/ 이게 데모인데 유니티를 쓴 C++를 돌리는거 같습니다. 네 잡마켓은 해외가 아무래도 좀더 다양한데도 C/C++ 만 전문으로 필요한 자리는 다른 자리에 비해서는 확연히 적은거 같습니다.

    0
  • mirheeoj
    8k
    2019-03-20 08:59:20

    UI 구현하려면 결국 웹과 자바스크립트로 직접 구현해서 써야 한다는 건데, 물론 이건 UI는 기존의 좋은 기술들을 그대로 쓰고 내부로직을 개선하는 게 저런 것들의 애초 목표이자 장점이니까 당연한 일이겠지요..


    근데 문외한 입장에선 아무래도 어렵게 느껴져요. GUI 초창기 시절에 콘솔이나 DOS 프로그래머들이 잠시 어려움을 겪다가 IDE를 통해 위지윅 방식으로 쉽게 UI생성이 가능한 방법이 나와서 금방 적응했듯이, 그런 식으로 접근할 만한 뭔가가 좀 있었으면 좋겠습니다. 웹개발자들에게는 거저라고 하지만, C/C++개발자들은 그렇지 않으니 말이죠 

    0
  • 세브라이드
    1k
    2019-03-20 09:00:01

    평소에 관심있었던 사람으로서...

    1. C, C++을 큰 규모의 프로덕션 소프트웨어에서 사용하는 프로젝트는 예나 지금이나 게임밖에 없습니다. 그렇게 속도를 중시하는 금융계도 고수준 언어인 자바만으로도 개발이 되고, 자바같은 고수준 언어를 써야지 성능 대비 신뢰성, 유지보수성이 올라갑니다.


    2. ie를 지원하지 않습니다. ie의 '완전한 사망'(예를 들어 ms에서 ie 강제 삭제 업데이트에 착수한다던가 등의)이 아직도 먼 이야기인 현재입니다. ie 호환성까지 챙겨야 하는 큰 규모의 프로젝트에서 wasm을 쓰기 위해선 wasm ie polyfill도 개별적으로 작성해야 합니다.


    3. 스트리밍 서비스에서 사용처가 있을 수도 있다곤 생각합니다. 넷플릭스, 왓챠 플레이 등에서는 wasm을 써서 구형 노트북에서도 자사의 서비스를 이용 가능하게 만드는게 매리트가 있을 수 있죠. 특히 넷플릭스는 유저가 0.1% 늘어도 어마어마한 이득일 겁니다. 하지만 이는 반대로 말하면 넷플릭스, 왓챠 플레이 등의 동영상 스트리밍 서비스나, 앞으로 등장할 게임 스트리밍 서비스 정도는 되어야 wasm을 쓸 수 있다는 것을 말합니다. 그정도 사이즈는 되는 프로젝트여야 극단적인 언어 스피드를 필요로 하며, wasm ie polyfill까지 개발하면서도 이득을 볼 수 있을 테니까요. 이는 wasm의 취직처가 매우 협소하고 굉장히 고레벨의 개발자를 요구하는 일자리뿐일 것이라는 것을 의미합니다. 스택 오버플로우 상위 5%의 괴물들이 뛰노는 그런 공간일 테지요.


    저는 이렇게 생각하고는 ie가 사망하기 전에는 wasm에 관심을 가지지 않기로 했습니다. 혹 이견이 있으시다면 말씀해주시면 감사하겠습니다. 제가 잘못된 걸 깨달은다면 좋은 일이니까요.

    0
  • 스텁
    1k
    2019-03-20 09:18:40 작성 2019-03-20 09:20:17 수정됨

    mirheeoj/ 현재의 웹UI는 html/css를 그냥 다들 편하게 쓰는거 같습니다. 저는 프론트엔드쪽에 포커스가 아니라 좀 그렇긴 하나..드림위버가 gui의 마지막이였던지..충분히 효율적이다는 인식으로 보여요. 분업화 한다면 C/C++전문가들은 코어 모듈들에 대한 개발을 담당하고..프론트엔더들이 UI만들고 이런식이지 않을까 싶긴 합니다

    세브라이드/ 시장성에 대해서 이야기 해셨는데 동의합니다. 게임같은 앱을 만들어야 하는 서비스를 해야 이점이 있다는 점에서는 역시 다시한번 좀 제한적이긴 하구요 다만 저는 IE는 이제 더이상 신경쓰지 않고 있고 c/c++을 써보고 싶은 마음에서 좀 더 가점을 주고 있고...현재로서는 기타 도구도 고도화 안되있고 시장성도 아직은 미지수이긴 하나 각각의 브라우저들이 공통적으로 밀고 있는 점에서 전망은 괜찮은거 아닌가라고 개인적으로 생각합니다.. 아직은 살짝 시기상조이나..흥미가 있다면 뛰어들어봐도 괜찮아보이는 그런정도인거 같습니다.

    0
  • mirheeoj
    8k
    2019-03-20 09:19:06

    플랫폼 인디펜던트에 대한 수요는 항상 있어왔습니다. 파편화가 항상 문제이지만 이는 대부분 렌더링과 프론트엔드와 관련된 것이기에 아예 분리해버리고 비즈니스 로직만 타겟으로 삼는 것도 맞는 방향이라고 보고요 (물론 그래서 저는 손을 못 대지만... 전 구식이라 IDE에서 마크업 수동코딩 없이 한큐에 UI까지 다 됐으면 좋겠어요 ) 비즈니스 로직을 하나만 만들고 플랫폼에 대한 신경은 접어도 (남에게 미뤄도) 된다는건 대단한 매력이지요. 특히 다양한 고객을 끌어들여야 하는데 플랫폼 하나하나에 자세하게 신경을 쓰기는 어려운 산업현장용 앱에서 빛을 발할거라 봅니다. 기존 웹앱으로도 당연히 가능하지만, 이쪽 일은 클라이언트 자체에 비즈니스 로직이 많이 담겨있어야 하는 경우가 있어서요. 


    그래서 이쪽 기술에 대한 전망을 저는 밝게 봅니다만, 그 승자가 WASM이 될진 모르겠습니다. 회사 입장에선 해당 일을 할 수 있는 사람을 뽑아 쓰고 나서 필요없어진 사람은 자르면 되기에 굳이 전통적인 언어지원에 민감해할 이유가 없거든요. 기존 레거시 프로젝트에 컨버트 버튼 눌러서 UI포함해서 한큐에 WASM으로 싹 바뀐다면 또 모르겠지만 그건 불가능하고.. 


    IE문제는.. 한국에 계신 분들이라면 걱정이 되는게 당연할것 같네요. 이건 WASM뿐만 아니고 비슷한 컨셉트를 지닌 기술 모두에게 해당되겠죠. IE에 신기능이 추가될 일은 없으니.. 

    0
  • freestyle
    3k
    2019-03-20 09:36:59

    제가 알기로는 WASM에서 C++가 필요조건은 아닌 것 같습니다. 그러니까 WASM 나오면 그게 꼭 C++를 알아야 한다는 것은 아닌 것 같다는...

    그리고 WASM이 Javascript를 대체할 것이다는 그런 주장들은 예전부터 나오던 말이었는데 공식 FAQ에도 있지만 NO! 입니다. 다만 그 동안 Javascript가 독점(?)한 웹이 다양한 언어로도 가능할 수도 있다 하는 맥락이 아닐까 싶네요.

    관련없는 이야기일 수도 있지만 이더리움 같은 경우도 현재 EVM을 앞으로는 eWASM으로 바꾸려는 장기적인 로드맵을 가지고 있고 EOS같은 경우는 이미 C++로 컨트랙트를 작성해서 WASM이 실행하는 형태로 알고 있습니다.

    0
  • mirheeoj
    8k
    2019-03-20 10:03:05

    HTML 위지윅 설계가 영 좋지 않다는 건 이미 증명됐다고 봐도 되고 그래서 없는 것이겠지요. 그건 이해하는데, 전 HTML이 필요가 없어요. (그럼 왜 관심을 가지냐 하면, 다른 장점들도 있으니..)

    레거시 프로젝트에서 주로 작업해온 사람이 편하게 WASM과 연동하여 사용할 별도의 위지윅 기반 UI프레임웍이 있으면 좋을 것 같아요. (위에 유니티를 사용한 예제가 구조적으로 딱 맞는 예인데, 전 유니티를 못합니다.) 물론 예전에 비슷한 시도가 모두 시원찮았던 걸로 봐선 영 수요가 없긴 한 모양입니다만... 기능은 별로여도 되니 윈폼같이 간단하게 연동가능한 건 어디 없을지. 

    .... 좀 찾아보니까 진짜 유니티등 게임 엔진쪽밖에없네요. 간단한 UI하나 만드는데도 마크업을 써야 되는 데에 거부감이 있어서 익히 알려진 단점에도 불구하고 그냥 위지윅 방식을 찾는 건데, 이런 걸로는 상용앱을 만들기 어려운 게 사실이니 다 도태되었나 봅니다. 

    0
  • 이뉴
    543
    2019-03-20 10:13:38 작성 2019-03-20 10:20:34 수정됨

    이견 제시까지는 아니지만, 작성글 중에 의견을 드리자면 임베디드를 하시는 지인께서 하신 얘기중 언어적으로 어려운게 아니라 로직적으로 어렵다고 말씀하시는 거 같습니다.

    보통 임베디드의 어플리케이션이야 C/C++ 로 구현할 수도 있지만, 만약 펌웨어단이라면 그냥 네이티브 C 겠죠.(아닐수도 있습니다)

    어렵다고 느껴질 수 밖에 없는게 조금이나마 속도를 더 높이기 위해서 함수 콜 보단 매크로 작성하여 콜을 하게 되는데 이게 디버깅이 어렵습니다. 그리고 가독성도 떨어지고요

    C 자체가 어려운 언어가 아닙니다. 포인터 개념만 잘 넘어간다면요. 물론 메모리 관리야 그건 개발자 경험에서 우러나오는 걸 테고요.

     

    그리고 잡마켓이 좁다고 하셨는데, 관점이 저와는 좀 다르군요.

    물론 분야야 많이 다르겠지만 요구하는 분야 업계에서 요즘 수요가 꽤 높습니다. 웹 덕분에 레드오션에서 블루오션이 된 격이죠.

    전 그 부분에서 해당 언어 개발자로써 경쟁력이 더 높아졌다고 생각합니다.

     

    또 개발생태계야 뭐 프레임워크나 라이브러리 혹은 편의 툴 말씀하시는지는 모르겠지만, 부족한게 아니라 네이티브도 역사가 긴 만큼 아주 많습니다.

    다만, 문제가 알다시피 쓰기가 좀 뭐랄까 트렌디 하지 않다라고 해야할까요 ㅎㅎ;;

    생산성이 떨어지는 건 어쩔수가 없는 거 같아요. 대신 개발자가 좀 더 강력한 제어를 할 수 있으니 위안삼아야죠.


    여튼 본문에서 논의 하고자 하는 관점이랑 살짝 빗나가긴 했으나 개인적인 의견으로 생각해주시면 좋을 거 같습니다. 


    wasm 이라는 건 첨 들어봤는데 흥미가 좀 생기긴 하네요. 찾아봐야 겠네요

    0
  • 아스키
    10k
    2019-03-20 16:52:14

    C/C++ 덕분에 JS가 더욱 확장하고 있습니다. JS로 변환해주는 C/C++ 엔진덕분에..

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.