본문으로 건너뛰기

확장 모듈 개념

주제 목차 · 다음: function 모듈 실습

이 문서의 결과: function/repository/command/graphclient 모듈의 역할과 사용 시점을 구분한다.

확장 모듈 개요

모듈역할언제 사용
functionC# 또는 Node.js로 작성한 서버 함수 실행SQL로 표현하기 어려운 로직(외부 API 연동, 복잡한 계산)
repository단일/다중/이미지 파일 업로드·다운로드 관리게시글 첨부파일, 이미지 에디터 업로드
commandOS 명령이나 사전 정의된 작업 실행배치 성격의 관리 작업
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 호출 등)에만 사용합니다.

이것만 기억하세요

  1. 모듈 선택은 "요구사항이 SQL로 되는가"를 먼저 확인한 뒤 결정한다.
  2. 확장 모듈은 대부분 ack와 같은 프로세스에서 실행되어 빠르지만, 장애 격리가 SQL보다 어렵다.