일반 · CHAPTER 04

표준 도서관 — 225 내장함수와 24 라이브러리

한선씨로 처음 프로그래밍을 시작할 때, 많은 사람이 "바닥부터" 무언가를 만들려고 한다. 문자열을 자르려면 함수를 쓰고, 파일을 읽으려면 파일 라이브러리를 찾고, 웹 서버를 짜려면 네트워크 통신부터 수작업한다. 그러나 한선씨의 철학은 다르다. 도서관에 이미 다 있다.

생각해보자. 책장에는 두 종류의 책이 있다. 손에 쥐고 항상 쓰는 연장(내장함수 225개)과, 필요할 때만 뽑아 쓰는 두꺼운 책(표준라이브러리 24개). 컴파일러가 이 모든 것을 한 덩어리의 기계어(TOAU)로 풀어내면, 크라우니VM이 실행한다. 책과 연장의 구분은 우리의 손에만 있고, 기계 입장에서는 모두 같은 노래다.

손에 쥔 225개 연장

내장함수는 가져오기가 필요 없다. 한선씨 코드를 쓰는 순간 즉시 쓸 수 있다. 문자열 조작부터 시작해보자. 글자수로 문자 개수를 센다. 부분으로 일부를 뚝 떼어낸다. 포함으로 특정 글자가 있는지 묻는다. 이런 식으로 문자열 영역만 해도 수십 개의 함수가 손 안에 있다.

배열도 마찬가지다. 길이로 크기를 확인하고, 추가로 새 원소를 넣고, 정렬로 순서를 맞춘다. 파일 I/O는 읽기, 쓰기로 디스크와 대화한다. 네트워크는 TCP나 UDP 소켓을 열고, 데이터를 보내고 받는다.

수학 함수도 풍부하다. 거듭제곱과 루트가 있고, 사인, 로그, 무작위까지 있다. 암호화도 내장되어 있다. SHA256으로 해시를 만든다. 압축도, GUI 제어도, 3진 연산(우리가 태어난 수 체계!)도 모두 손 안에 있다.

일반 프로그래밍 언어가 몇 주일 기다려 라이브러리를 설치하는 일의 상당수가 한선씨에서는 키워드 하나로 끝난다. 이것이 내장함수 225개가 주는 첫 번째 뜻이다.

책장에서 뽑아 쓰는 24개 책

좀 더 복잡한 일이 필요하면 책장을 연다. 가져오기 "이름.한선"으로 표준라이브러리 24개를 꺼내 쓴다. 라이브러리들은 목적별로 묶여 있다.

웹 묶음: 라우터·미들웨어·인증·템플릿·뷰·스타일. 웹 서버를 짜려면 이 묶음에서 시작한다.

데이터 묶음: JSON·YAML·셀저장소·셀DB·바이트버퍼·큐. 구조화된 데이터를 다루려면 이쪽이다.

시스템 묶음: 설정·환경·프로세스·날짜·타이머·로깅·검증·네이티브·하드웨어. 운영 체제와 대화하려면 여기서 찾는다.

통신 묶음: 네트워크·TLS. 멀리 있는 장비와 안전하게 말하려면 이것들을 쓴다.

각 라이브러리는 그냥 확장이 아니라 생각의 틀이다. JSON 라이브러리를 쓰면서부터 너는 JSON처럼 생각하기 시작한다. 인증 라이브러리를 쓰면 보안 흐름을 그 도구의 언어로 표현한다.

규칙으로 생각하는 한 권 — 셀코어

세 번째 책장은 특별하다. 셀코어(1414줄, 15모듈)는 규칙기반 에이전트 프레임워크다. 함수 카탈로그를 넘어, "생각을 규칙으로 표현하는" 도서관이다.

룰생성, 룰조건추가, 룰변경추가라는 세 개의 키워드로 너는 코드를 함수 대신 규칙(rule)으로 짠다. "만약 고객의 등급이 VIP이고 구매액이 100만 원 이상이면, 배송료 무료"처럼 비즈니스 로직을 직접 규칙으로 써내린다. 상태기계도, 의사결정 에이전트도, 복잡한 분기 로직도 규칙 몇 줄로 깔끔해진다.

이것이 세 번째 책장의 뜻이다. 함수는 "하는 것"이고, 규칙은 "생각하는 것"이다.

무엇을 만들 수 있나 — 이미 도는 서버 10가지

책장의 크기를 가늠하려면, 그것으로 실제로 무엇을 만들었는지 봐야 한다. 추측이 아니라 증거를.

