CBA — Backstage 인증 어소시에이트 · 앱 저장소와 플러그인 만들기 · 실습
새로 붙인 백엔드 플러그인이 401 만 돌려준다
목표
VM 안에 진짜 Backstage 백엔드 프로세스를 띄우고, 백엔드 플러그인을 직접 만들어 붙입니다.
새 경로가 왜 401 을 돌려주는지, 공개 경로는 어떻게 여는지, 설정·다른 플러그인·확장점을
플러그인 코드에서 어떻게 쓰는지를 HTTP 응답과 로그로 확인합니다.
왜 중요한가
Backstage 를 고친다는 것은 대부분 플러그인을 더하거나 기존 플러그인을 넓히는 일입니다.
새 백엔드 플러그인을 붙였더니 모든 요청이 401 이면, 코드 버그를 찾느라 시간을 쓰기 쉽습니다.
실제로는 기본 인증 정책이 라우터보다 앞에서 막고 있습니다. 같은 이유로 플러그인이 카탈로그를
부를 때도 토큰이 필요하고, 카탈로그 동작을 바꿀 때는 그 패키지를 고치지 않고 모듈을 더합니다.
이 실습은 백엔드만 다룹니다. 프런트엔드 플러그인(React·Material UI)은 앱 번들을 빌드해야 하는데
이 VM 에서는 그 빌드를 하지 않으므로 직접 확인하지 않습니다. 보고서에서 둘의 차이를 정리합니다.
처음 VM 이 뜨는 데 4분쯤 걸리고, 1단계 설치는 인터넷에서 약 30초 걸립니다.
코드는 TypeScript 가 아니라 CommonJS 자바스크립트 한 파일(index.js)로 씁니다.
단계
1. /usr/local/cba-plugin 에 백엔드 패키지 여섯 개를 정확한 버전으로 설치합니다.
2. 카탈로그 플러그인만 든 백엔드를 7007 포트에 띄웁니다.
3. oncall 플러그인을 붙이고 인증 없이 부른 결과(401)를 기록합니다.
4. addAuthPolicy 로 /ping 한 경로만 엽니다.
5. rootConfig 로 설정값을 요청마다 읽고, 재시작 없이 설정을 바꿔 응답 변화를 기록합니다.
6. auth·discovery 서비스로 카탈로그 API 를 서비스 간 호출합니다.
7. 카탈로그 모듈(createBackendModule)로 엔티티 공급자를 더합니다.
8. 401·404 가 어느 층에서 나오는지와 백엔드·프런트엔드 플러그인 차이를 보고합니다.
참고
- 백엔드 다시 띄우기(표준 입출력을 떼야 셸이 매달리지 않습니다):
- 준비 확인:
curl -s http://127.0.0.1:7007/.backstage/health/v1/readiness - 로그의 색 문자 벗기기:
sed 's/\x1b\[[0-9;]*m//g' backend.log - 루트 디스크는 수백 MB 뿐입니다. 설치물과 캐시는
/usr/local아래에 두세요. - 백엔드 플러그인과 모듈 만들기: https://backstage.io/docs/backend-system/building-plugins-and-modules/index
- Http Router 서비스(addAuthPolicy): https://backstage.io/docs/backend-system/core-services/http-router
- Root Config 서비스: https://backstage.io/docs/backend-system/core-services/root-config
- 서비스 간 인증: https://backstage.io/docs/auth/service-to-service-auth
- 모듈과 확장점: https://backstage.io/docs/backend-system/architecture/modules
- 아키텍처 개요(프런트엔드·백엔드 플러그인): https://backstage.io/docs/overview/architecture-overview
- Root Health 서비스: https://backstage.io/docs/backend-system/core-services/root-health
cd /usr/local/cba-plugin && pkill -f 'node index.js'; setsid nohup node index.js > backend.log 2>&1 < /dev/null &
단계 8개
- 플러그인을 올릴 백엔드 재료를 정확한 버전으로 받는다
- 카탈로그만 든 백엔드를 띄운다
- 새 플러그인의 경로가 전부 401 이다
- 상태 확인 경로 하나만 인증 없이 연다
- 당번 채널을 코드가 아니라 설정에서 읽는다
- 플러그인이 카탈로그를 부를 때도 토큰이 필요하다
- 카탈로그를 고치지 않고 모듈로 엔티티를 밀어 넣는다
- 401 과 404 가 어느 층에서 나오는지 보고한다