Akan.js 3.1

릴리즈 노트 · 2026년 10월 25일

Akan.js 3.1: 프로덕션을 위해 더 단단하게

v3가 사람과 AI 에이전트가 함께 쓰는 앱을 열었다면, 3.1은 그 앱을 실제로, 안심하고 운영하는 데 집중합니다. 업그레이드만 해도 더 안전하고 빨라지며, 새 기능은 운영에서 꼭 필요한 일을 채웁니다. 들어오면 안 되는 사람을 막고, 데이터를 안전하게 바꾸고, 불안한 네트워크를 견디고, 아무도 지켜보지 않는 기기를 업데이트합니다.

보안

올리기만 해도 더 안전해집니다

대부분은 방문자 사이, 또는 내 서버와 다른 서버 사이의 틈을 막습니다. 어느 것도 코드 한 줄 바꾸라고 하지 않으므로, 새 기능을 하나도 쓰지 않더라도 업그레이드해야 할 가장 큰 이유입니다.

방문자마다 따로 가는 길
두 방문자가 같은 서버를 지나지만 벽으로 나뉜 각자의 길로 가므로, 서로의 세션을 볼 수 없습니다.
  • 방문자끼리 세션이 섞이지 않습니다

    트래픽이 몰릴 때 한 방문자에게 스트리밍되던 화면 일부가 다른 방문자의 로그인 쿠키를 읽을 수 있었습니다. 이제 각 렌더는 자기 요청만 봅니다.

  • 사용자의 로그인 정보가 밖으로 새지 않습니다

    서버가 외부 API를 호출할 때 더는 방문자의 로그인 토큰이나 주소를 함께 보내지 않습니다. 내 서버로 가는 호출만 이를 싣습니다.

  • 리다이렉트 낚시를 막습니다

    ?redirect=evil.com 같은 조작된 링크가 앱의 화면 이동을 이용해 방문자를 다른 사이트로 보낼 수 없습니다.

  • 요청이 스스로 권한을 올릴 수 없습니다

    역할이나 삭제 표시처럼 폼이 보내면 안 되는 필드는 코드에 닿기 전에 버려집니다.

  • 계정을 바꾸면 이전 화면이 남지 않습니다

    다른 계정으로 로그인하는 순간 이전 계정을 위해 보관해 둔 화면을 모두 버립니다.

  • 로그에 남는 시크릿이 줄었습니다

    웹훅 주소, 데이터베이스 연결 문자열, 서명 키 등 더 많은 종류의 시크릿을 로그에서 가립니다.

  • 누구도 손댈 수 없는 업데이트

    중간의 CDN이 서명된 앱 업데이트를 바꿀 수 없고, 서명된 데스크톱 앱은 다른 사람이 서명한 업데이트를 거절합니다.

  • 에이전트는 화면에 보이는 대로만 움직입니다

    인페이지 에이전트가 동작하는 사이 화면이 바뀌면, 엉뚱한 대상에 실행되지 않도록 그 호출을 거절합니다.

3.1.0의 보안 강화 전체 보기

새 기능

운영이 요구한 일곱 가지

01

화면이 뜨기 전에 막는 접근 제어

로그인 화면으로 튕기기 전에 비공개 화면이 잠깐 보이는 일이 사라집니다.

섹션 레이아웃에 가드 한 줄을 두면 그 아래 모든 페이지가 무엇이든 그리기 전에 누가 들어오는지 확인합니다. 들어올 수 없는 방문자는 곧바로 로그인 화면으로 가고, 볼 권한이 없는 레코드는 처음부터 없는 것처럼 응답합니다. 앱에 연결된 AI 에이전트에게도 열 수 있는 화면만 보입니다.

가드가 먼저 확인합니다
로그인한 사람은 가드를 지나 페이지에 닿고, 손님은 아무것도 그려지기 전에 가드에서 멈춰 로그인 화면으로 갑니다.
page/(app)/_layout.tsx
라우팅

02

AI 채팅 안에 그대로 뜨는 내 앱 화면

Claude에게 티켓을 물으면 긴 텍스트 대신 실제 티켓 카드가 대화 안에 뜹니다.

