확장 모듈 개념
주제 목차 · 다음: function 모듈 실습
이 문서의 결과: function/repository/command/graphclient 모듈의 역할과 사용 시점을 구분한다.
확장 모듈 개요
| 모듈 | 역할 | 언제 사용 |
|---|---|---|
function | C# 또는 Node.js로 작성한 서버 함수 실행 | SQL로 표현하기 어려운 로직(외부 API 연동, 복잡한 계산) |
repository | 단일/다중/이미지 파일 업로드·다운로드 관리 | 게시글 첨부파일, 이미지 에디터 업로드 |
command | OS 명령이나 사전 정의된 작업 실행 | 배치 성격의 관리 작업 |
graphclient | 그래프 데이터베이스 질의 | 관계 중심 데이터 조회가 필요할 때 |
각 모듈도 dbclient와 동일하게 contracts/{모듈}/{ApplicationID}/{ProjectID} 구조로 파일을 관리합니다. 자세한 예시는 소스 디렉토리 구조의 function 디렉토리 구성을 참고합니다.
In-process로 실행된다는 것의 의미
이 모듈들은 대부분 ack 서버와 같은 프로세스 안에서 실행됩니다(In-process). 별도 네트워크 호출 없이 함수/모듈 호출만으로 처리되므로 빠르지만, 하나의 모듈에서 발생한 예외가 전체 서버 안정성에 영향을 줄 수 있다는 점도 함께 고려해야 합니다.
서버리스 관점에서 본 function
function 모듈은 이벤트(거래 요청)에 응답해 실행되는 독립적인 코드라는 점에서 서버리스 Function 개념과 맞닿아 있습니다. 장단점은 서버리스 Function에서 확인할 수 있습니다. 함수 수가 늘어날수록 관리·디버깅이 어려워질 수 있다는 단점을 특히 주의합니다.
어느 모듈을 선택할지 판단하기
| 요구사항 | 선택 |
|---|---|
| 게시글에 이미지·첨부파일을 붙여야 한다 | repository |
| 외부 API를 호출해 결과를 가공해야 한다 | function |
| 정기적으로 반복되는 관리 작업을 실행해야 한다 | command |
| 여러 SQL로는 표현하기 힘든 관계형 탐색이 필요하다 | graphclient |
자주 하는 오해
"복잡한 로직은 무조건 function으로 빼야 하나요?"
아닙니다. 07. dbclient SQL 계약에서 다룬 것처럼 SQL의 CASE 문이나 동적 SQL로 해결되는 수준이면 SQL로 남겨 두는 편이 유지보수가 더 쉽습니다. function은 SQL로 도저히 표현할 수 없는 로직(외부 API 호출 등)에만 사용합니다.
이것만 기억하세요
- 모듈 선택은 "요구사항이 SQL로 되는가"를 먼저 확인한 뒤 결정한다.
- 확장 모듈은 대부분 ack와 같은 프로세스에서 실행되어 빠르지만, 장애 격리가 SQL보다 어렵다.