갤보니 "웹 땔감" 같은 표현도 있고, 여기도 저수준 언어 관련해서 환상이나 편견을 가진 사람들 많은 거 같아서 개념 정리해준다. 디씨 답지 않게 장문이 될지 모르는 건 좀 양해해라.


길면 안 읽을까봐 결론부터 쓰고 시작하면, 웹은 C보다 쉬울 수도 있고 어려울 수도 있어. 그리고 '범용 언어'라고 부르는 것들은 다 나름 쓰임새가 있고, 뭐가 더 어렵고 쉽고 따지는 게 큰 의미가 없다. 이제 왜 그런지 설명을 할께.


웹 무시하는 애들이 흔히 하는 착각과 달리 사실 웹이 저수준보다 훨씬 복잡하다. 그럴 수 밖에 없는게, 고수준 언어란게 바로 그런 복잡도 때문에 나온 것들이거든. 추상화 계층 아래로 갈수록 최적화와의 싸움이고 위로 올라올수록 복잡도와의 싸움이야.


이렇게 말하면 "아닌데? 웹 해봤는데 별거 없던데?"라고 할텐데, 그건 니가 접해본게 그 추상화 계층의 맨 꼭대기단의 일부만 보고 그게 전부라고 이해했기 때문이다. 가끔 개발 어설프게 아는 단계에서 코딩 좀 되기 시작하면 뭐 시간만 주면 다 만들 수 있다고 허세 부리는 애들 있는데, 그건 아직 진짜 복잡한게 어떤 건지 경험을 못해봐서 그런거다.


요즘 시대엔 혼자 다할 수 있는 개발 분야는 별로 없어. 웹 브라우저 하나만 해도 내부 뜯어보면 끝장나게 복잡할거다. 프레임워크로 웹 개발하다가 오류 터지면 스택트레이스 나오는거 보면 수 백 줄 넘어가는 경우도 많아. 그게 다 계층이거든.


그렇게 계층 쌓으면 성능도 나빠지는데 왜 그런짓을 하냐면, 인간의 두뇌라는게 한계가 있기 때문이다. 소프트웨어로 하는 일은 점점 다양해지고 복잡해지는데, 아무리 천재라도 그걸 혼자 커버하는게 불가능해진거지.


대충 예전엔 자급자족하다 점점 직업이 분업화하고 전문화 하는 거하고 비슷한 이야기야. 하다못해 2만원 쯤 주면 사는 컴퓨터 마우스 니들 혼자 그 품질로 만들려면 할 수 있을 것 같음? 근데 그렇다고 공장에서 마우스 만드는 사람은 다 천재인가? 아니지...


소프트웨어 개발도 비슷해. 마우스 하나 만들려고 해도 뭐 재료부터 전자부품 등등 다 수 많은 분업화된 계층에서 여러 사람들이 노하우를 쌓아서 만든 작업 공정으로 만들어서, 최종적으로 조립하는 사람은 예컨대 전자회로에 대한 전문 지식없이도 완제품을 만들겠지.


C가지고 부심 부리면서 "웹 땔감"이니 뭐니 하는 건, 쉽게 말해서 공장에서 다 완성된 부품 조립하는 거 보고 그게 마우스 만드는 과정의 전부라고 생각하는거야.


웹이 진입장벽 낮은 건 사실이지. 근데 그건 그냥 간단한 페이지 만드는 건, 다 준비된 부품가지고 마우스 최종 조립하는 작업이니 쉬워 보이는 것 뿐이다. 스프링으로 그냥 예제보고 따라해서 페이지 찍어내는 건 쉽지. 근데 스프링 같은 걸 만드는 것도 그렇게 쉬울까?


다시 반복하지만, 고수준은 복잡도와의 싸움이고, 아무리 천재라도 모든 걸 다 혼자할 수는 없어. 그래서 라이브러리니 프레임워크니 디자인 패턴이니 추상화 계층이니 하는 개념들이 나온거고.


자바스크립트 쉬운 거 같지? NPM에 등록된 자바스크립트 패키지가 백만 개 넘는 건 알고 있음? 평범한 개발자가 그 중에서 몇 프로나 이해하고 있을까? 그 중에서 RxJS나 Rambda 같은 거 하나만 뽑아보자. 니들 저런거 처음 배워서 제대로 활용하려면 얼마나 걸릴 거 같냐?


그래서 개발 난이도는, 요샌 분업화가 많이 되서 어디까지 파보느냐에 따라 결정되는 거지 어디서부터 파느냐에 따라 결정되는 건 아니야. 니들이 "웹 땔감"이니 뭐이 하는 건 웹이 쉬워서가 아니라 우리나라 SI 시장이 이상하게 꼬여서 그 동네에선 뭘 깊게 팔 필요가 없기 때문에 그런 것 뿐이다. 웹도 깊게 파면 드럽게 복잡해, 아니 저수준 보다 훨씬 복잡하다. 아까 말했지만 복잡도는 위로 갈수록 증가하거든.


아, 오해할까봐 말하는데, 비슷한 지능의 고수준 개발자, 저수준 개발자가 있으면 고수준 하는 쪽이 더 어렵다는 이야기가 아니야. 처음 입문할 땐 롤이 스타크래프트 같은 RTS 보다 하기 쉽지? 일단 단축키 같은 거 외울 게 훨씬 적잖아. 근데 그럼 롤 프로게이머 되는게 스타로 프로게이머 하는 것보다 조금이라도 쉬울까?


그렇지가 않은게, 사람들 경쟁하는 분야에서 한 쪽이 쉬워지면 그 쉬워진 만큼 다른 쪽에서 더 많은 활동을 하기 때문이다. 스타2가 스타1에 비해서 조작이 훨씬 쉬운데, 그게 쉬워지니까 프로게이머들 교전에 더 집중해서 손이 많이 가게 됐잖아. 비슷한 거다.


고수준이란 건 한 마디로 라이브러리, 프레임워크로 이런 저런 부분에 대한 복잡도는 다른 사람이 처리해줄테니까 여유 생긴 만큼 넌 다른 걸 더 신경쓰라는 것 뿐이다. 그리고 요새 개발은 맘먹고 파면 신경 쓸게 드럽게 많아.


그리고 고수준이 특히 힘든 부분이, 그런 계층 분화가 엄청 빨리 일어난다는거다. 특히 웹이 그런데, 조금 과장 보태면 새로운 프레임워크나 라이브러리 몇 일에 하나씩 나온다. 그게 쌓인 결과가 아까 말한 NPM 패키지 백만 개 같은 상황인거고.


정리하면, 프로그램 계층이란 건 아래로 갈 수록 최적화와의 싸움이고 위로 갈수록 복잡도와의 싸움이란 것, 그리고 소프트웨어 공학의 역사 자체가 바로 이런 저런 추상화 계층을 통해서 그런 복잡도를 개발자 한 사람이 감당할 수 있게 쪼개는 방법을 연구한 역사란거다.


그래서 어디서 시작하건 그냥 니들 두뇌 한계 만큼 파고 들어갈 수 있고, 웹에서 출발해서 파 내려가도 그 만큼 파면 C 가지고 아래부터 파고 올라가나 복잡한 건 똑같다는거야.


이 동네에선 SI로 웹 시작하면 애초에 뭘 팔 필요가 없으니 개나소나 다 하는 거고, 그 만큼 잘하는 사람이 드문 것 뿐이다.