한선씨로 이미 구현된 서버는 10가지 이상이다. 웹서버, DNS 서버, 블록체인, 암호화폐 거래소, 은행 시스템, 메신저, 인증 시스템, SSR(서버 사이드 렌더링), AI 에이전트, 그리고 우리의 네트워크 프로토콜 CRNS. 라이브러리 조합만으로 풀스택이 선다.

이것은 자랑이 아니라 선언이다. 도서관은 전시품이 아니라 매일 쓰인다.

정직한 규모

현재 크라우니 생태계에는 서비스 210개가 등록되어 있다. 이 중 크라우니VM(한선씨)으로 돌아가는 서비스가 71개, Node.js로 돌아가는 서비스가 102개다. 한선씨 소스 파일은 8836개, 컴파일된 TOAU 파일은 449개다.

동시에 우리는 숨기지 않는다. Node.js가 아직도 더 많다. 도서관이 완성되지 않았다는 뜻이다. 그러나 이미 순수 TOAU(외부 의존 없음)로 즉시 대치 가능한 부분이 32%이고, 좀 더 느슨한 기준으로 세면 72~75%에 이른다. 사이드카(한선씨 주서버 + JavaScript HTTPS 브리지) 한 패턴을 표준화하면 약 90%에 닿을 수 있다.

도서관은 세상의 4분의 3을 이미 커버하고 있고, 한 패턴의 표준화만으로 9할에 도달할 수 있다.

책장이 아직 비어 있는 곳

그러나 정직함이 중요하다. 책장에는 여전히 비워진 자리가 있다.

첫째, 부동소수점이 없다. 고정소수점만 있다. 루트 2를 계산하면 1이 나온다. 삼각함수는 정수 라디안에서만 작동한다. 이것은 금융·회계 같은 분야에서는 큰 문제가 아니지만(돈은 어차피 정수다), 과학 계산이나 그래픽스에는 장벽이다.

둘째, TLS(암호화 통신)는 stunnel이라는 외부 도구에 의존한다. 한선씨 자체로는 구현되지 않았다.

셋째, 외부 인공지능(예: OpenAI)과 연결하려면 Node.js 사이드카가 필요하다. 한선씨만으로는 그 종류의 API 호출을 안전하게 하기 어렵다.

넷째, 대용량 텍스트 스트리밍에 제약이 있다. 한 번에 읽을 수 있는 크기(16KB)와 문자열이 가질 수 있는 최대 크기(64KB)가 정해져 있다.

또한 정수 오버플로는 약 1410억 대에서 발생하고, 나눗셈의 자연반올림 방식이 이진탐색을 무한루프로 만들 수 있다는 함정도 있다. 이런 것들을 알고 있으면 안전하게 피할 수 있다. 젖은 바닥에는 "주의" 표지판이 필요하다.

도서관이 가장 강한 곳, 약한 곳

크라우니코드라는 생성엔진이 한선씨 코드를 자동으로 생산하는데, 이 엔진의 자립도는 70%다. 30%는 아직 인공지능의 도움이 필요하다.

그런데 도메인마다 다르다. 수학 연산은 자립도 98%로 거의 완벽하다. 문자열 처리도 98%, 네트워크 코드도 97%, 알고리즘도 91%다. 반면 파일 I/O는 74%, 자료구조는 66%다.

이것은 무엇을 뜻하나? 강한 책장(수학·문자열·네트워크)에서 작업하면 손이 거의 안 간다는 뜻이다. 약한 책장은 아직 사람의 손길이 더 필요하다. 그리고 그것을 알면, 우리는 어디서 조심해야 하는지 안다.

도서관이 세상을 덮는 높이

궁극적으로 중요한 것은 이것이다. 표준 도서관만으로, 우리는 세상의 대부분을 한선씨로 다시 쓸 수 있다. 부동소수점 없는 정수 연산(테슬라가 쓰는 기법)으로 과학 계산의 벽을 돌파하고, RPN 정통 컴파일러를 수리하고, 사이드카 패턴을 표준화하면, 그 높이는 더 올라간다.

도서관은 완성품이 아니라 자라는 서가다. 무엇이 꽂혀 있고, 무엇이 비었고, 다음에 무엇이 꽂힐지를 정직하게 아는 것. 그것이 도서관을 제대로 쓰는 길이다.

내 맘 –

독자 게시판 — 함께 읽고 남기는 곳

불러오는 중…

크라우니 책방에 가입하고 무료로 읽기

첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.