
무슨 일이 있었나요?
Clojure로 웹 애플리케이션을 만들어 본 분이라면 한 번쯤 이런 고민에 빠진 적이 있을 거예요. "웹 서버, 데이터베이스 커넥션, 백그라운드 스케줄러... 이 조각들을 대체 어떤 순서로 켜고, 어떻게 안전하게 끄지?" Clojure 진영에서 가벼운 풀스택 프레임워크로 사랑받아 온 Biff가, 바로 이 문제를 전담하는 작은 라이브러리 biff.core를 따로 떼어내서 공개했어요.
이게 왜 중요하냐면요. Biff는 원래 "혼자서도 SaaS 하나는 뚝딱 만들 수 있는" 1인 개발자용 프레임워크를 표방해 왔거든요. 그런데 프레임워크 전체를 통째로 가져오긴 부담스럽고, 그 안에서 가장 알짜인 '시스템 조립' 기능만 쏙 빼서 쓰고 싶다는 수요가 있었어요. 그래서 핵심 엔진을 독립 컴포넌트로 분리한 거죠.
시스템 조립이 대체 뭔가요?
이게 뭐냐면, 애플리케이션을 켤 때 필요한 '상태를 가진 부품들'을 켜고 끄는 생명주기 관리예요. 예를 들어 식당을 연다고 생각해 봐요. 가스 밸브를 먼저 열고, 그다음 불을 켜고, 재료를 준비하고, 마지막에 문을 여는 순서가 있잖아요. 끌 때는 반대로 문을 닫고, 불을 끄고, 가스를 잠그고요. 웹 앱도 똑같아요. DB 커넥션 풀이 먼저 떠 있어야 웹 핸들러가 동작하고, 종료할 땐 요청을 다 받은 뒤에 커넥션을 닫아야 안전하거든요.
biff.core는 이걸 '컴포넌트들의 리스트'로 표현해요. 각 컴포넌트는 시작 함수와 종료 함수를 가진 단순한 맵(map)이고, 이걸 순서대로 시작하면서 시스템(system) 맵에 차곡차곡 결과를 쌓아 올려요. 앞 컴포넌트가 만들어 둔 DB 커넥션을 뒤 컴포넌트가 그대로 꺼내 쓰는 식이죠. 종료할 땐 정확히 역순으로 정리하고요. 개발 중에 코드를 고치면 시스템 전체를 깔끔하게 재시작(restart)해 주는 기능도 들어 있어서, REPL을 켜둔 채로 빠르게 반복 개발하기에 좋아요.
기존 방식과 뭐가 다를까
Clojure 생태계엔 이미 이 영역의 터줏대감들이 있어요. Component(Stuart Sierra가 만든 원조), Integrant(데이터 기반 설정으로 유명한), Mount(전역 var 기반으로 간편한) 이렇게 세 개가 대표적인데요. 각각 철학이 달라요. Component는 레코드와 프로토콜을 써서 다소 격식 있고, Integrant는 EDN 설정 파일로 시스템을 선언적으로 그리는 걸 좋아하고, Mount는 "그냥 def 처럼 쓰자"는 실용주의예요.
biff.core의 포지션은 이 사이 어딘가의 '최소주의'예요. 별도의 매크로나 무거운 추상화 없이, 그냥 평범한 맵과 함수의 벡터로 시스템을 표현하거든요. 새로운 개념을 외울 게 거의 없다는 게 가장 큰 매력이에요. Integrant처럼 강력한 설정 분리를 원하면 좀 부족할 수 있지만, "이 정도면 충분한데 왜 그렇게 복잡하게 해?"라고 느꼈던 사람들에겐 딱 맞는 무게감이죠.
한국 개발자에게 주는 시사점
사실 한국에서 Clojure를 실무에 쓰는 곳은 많지 않아요. 그래서 "나랑 상관없는 얘기"로 넘기기 쉬운데, 저는 여기서 배울 점이 한 가지 있다고 봐요. 바로 '생명주기 관리를 명시적으로 다루는 습관'이에요. Spring을 쓰는 분들은 @PostConstruct, @PreDestroy나 빈(bean) 초기화 순서로, Node.js 쓰는 분들은 graceful shutdown 처리로 똑같은 문제를 마주하거든요. 종료 시그널을 받았을 때 진행 중인 요청을 다 처리하고 커넥션을 닫는 로직, 의외로 많은 서비스가 대충 짜고 넘어가요.
Biff.core가 보여주는 건 "이런 건 프레임워크 마법에 숨기지 말고, 그냥 시작/종료 함수의 리스트로 눈에 보이게 두자"는 태도예요. 프레임워크가 알아서 해주는 게 편하긴 하지만, 문제가 터졌을 때 디버깅하기 어려운 것도 그 마법 때문이거든요. 작은 프로젝트라면 이런 명시적 접근을 한번 흉내 내보는 것도 좋은 공부가 돼요.
마무리
결국 핵심은 "앱을 켜고 끄는 순서를, 마법이 아니라 읽을 수 있는 코드로 만들자"는 거예요. 여러분의 프로젝트는 종료 시그널을 받았을 때 진행 중인 작업을 안전하게 마무리하고 있나요, 아니면 그냥 프로세스가 강제로 죽고 있나요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공