사람함께에이전트▾
사람 — 직접 정하고 책임지는 비즈니스 규칙과 흐름. 직접 읽어보세요.
함께 — 개념은 알아두고, 세부 규칙은 에이전트가 따릅니다.
에이전트 — 에이전트가 따르는 규칙과 레퍼런스. 필요할 때 찾아보세요.
서버 콘솔
서버 콘솔은 앱 서버 안에서 여는 JavaScript 프롬프트입니다. 서비스를 점검하거나 작은 운영 명령을 실행할 때 씁니다.
명령설명
akan console myapp
로컬 개발에서 워크스페이스의 소스로 앱을 띄웁니다.
AKAN_CONSOLE=1 bun console.js
Docker나 Kubernetes에서
akan build가 main.js 옆에 넣어 둔 console.js를 실행합니다.- 실행 중인 컨테이너나 pod 안에서 콘솔 파일을 직접 만들지 마세요. 이미지에
console.js가 이미 들어 있습니다.
로컬 콘솔
스크립트 파일을 만들지 않고 서비스를 점검하거나, 메서드를 부르거나, 쿼리를 시험해 볼 때 엽니다. 워크스페이스 루트에서 앱 이름을 넘겨 실행합니다.
Terminal
- 프롬프트는
akan:myapp>입니다..help를 입력하면 명령과 입력 규칙이 나옵니다. - 반복할 작업은 스크립트로 만드세요. 스크립트 페이지를 참고하세요.
여러 줄 입력
코드를 그대로 붙여넣으면 됩니다. 붙여넣은 블록은 한 줄씩이 아니라 명령 하나로 실행되므로, 첫 줄에서 선언한
const를 마지막 줄에서도 쓸 수 있습니다.Terminal
| 하려는 일 |
|---|
| ↳ 방법 |
| 값을 다음 명령에서도 쓰기 |
const와 let은 명령 하나 동안만 살아 있으므로, users = service("user")처럼 키워드 없이 대입합니다. |
| 블록의 결과 출력하기 |
식 하나는 그대로 출력되고, 블록은 return <expr>로 끝내야 출력됩니다. |
| 덜 끝난 줄 이어 쓰기 |
열린 괄호, 문자열, 주석이 닫힐 때까지 ... 프롬프트에서 이어서 입력합니다. |
| 입력 중인 내용 버리기 |
.clear 또는 Ctrl+C. |
| 콘솔 닫기 |
Ctrl+D, .exit, .quit, 또는 빈 프롬프트에서 Ctrl+C를 누릅니다. |
await를 맨 바깥에서 바로 씁니다. async 함수로 감쌀 필요가 없습니다.- 오타 때문에
...프롬프트에 머물 수 있습니다. 짝 없는}는 덜 끝난 블록처럼 보이므로,.clear를 입력하고 다시 붙여넣으세요. - 결과는 5단계 깊이까지, 배열은 100개 항목까지 출력됩니다.
컨테이너 콘솔
Docker나 Kubernetes에서는 이미지에 이미 들어 있는
console.js를 실행합니다. AKAN_CONSOLE=1은 exec 명령에 직접 붙입니다.Docker
myapp을 실제 컨테이너 이름으로 바꾸세요.Terminal
Kubernetes
Akan Helm 차트는
app-deployment의 app 컨테이너로 앱을 실행합니다. 네임스페이스는 myapp-main처럼 앱 이름 뒤에 브랜치를 붙인 이름입니다.Terminal
플래그가 필요한 경우
다음 설정 중 하나라도 운영 환경을 가리키면
AKAN_CONSOLE=1 없이는 콘솔이 열리지 않습니다.| 설정 | 막히는 경우 |
|---|---|
| AKAN_PUBLIC_ENV | main일 때입니다. |
| AKAN_PUBLIC_OPERATION_MODE | cloud나 edge일 때입니다. 비어 있으면 env가 local이 아닌 한 cloud로 봅니다. |
| NODE_ENV | production일 때입니다. |
그래서 어디서 여느냐에 따라 플래그가 필요한지가 갈립니다.
| 어디서 |
|---|
| ↳ 플래그 |
로컬 akan console |
.env가 env와 모드를 모두 local로 두고 있다면 필요 없습니다. |
| Docker, Kubernetes |
이미지가 NODE_ENV=production과 모드 cloud를 넣어 두므로 항상 필요합니다. |


