image
Akan.js
English
Docs (V1)
image
Akan.js
You are viewing the Akan.js v1 docs.Go to the latest v2 docs
Docs (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
Next
시작하기

스칼라 Constant

constant 파일 (*.constant.ts)은 스칼라의 스키마를 정의하는 곳입니다. via() 함수와 enumOf() 헬퍼를 사용하여 다른 모델에 임베드할 수 있는 타입 안전하고 재사용 가능한 값 객체를 생성합니다.

파일 구조 및 위치

Scalar 상수는 엄격한 명명 규칙과 디렉토리 구조를 따릅니다:
field설명예제
디렉토리camelCase
파일<scalarName>.constant.ts
스칼라 클래스PascalCase
Enum 클래스PascalCase
Enum 값camelCase
디렉토리

camelCase

파일

<scalarName>.constant.ts

스칼라 클래스

PascalCase

Enum 클래스

PascalCase

Enum 값

camelCase

via()를 사용한 기본 문법

via() 함수는 스칼라를 정의하는 기반입니다. field() 함수를 받는 콜백을 취하며, 이를 사용하여 각 필드의 타입과 옵션을 정의합니다.
기본 구조
간단한 실제 예시입니다:
restrictInfo.constant.ts
method설명
via((field) => ({...}))타입이 지정된 필드를 가진 클래스를 생성합니다. 콜백은 field() 헬퍼 함수를 받습니다.
field(Type)단일 필드를 정의합니다. 첫 번째 인수는 타입입니다 (String, Number, Date 등).
field(Type, { options })선택적인 두 번째 인수는 기본값, 유효성 검사 등을 위한 옵션 객체입니다.
via((field) => ({...}))

타입이 지정된 필드를 가진 클래스를 생성합니다. 콜백은 field() 헬퍼 함수를 받습니다.

field(Type)

단일 필드를 정의합니다. 첫 번째 인수는 타입입니다 (String, Number, Date 등).

field(Type, { options })

선택적인 두 번째 인수는 기본값, 유효성 검사 등을 위한 옵션 객체입니다.

사용 가능한 필드 타입

Akan.js는 field() 함수와 함께 사용할 수 있는 여러 내장 타입을 제공합니다:
기본 타입
배열 타입은 타입을 대괄호로 감싸서 정의합니다:
배열 타입
선택적 필드는 .optional() 체인을 사용하여 정의할 수 있습니다:
fileMeta.constant.ts

enumOf()로 Enum 정의하기

enumOf() 함수는 타입이 지정된 enum 클래스를 생성합니다. 스칼라 필드에서 사용하기 전에 enum을 정의하세요.
기본 Enum
더 복잡한 enum의 경우 더 나은 타입 추론을 위해 "as const"를 사용하세요:
as const를 사용한 여러 enum
field설명
enumOf(name, values)첫 번째 인수는 enum 이름 (dictionary/GraphQL에서 사용됨). 두 번째는 값 배열입니다.
camelCase 값항상 enum 값에 camelCase를 사용하세요 (예: "waitPay", "WAIT_PAY" 아님).
as const더 나은 TypeScript 타입 추론을 위해 값 배열에 'as const'를 추가하세요.
enumOf(name, values)

첫 번째 인수는 enum 이름 (dictionary/GraphQL에서 사용됨). 두 번째는 값 배열입니다.

camelCase 값

항상 enum 값에 camelCase를 사용하세요 (예: "waitPay", "WAIT_PAY" 아님).

as const

더 나은 TypeScript 타입 추론을 위해 값 배열에 'as const'를 추가하세요.

필드 옵션

field()의 두 번째 인수는 기본값, 유효성 검사 및 동작을 구성하는 옵션 객체입니다:
옵션타입기본값설명예제
defaultAny | Functionundefined기본 필드 값 (정적 또는 팩토리 함수)
minNumber-최소 숫자 값
maxNumber-최대 숫자 값
minlengthNumber-최소 문자열 길이
maxlengthNumber-최대 문자열 길이
validateFunction-커스텀 유효성 검사 함수
exampleAny-문서화를 위한 예시 값
default:Any | Function:undefined

기본 필드 값 (정적 또는 팩토리 함수)

min:Number:-

최소 숫자 값

max:Number:-

최대 숫자 값

minlength:Number:-

최소 문자열 길이

maxlength:Number:-

최대 문자열 길이

validate:Function:-

커스텀 유효성 검사 함수

example:Any:-

문서화를 위한 예시 값

다양한 옵션 사용 방법입니다:
옵션 예시
🎯정적 vs 동적 기본값
상수에는 정적 값을 사용하세요 (0, "active"). 생성 시 계산되어야 하는 값에는 팩토리 함수를 사용하세요 (dayjs(), new ObjectId()).
✅커스텀 유효성 검사
validate 옵션은 true/false를 반환하거나 오류를 던지는 함수를 받습니다. 복잡한 유효성 검사 로직에 사용하세요.

인스턴스 메서드 추가하기

계산된 속성과 유틸리티 함수를 위해 스칼라 클래스에 인스턴스 메서드를 직접 추가할 수 있습니다:
인스턴스 메서드
💡
인스턴스 메서드는 'this'를 통해 모든 필드에 접근할 수 있습니다. 필드 값을 기반으로 한 계산에 사용하세요.
🔧
constant.ts에 정의된 메서드는 서버와 클라이언트 모두에서 사용 가능합니다. 서버 전용 로직은 document.ts를 대신 사용하세요.

흔한 실수

스칼라 상수를 정의할 때 다음과 같은 흔한 실수를 피하세요:
문제잘못된 예올바른 예
Enum 케이스enumOf('status', ['ACTIVE'])enumOf('status', ['active'])
배열 문법field(Array<Int>)field([Int])
동적 기본값{ default: dayjs() }{ default: () => dayjs() }
누락된 exportclass Status extends enumOf(...)export class Status extends enumOf(...)
선택적 필드field(ID, { nullable: true })field(ID).optional()
중요: 생성 시 계산되어야 하는 Date 기본값은 항상 팩토리 함수를 사용하세요: { default: () => dayjs() }

구현 체크리스트

  • 파일 위치: __scalar/<camelCase>/<camelCase>.constant.ts
  • '@akanjs/constant'에서 via import
  • '@akanjs/base'에서 enumOf import (enum 사용 시)
  • 모든 클래스 export (스칼라 및 enum)
  • 클래스 이름에 PascalCase 사용
  • enum 값에 camelCase 사용
  • 배열에 [Type] 문법 사용
  • 동적 기본값에 팩토리 함수 사용
  • nullable 필드에 .optional() 사용
  • 큰 enum 값 배열에 'as const' 추가
💡 프로 팁:
  • • 스칼라를 집중적으로 유지하세요 - 너무 커지면 여러 스칼라로 분리
  • • 스칼라는 값 객체입니다 - ID나 타임스탬프 필드 추가를 피하세요 (Model을 사용)
  • • enum을 사용하는 스칼라 클래스 전에 enum을 정의하세요
  • • i18n 지원을 위한 dictionary.ts 생성을 잊지 마세요
스칼라 Constant
파일 구조 및 위치
via()를 사용한 기본 문법
사용 가능한 필드 타입
enumOf()로 Enum 정의하기
필드 옵션
인스턴스 메서드 추가하기
흔한 실수
구현 체크리스트