image
Akan.js
한국어
문서 (V1)
image
Akan.js
현재 Akan.js v1 문서를 보고 있습니다.최신 v2 문서 보기
문서 (V1)
MIT 라이선스 하에 배포되었습니다.
Akan.js 공식 컨설팅 서비스Akansoft
Copyright © 2026 Akan.js 모든 권리 보유.
시스템 관리자bassman
소개
• 시작하기
• 작동원리
• 실습하기
튜토리얼
• 상세하게 보여주기
• 상태 변경하기
• 서비스 내에서 상호작용
• 슬라이스로 표시하기
• 페이지를 통한 UX
• 스칼라 사용하기
• 인사이트 사용하기
• 데이터 연결하기
시스템 아키텍처
• 개요
• 백엔드 시스템
• 프론트엔드 시스템
• 환경변수
• 기본 스칼라 타입
• 도메인 기반 모듈
• CSS
모듈 규칙
• 개요
• model.constant.ts
• model.dictionary.ts
• model.document.ts
• model.service.ts
• model.signal.ts
• model.store.ts
• Model.Template.tsx
• Model.Unit.tsx
• Model.Util.tsx
• Model.View.tsx
• Model.Zone.tsx
스칼라 규칙
• 개요
• scalar.constant.ts
• scalar.dictionary.ts
• scalar.document.ts
소개
• 시작하기
• 작동원리
• 실습하기
튜토리얼
• 상세하게 보여주기
• 상태 변경하기
• 서비스 내에서 상호작용
• 슬라이스로 표시하기
• 페이지를 통한 UX
• 스칼라 사용하기
• 인사이트 사용하기
• 데이터 연결하기
시스템 아키텍처
• 개요
• 백엔드 시스템
• 프론트엔드 시스템
• 환경변수
• 기본 스칼라 타입
• 도메인 기반 모듈
• CSS
모듈 규칙
• 개요
• model.constant.ts
• model.dictionary.ts
• model.document.ts
• model.service.ts
• model.signal.ts
• model.store.ts
• Model.Template.tsx
• Model.Unit.tsx
• Model.Util.tsx
• Model.View.tsx
• Model.Zone.tsx
스칼라 규칙
• 개요
• scalar.constant.ts
• scalar.dictionary.ts
• scalar.document.ts
이전
상태 변경하기
다음
슬라이스로 표시하기

서비스와 상호작용

주문이 들어오면 직원에게는 아이스크림을 만들 수 있도록 정보를 전달하고, 아이스크림이 만들어지면 손님에게 알리는 것이 필요합니다. 또, 손님이 아이스크림이 녹을 정도로 오랫동안 가져가지 않으면 다시 알림을 보내는 것이 필요합니다.
이를 위해 서빙된 주문이 완료처리되지 않을 경우에 주기적으로 경고를 보내는 작업을 추가해야 합니다. 또, 손님에게 주문을 수령하도록 촉구하는 알람 메세지를 보내는 작업을 추가해야 합니다.

어댑터 선언하기

먼저, 알람과 같은 외부 API 또는 모듈을 연결하는 것부터 시작해봅시다. 메세지나 이메일을 보내는 api를 연동할 수 있지만, 이번 튜토리얼에서는 단순히 콘솔을 출력하는 api를 만들어 연결해봅시다.
service, signal, document와 같은 모듈 기능은 바로 외부와 연동하지 않고, 별도로 어댑터를 만들어 이를 주입하는 방식이 바람직합니다. 먼저, /nest 폴더에서 다음과 같이 어댑터를 생성해봅시다.
apps/koyo/nest/alarmApi.ts
그런 다음, /nest/index.ts 파일에서 모듈을 내보냅니다.
apps/koyo/nest/index.ts
왜 어댑터 패턴을 사용해야 할까요? 서비스에서 외부 의존성을 직접 import하지 않고 어댑터로 주입하면 다음과 같은 이점을 얻을 수 있습니다:
(1) 테스트 용이성 - 서비스 코드를 수정하지 않고도 테스트에서 어댑터를 쉽게 모킹하거나 교체할 수 있습니다
(2) 유연성 - 서비스 로직을 변경하지 않고도 구현체를 교체할 수 있습니다(예: 콘솔 로깅에서 이메일 알림으로 전환)
(3) 관심사의 분리 - 서비스는 비즈니스 로직에 집중하고 어댑터는 외부 상호작용을 처리합니다
(4) 재사용성 - 동일한 어댑터를 여러 서비스에서 주입하여 공유할 수 있습니다

외부 API 사용하기

이제 알람을 위한 어댑터를 서버에 주입하기 위해서는 option.ts파일에서 주입할 어댑터를 선언하고 등록해야 합니다.
apps/koyo/lib/option.ts
이제 icecreamOrderService에서 alarmApi를 주입하여 사용할 수 있습니다.
apps/koyo/lib/icecreamOrder/icecreamOrder.service.ts

도큐먼트에서 쿼리 적용하기

이제, 서빙된 주문이 완료처리되지 않으면 경고 메세지를 보내는 서비스 기능을 추가해봅시다. 테스트가 용이하게 주문이 서빙된 후 15초가 지나면 경고 메세지를 보내도록 해봅시다.
apps/koyo/lib/icecreamOrder/icecreamOrder.service.ts
하지만, 어떻게 아이스크림 주문들 중 서빙된 주문들만 조회할 수 있을까요? 이를 위해서는 document 파일에서 주어진 조건에 맞게 쿼리를 생성하는 기능을 활용해서 리스트 조회 기능을 만들어봅시다.
이제 도큐먼트에서 쿼리를 적용해봅시다.
apps/koyo/lib/icecreamOrder/icecreamOrder.document.ts

인터벌 사용하기

이제 15초마다 해당 서비스를 실행하도록 interval을 사용해봅시다. interval trigger는 내부에서 발생하는 트리거로 작동하는 구조로, IcecreamOrderInternal에서 선언할 수 있습니다.
apps/koyo/lib/icecreamOrder/icecreamOrder.signal.ts
served 상태의 주문이 15초 이상 지나면 콘솔에 경고 메세지가 출력되는 것을 확인할 수 있습니다.
서비스와 상호작용
어댑터 선언하기
외부 API 사용하기
도큐먼트에서 쿼리 적용하기
인터벌 사용하기
IcecreamOrderFilter에서 byStatuses 쿼리를 선언하면, 주어진 조건의 쿼리에 맞게 list, find, count, sample 등의 기능을 사용할 수 있습니다. 예를 들면, listByStatuses, countByStatuses 등의 기능을 사용할 수 있습니다.
왜 status가 아닌 statuses 배열을 받아서 쿼리문을 처리할까요? 이는 여러 상태를 동시에 조회하는 경우가 필요할 때에 유용하기 때문입니다. 여러 상태를 동시에 쿼리할 가능성이 있다고 판단되면 배열로 받아서 처리하면 재사용이 가능합니다.
Signal 파일은 서비스 함수를 실행하기 위한 트리거를 선언하는 파일이며, Signal에는 Internal, Endpoint, Slice 클래스가 있습니다.
Internal은 시스템 내부의 트리거를 선언하는 클래스로, init, interval, cron, queue 등의 트리거를 가지고 있습니다.