플래그는 exec 명령에만 붙이고, 배포 env에는 절대 넣지 마세요. 콘솔이 운영 데이터에 닿기 전에 거치는 단 하나의 의도적인 단계입니다. env에 남겨 두면 pod 안의 어떤 셸이든 콘솔을 열 수 있습니다.
콘솔 프로세스
콘솔은 실행 중인 프로세스를 들여다보는 창이 아니라 두 번째 프로세스입니다. 같은 컨테이너나 pod 안에서 앱 옆에 자기 서버를 따로 띄웁니다.
앱과 함께 쓰는 것
env, 시크릿, 마운트한 볼륨, 네트워크, 데이터베이스 접근.
함께 쓰지 않는 것
실행 중인
main.js 프로세스와 그 메모리 속 상태. 콘솔은 여기에 붙지 않습니다.- 요청을 받지 않습니다. 콘솔의 서버는 포트를 열지 않고 페이지도 서빙하지 않으므로 트래픽이 들어오지 않습니다.
- 앱의 백그라운드 작업은 하나도 돌리지 않습니다. internal의
init,interval,cron,timeout작업과 큐 worker는 앱에만 있으므로 같은 작업이 두 번 실행되지 않습니다. - 서비스와 어댑터는 그대로 시작합니다. 각
onInit이 실행되므로, 콘솔도 앱과 같은 연결을 엽니다. - 자기 로그 스트림은 열지 않습니다. 다음 절의
.tail과.trace가 실행 중인 서버의 로그를 읽어 옵니다.
전역 값과 명령
콘솔은 런타임 도우미 함수와 자동 생성된 앱 export를 전역에 미리 넣어 두므로, 대부분의 명령이 한 줄로 끝납니다.
전역 값
이름설명
server
부팅된 서버 인스턴스입니다.
env
앱이 부팅할 때 읽은 서버 설정(
env/env.server.<env>.ts)이며, 시크릿이 들어 있을 수 있습니다.servicesignaladaptor
service("user")처럼 refName으로 인스턴스를 찾습니다.get
get(srv.shared.UserService)처럼 서비스, 시그널, 어댑터 클래스로 인스턴스를 찾습니다.methods
객체의 프로토타입 체인에 있는 메서드 이름을 정렬해서 보여 줍니다.
debug
상태, 서버 모드, 실행 환경, 등록된 서비스·시그널·어댑터 전부를 요약합니다.
srvsigdbcnstdictoption
server.ts가 내보내는, 자동 생성된 앱 export입니다.- 라이브러리의 export는 라이브러리 이름 아래에 있습니다.
libs/shared의 유저 서비스는srv.shared.UserService입니다. - 그 밖의 이름은 평소의 전역 값입니다. 그래서
process.env와Bun도 그대로 쓸 수 있습니다.
점 명령
명령설명
.help
명령 목록과 여러 줄 입력 규칙을 보여 줍니다.
.globals
콘솔이 넣어 둔 전역 값과 직접 대입한 값의 이름을 보여 줍니다.
.clear
입력 중인 여러 줄 내용을 버립니다.
.exit.quit
콘솔을 닫습니다.
.tail
.tail off를 입력할 때까지 실행 중인 서버의 로그를 필터를 걸어 따라갑니다..trace
요청 하나가 남긴 버퍼 속 기록을 모두 출력합니다.
.tail은akan logs의 필터를key=value로 받습니다.level,grep,endpoint,origin,trace,child,role,since입니다. 인자 없는.tail은 지금 따라가는 조건을 보여 줍니다.- 둘 다 앱이 실행 중이어야 합니다. 로컬에서는
akan start myapp이 떠 있어야 하고, 아무것도 없으면 콘솔이myapp is not running이라고 답합니다.
처음 쳐 볼 명령
상황을 파악할 때 쓰는 명령입니다. 한 줄에 하나씩 입력합니다.
Terminal
안전 수칙
콘솔에서 바꾼 내용은 검토 없이 곧바로 실제 데이터에 반영됩니다. 다음 네 가지 습관을 지키세요.
- 대상부터 확인하세요. 데이터를 바꾸기 전에
debug().env를 출력해 환경을 확인합니다. - 데이터는 서비스 메서드로 바꾸세요.
updateUser는 서비스의 업데이트 훅을 거치지만, 데이터베이스에 직접 쓰면 도메인 규칙을 건너뜁니다. - 파괴적인 작업은 스크립트로 하세요. 명령을 여러 번 손으로 치는 대신, dry run이나 확인 단계가 있는 스크립트를 작성합니다.
AKAN_CONSOLE=1은 배포 설정에 넣지 마세요. 콘솔을 여는 exec 명령 한 번에만 붙입니다.
관련 페이지