본문으로 건너뛰기

확장 모듈 개념

주제 목차 · 다음: 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보다 어렵다.