어셈블리(Assembly)로 웹 서버를? 저수준 프로그래밍의 세계로!

by DD
3주 전
조회수 28

aarch64 어셈블리(Assembly)로 작성된 웹 서버 'ymawky'는 저수준 프로그래밍의 복잡성과 장점을 보여줌

Raw Darwin 시스템 콜(System Call)을 사용하여, 표준 라이브러리 없이 GET, PUT, DELETE 등 HTTP 메서드 지원

요청 파싱(Request Parsing), 보안 검사(Security Checks), 오류 처리(Error Handling) 등 웹 서버의 핵심 기능 구현에 초점

Slowloris 공격 방어(Slowloris Attack Defense)를 위한 타임아웃(Timeout) 설정 등, 보안 강화(Security Hardening) 노력 강조

저수준 프로그래밍의 어려움과 가치

어셈블리(Assembly)로 웹 서버를 구축하는 것은 저수준 프로그래밍(Low-Level Programming)의 본질을 보여준다. 특히, 표준 라이브러리(Standard Library)의 부재는 개발자가 모든 시스템 콜(System Call)을 직접 관리해야 함을 의미한다. 예를 들어, 파일 열기(File Open)와 같은 기본적인 작업조차도 레지스터(Register) 설정, 오류 처리(Error Handling) 등을 수동으로 처리해야 한다. 이러한 과정은 개발 시간을 증가시키지만, 시스템의 세부 동작(Detailed Operation)에 대한 깊이 있는 이해를 가능하게 한다.

HTTP 요청 파싱(Request Parsing)의 복잡성

웹 서버의 핵심 기능 중 하나인 HTTP 요청 파싱(Request Parsing)은 어셈블리(Assembly) 환경에서 더욱 복잡해진다. 게시글에서는 문자열 파싱(String Parsing)의 어려움을 강조하며, GET, PUT, DELETE와 같은 다양한 HTTP 메서드를 지원하기 위한 헤더 분석(Header Analysis) 과정을 설명한다. 특히, Range 헤더(Range Header) 처리와 같은 세부적인 구현은 개발자가 모든 예외 상황(All Edge Cases)을 고려해야 함을 보여준다. 이러한 과정은 코드의 양을 늘리고, 디버깅(Debugging)을 어렵게 만든다.

보안 취약점(Security Vulnerability) 및 방어 전략

어셈블리(Assembly)로 작성된 웹 서버는 보안 측면에서 특별한 주의를 요구한다. 게시글에서는 Slowloris 공격(Slowloris Attack)과 같은 DoS 공격에 대한 방어 전략으로 타임아웃(Timeout) 설정을 제시한다. 또한, 경로 순회 공격(Path Traversal Attack)을 방지하기 위해 docroot 설정을 사용하고, O_NOFOLLOW 플래그를 통해 심볼릭 링크(Symbolic Link) 문제를 해결한다. 이러한 보안 조치는 저수준 프로그래밍 환경에서 보안 강화(Security Hardening)의 중요성을 강조한다.

성능 최적화(Performance Optimization) 및 트레이드오프(Trade-offs)

어셈블리(Assembly)는 성능 최적화(Performance Optimization)에 유리한 측면이 있지만, 동시에 복잡한 트레이드오프(Trade-offs)를 수반한다. 게시글에서는 fork-on-request 모델을 사용하여 각 요청을 처리하지만, 이는 프로세스 생성(Process Creation)에 따른 오버헤드(Overhead)를 발생시킨다. 또한, 동시 연결(Concurrent Connection) 처리에 있어서 nginx와 같은 이벤트 기반 모델에 비해 성능상의 제약이 있을 수 있다. 이러한 트레이드오프는 개발자가 시스템 아키텍처(System Architecture)를 신중하게 설계해야 함을 시사한다.

building a web server in raw arm64 assembly