페이지의 컴포넌트 하나를 앱으로 지정하면 claude.ai 같은 AI 호스트가 대화 안에 그 화면을 그대로 그립니다. 웹사이트에 보이는 바로 그 컴포넌트라 두 번 만들 것이 없습니다. 사용자 본인의 권한으로 동작하고 조회만 할 수 있으므로, 누구 몰래 데이터를 바꾸는 일도 없습니다.

엔드포인트가 차트나 상품 사진 같은 이미지를 말로 설명하는 대신 AI에게 그대로 건넬 수도 있습니다.

대화 속의 진짜 화면
AI 채팅 창의 메시지 사이에 앱 자신의 화면이 카드로 그대로 나타납니다.
MCP Apps

03

데이터 구조 변경도 안전하게

미리 보고, 적용하고, 확인하고, 필요하면 되돌립니다.

새 릴리즈가 데이터 저장 방식을 바꾼다면 마이그레이션 스크립트를 함께 내보내세요. 먼저 아무것도 건드리지 않고 무엇을 바꿀지 보여 주고, 검토한 뒤 데이터가 달라졌으면 실행을 거절하며, 끝나면 결과를 검사합니다. 바꾼 값은 모두 기록되므로 잘못된 실행은 되돌릴 수 있습니다.

두 서버가 같은 마이그레이션을 동시에 돌리는 일은 없고, 노트북에서도 배포된 컨테이너에서도 같은 스크립트가 똑같이 돕니다.

미리 보기, 적용, 확인, 되돌리기
마이그레이션은 먼저 변경을 미리 보여 주고, 적용한 뒤, 결과를 확인하며, 적용한 변경은 되돌릴 수 있습니다.
데이터 마이그레이션

04

잘못된 요청은 입구에서, 이유와 함께

원인 모를 서버 에러 대신, 무엇이 잘못됐는지 정확히 알려 주는 응답.

모든 요청을 코드가 실행되기 전에 모델 정의와 대조합니다. 타입이 틀리거나 필드가 빠지면 어떤 필드가 문제인지 정확히 짚어 알려 주고, 보내면 안 되는 값은 조용히 버립니다. 잘못된 입력과 없는 데이터는 이제 서버 에러가 아니라 400과 404로 응답합니다.

엔드포인트가 낼 수 있는 에러도 이제 계약의 일부입니다. API 문서와 AI 에이전트가 읽는 도구 설명에 함께 실리므로, 사람도 에이전트도 호출하기 전에 무엇을 예상해야 할지 압니다.

에러

05

불안한 네트워크에서도 끄떡없는 호출

네트워크 때문에 몇 번을 다시 보내도, 결제는 한 번만.

다른 서버로 가는 호출이 상대가 잠깐 내려가 있거나 바쁠 때 스스로 재시도하고, 매번 조금씩 더 기다리며, 정한 제한 시간 안에서 멈춥니다. 결제나 주문에 중복 방지 키를 붙여 보내면 몇 번이 도착하든 정확히 한 번만 실행됩니다.

실시간 화면도 회복합니다. 연결이 끊기면 기기가 다시 온라인이 되는 즉시 재연결하고, 그사이 바뀐 내용을 채워 넣습니다.

재시도해도 결제는 한 번
앱의 결제 호출이 끊긴 네트워크를 지나며 여러 번 재시도되지만, 결제 서버는 한 번만 결제합니다.
order.service.ts
다른 서버 호출

06

아무도 지켜보지 않는 기기도 안전하게 스스로 업데이트

키오스크, 사이니지, 현장 단말을 위해.

폰 앱의 무선(OTA) 업데이트는 이제 CDN이나 중간자가 손댈 수 없도록 서명됩니다. 새 앱을 내지 않고도 서명 키를 교체하고, 유출된 키는 영구히 폐기하며, 사용자 정보는 하나도 모으지 않고 릴리즈가 기기마다 어떻게 적용됐는지 볼 수 있습니다. 폰에서 멈춘 릴리즈는 스스로 롤백합니다.

