사람함께에이전트▾
사람 — 직접 정하고 책임지는 비즈니스 규칙과 흐름. 직접 읽어보세요.
함께 — 개념은 알아두고, 세부 규칙은 에이전트가 따릅니다.
에이전트 — 에이전트가 따르는 규칙과 레퍼런스. 필요할 때 찾아보세요.
앱 & 라이브러리▾
도메인▾
스칼라▾
scalar.document.ts
price.document.ts는 스칼라의 서버 쪽 클래스입니다. constant 클래스를 감싸는 한 줄이고, 앞으로도 그 한 줄로 둡니다.akan create-scalar price가 다른 기본 파일과 함께 만들어 줍니다. 스칼라에 필드와 라벨만 필요하더라도 이 파일은 지우지 않습니다.이 페이지에서 쓰는 말
이름설명
서버와 브라우저가 모두 불러오는 constant 클래스로, 필드와 기본값, 헬퍼 메서드를 담습니다.
by(cnst.Price)
constant 클래스와 같은 필드를 가진 서버 쪽 클래스를 만듭니다.
db.Price
서버 코드에서 쓰는 값의 타입으로, 저장된 필드만 있고 메서드는 없습니다.
파일 전체
constant 파일을
cnst로 import하고, 그 클래스를 by(cnst.Price)로 감쌉니다. 그러면 document 클래스가 constant 클래스와 같은 필드를 갖습니다:apps/<app>/lib/__scalar/price/price.document.ts
- 이름은 constant 클래스와 같습니다.
price/폴더는cnst.Price를 감싼Price를 export합니다. - 같은 폴더의 파일을 import합니다. 경로는
./price.constant입니다. - 본문은 비워 둡니다.
by()가 필드를 모두 가져오고, 헬퍼 메서드는 다음 섹션처럼 constant 클래스에 둡니다.



이 파일은 서버 코드에서만 import합니다.
ui/, webkit/, page/, common/, *.store.ts, *.constant.ts, 그리고 모든 .tsx에서 값으로 import하면 lint 오류입니다. 그곳에서는 cnst.Price를 쓰고, import type은 그대로 쓸 수 있습니다.헬퍼는 constant에 둡니다
라벨, 참·거짓 판별, 작은 계산처럼 스칼라의 필드를 읽는 헬퍼는 constant 클래스에 둡니다. document 클래스에는 감싸는 한 줄만 남깁니다.
쓰는 것
constant
dictionary
document
값 자체 — 서버와 브라우저 공통
필드와 기본값
✓
amount: field(Float, { default: 0 })처럼 값의 모양을 정합니다.enumOf(…)
✓
Currency 같은 enum 클래스로, 스칼라 클래스 위에 선언합니다.헬퍼 메서드
✓
getLabel()처럼 표시, 판별, 작은 계산을 맡는 메서드입니다.라벨
라벨과 설명
✓
모든 필드와 enum 값에 붙는
[en, ko] 라벨과 설명입니다.서버 전용
by(cnst.Price)
✓
서버 코드에
db.Price 타입을 주는 한 줄짜리 래퍼입니다.✓이 파일에 둡니다여기 두지 않습니다
그래서 가격 라벨은 constant 파일의
Price에 짧은 메서드로 씁니다:apps/<app>/lib/__scalar/price/price.constant.ts
- 짧게 씁니다. 필드를 읽고 표시 값, 참·거짓 값, 작은 계산 결과를 돌려줍니다.
- 데이터베이스 모듈과는 다릅니다.
model.document.ts에는approve()같은 체인 메서드가 있지만, 스칼라의 document에는 없습니다.


document 클래스에는 메서드를 추가하지 않습니다. 저장된 가격을
Price document로 바꿔 주는 곳이 없어 메서드가 실행될 인스턴스가 없고, 브라우저 코드는 이 파일을 import할 수조차 없습니다.이 파일을 쓰는 곳
이 파일을 고칠 일은 거의 없지만, 서버 코드는 이 파일의 타입을 씁니다. 스칼라 값을 받는 service 메서드는 그 값을
db.<Scalar> 타입으로 받습니다:libs/shared/lib/user/user.service.ts
db.LeaveInfo는 데이터만 담습니다.LeaveInfo스칼라의 저장 필드만 있고 메서드는 없습니다.- 브라우저 코드는
cnst.LeaveInfo를 씁니다.db타입은 서버 쪽에만 둡니다.
필요한 것마다 두는 곳
같은 표시나 계산이 여러 곳에서 반복되면 헬퍼를 만듭니다. 데이터를 불러오는 일은 service에 둡니다.
| 필요한 것 | 파일 |
|---|---|
| ↳ 예시 | |
| 값을 받거나 돌려주는 service 메서드 | leaveInfo.document.ts |
| leaveInfo: db.LeaveInfo | |
| 상품 카드, 주문 요약, 청구서에서 함께 쓰는 가격 라벨 | price.constant.ts |
| price.getLabel() | |
city와 street로 만드는 주소 요약 | address.constant.ts |
| address.getSummary() | |
| 거리처럼 값 두 개를 함께 쓰는 계산 | coordinate.constant.ts |
| Coordinate.getDistanceKm(a, b) | |
| 다른 레코드를 불러오거나 백엔드 service를 호출하는 일 | <model>.service.ts |
| this.userModel.getUser(userId) | |
자주 하는 실수
getLabel()을 document 클래스에 쓰는 것. 서버와 브라우저 코드가 모두 import할 수 있는 constant 클래스로 옮깁니다.- 한 줄뿐이라고 파일을 지우는 것. 서버 코드의
db.Price가 이 파일에서 나오므로, constant와 dictionary 옆에 그대로 둡니다. - 헬퍼 안에서 레코드를 불러오는 것. 헬퍼는 자기 필드만 읽습니다. 쿼리나 service 호출은 상위 모듈의 service에 둡니다.
다음에 읽을 곳