데스크톱 앱에는 페이지가 인쇄·파일 대화상자나 다운로드, 다른 프로그램을 열 수 없는 키오스크 모드가 생겼습니다. 데스크톱 앱이 함께 싣는 서버는 죽거나 멈추면 스스로 다시 뜨고, 시크릿을 빼고 빌드할 수 있어 설치된 컴퓨터에 민감한 정보가 남지 않습니다.

오는 길엔 봉인, 도착해선 잠금
릴리즈가 봉인된 서명 업데이트로 키오스크에 전달되고, 키오스크는 잠겨 있으며 무언가 멈추면 스스로 다시 시작합니다.

07

코드 옆에 두는 배포 파이프라인

빌드·테스트·배포 단계가 저장소 안에서 코드처럼 리뷰됩니다.

akan.config.ts에 빌드와 테스트부터 Docker, 배포까지 파이프라인 단계를 적고, 직접 만든 셸 단계도 끼워 넣으세요. 푸시하기 전에 Akan Cloud가 실행할 내용을 아무것도 실행하지 않고 로컬에서 미리 볼 수 있습니다. 파이프라인 시크릿은 쓰기 전용이라 한 번 올리면 다시 보이지 않고, 각 단계는 자기가 이름을 적은 시크릿만 읽습니다.

apps/web/akan.config.ts
파이프라인

성능

더 꼼꼼해졌는데, 더 빨라졌습니다

모든 요청을 검사하는 일이 비용이 되면 안 되었기에, 요청이 지나가는 길을 새로 짰습니다. 엔드포인트는 한 번만 준비하고, 응답은 모델마다 한 번 만든 계획을 따르며, 호출마다 필요 없는 일은 건너뜁니다. 실시간 연결도 가벼워졌습니다. 로그인한 소켓은 메시지마다가 아니라 연결당 한 번 로그인을 확인하고, 로그아웃은 여전히 즉시 반영됩니다.

2.5×

더 빨라진 목록 응답

16 µs → 6.5 µs

1.5×

더 빨라진 단순 API 호출

3.0 µs → 2.0 µs

+15%

초당 처리하는 페이지 증가

26.7k → 30.8k req/s

−14%

가장 느린 응답 시간 단축

p99 3.7 ms → 3.2 ms

각 수치는 해당 변경 직전과 직후를 한 머신에서 측정한 값입니다. API 호출은 프로세스 안에서, 페이지는 샘플 앱의 캐시된 페이지로 측정했습니다.

일상의 다듬음

사용자가 느끼는 변화

모달이 화면에 맞춰 바뀝니다. 휴대폰에서는 아래로 쓸어내려 닫는 전체 화면 시트로, 어느 화면에서든 오른쪽에서 밀려 나오는 사이드 패널로 열 수 있습니다.

데스크톱엔 대화상자, 폰엔 시트
같은 모달이 노트북에서는 가운데 뜨는 대화상자로, 휴대폰에서는 쓸어내려 닫는 바텀 시트로 열립니다.

3.0에서 올라올 때

3.1은 Bun 1.4.4와 React 19.3.1이 필요합니다. Bun을 올리고 워크스페이스를 업데이트한 다음, 앱과 라이브러리마다 아래 명령을 실행하세요. 대부분의 앱은 이것으로 끝납니다. 느슨한 모양의 요청을 받거나, 다른 서버를 호출하거나, 데스크톱·폰 업데이트를 배포한다면 릴리즈 노트의 짧은 체크리스트를 확인하세요. 대부분은 lint와 typecheck가 위치를 짚어 줍니다.

Terminal
업그레이드 체크리스트 보기

다음은

3.1은 v3가 연 모든 것을 실제로 운영할 수 있게 다졌습니다. 그리고 파이프라인을 실행하고, 시크릿을 보관하고, 폰 업데이트에 서명하는 Akan Cloud와 이미 손발을 맞춥니다. 클라우드와 에이전트 기능이 어디로 가는지는 로드맵에 있습니다.

로드맵 보기

MIT 라이선스 하에 배포되었습니다.

내 AI에 이 문서 연결하기

MCPhttps://akanjs.com/mcp
Copyright © 2026 Akan.js 모든 권리 보유.시스템 관리자bassman