배경
DECS/entrypoint.sh의 start_novnc()는 ENABLE_VNC=true env var이 주입됐을 때만 활성화된다. 현재 Pod 생성 흐름에서 이 env var을 주입하는 경로가 없어 noVNC를 사용할 수 없다.
noVNC가 사용하는 포트 구조:
- VNC 자체 (5901): 컨테이너 내부 localhost only — 외부 노출 불필요
- noVNC websockify (기본 6080): 외부에서 접근하는 포트 → NodePort 할당 필요
config-server는 Pod 생성 전 admin_be의 GET /api/requests/config/{username} (AcceptInfoResponseDTO)를 조회해 설정을 가져온다. noVNC 활성화 여부도 이 흐름에 추가해야 한다.
변경 범위
1. Request entity — enableVnc 필드 추가
// Request.java
@Column(name = "enable_vnc", nullable = false)
private Boolean enableVnc = false;
DB 마이그레이션: ALTER TABLE requests ADD COLUMN enable_vnc TINYINT(1) NOT NULL DEFAULT 0;
2. SaveRequestRequestDTO — 신청 시 VNC 옵션 수신
// SaveRequestRequestDTO.java
@Schema(description = "noVNC GUI 활성화 여부", example = "false")
Boolean enableVnc // nullable, 미전송 시 false로 처리
RequestCommandService.saveRequest()에서 request.setEnableVnc(dto.enableVnc() != null && dto.enableVnc()) 처리.
3. AcceptInfoResponseDTO — config-server에 VNC 여부 전달
// AcceptInfoResponseDTO.java
@Schema(description = "noVNC 활성화 여부")
Boolean enable_vnc
fromEntity()에 enable_vnc(request.isEnableVnc()) 추가.
config-server는 enable_vnc=true일 때:
- Pod spec env에
ENABLE_VNC=true 주입
- 내부 포트 6080에 NodePort 추가 할당 (기존
additional_ports 메커니즘 활용)
4. (선택) ApproveRequestDTO — 관리자 승인 시 VNC 강제 활성화/비활성화
현재 승인 DTO에 VNC 관련 필드가 없다. 관리자가 승인 시 VNC를 켜거나 끌 수 있게 하려면 추가 필요. 우선 사용자 신청 값 그대로 사용하는 방향으로 구현하고, 필요 시 별도 이슈로 분리.
entrypoint.sh 기준 env var 정리
| env var |
기본값 |
비고 |
ENABLE_VNC |
false |
이것만 true로 주입하면 나머지는 기본값으로 동작 |
NOVNC_PORT |
6080 |
변경 필요 시 추가 주입 |
VNC_DISPLAY |
1 |
내부 VNC 포트 = 5900 + display |
VNC_RESOLUTION |
1920x1080 |
|
VNC_PASSWORD |
자동 생성 |
미주입 시 ~/vnc_password.txt에 저장 |
ENABLE_VNC=true만 주입하면 나머지는 기본값으로 동작하므로, 우선 ENABLE_VNC만 처리한다.
주의
vncserver, vncpasswd, websockify가 이미지에 없으면 entrypoint.sh가 조용히 스킵한다 (에러 없음). CUDA 이미지별 패키지 포함 여부를 별도 확인 필요.
- noVNC NodePort는 config-server 쪽에서 6080을
additional_ports에 자동 추가하는 방식으로 처리하므로, admin_be는 enable_vnc 플래그 전달까지만 책임진다.
체크리스트
배경
DECS/entrypoint.sh의start_novnc()는ENABLE_VNC=trueenv var이 주입됐을 때만 활성화된다. 현재 Pod 생성 흐름에서 이 env var을 주입하는 경로가 없어 noVNC를 사용할 수 없다.noVNC가 사용하는 포트 구조:
config-server는 Pod 생성 전 admin_be의
GET /api/requests/config/{username}(AcceptInfoResponseDTO)를 조회해 설정을 가져온다. noVNC 활성화 여부도 이 흐름에 추가해야 한다.변경 범위
1.
Requestentity —enableVnc필드 추가DB 마이그레이션:
ALTER TABLE requests ADD COLUMN enable_vnc TINYINT(1) NOT NULL DEFAULT 0;2.
SaveRequestRequestDTO— 신청 시 VNC 옵션 수신RequestCommandService.saveRequest()에서request.setEnableVnc(dto.enableVnc() != null && dto.enableVnc())처리.3.
AcceptInfoResponseDTO— config-server에 VNC 여부 전달fromEntity()에enable_vnc(request.isEnableVnc())추가.config-server는
enable_vnc=true일 때:ENABLE_VNC=true주입additional_ports메커니즘 활용)4. (선택)
ApproveRequestDTO— 관리자 승인 시 VNC 강제 활성화/비활성화현재 승인 DTO에 VNC 관련 필드가 없다. 관리자가 승인 시 VNC를 켜거나 끌 수 있게 하려면 추가 필요. 우선 사용자 신청 값 그대로 사용하는 방향으로 구현하고, 필요 시 별도 이슈로 분리.
entrypoint.sh 기준 env var 정리
ENABLE_VNCfalsetrue로 주입하면 나머지는 기본값으로 동작NOVNC_PORT6080VNC_DISPLAY1VNC_RESOLUTION1920x1080VNC_PASSWORD~/vnc_password.txt에 저장ENABLE_VNC=true만 주입하면 나머지는 기본값으로 동작하므로, 우선ENABLE_VNC만 처리한다.주의
vncserver,vncpasswd,websockify가 이미지에 없으면 entrypoint.sh가 조용히 스킵한다 (에러 없음). CUDA 이미지별 패키지 포함 여부를 별도 확인 필요.additional_ports에 자동 추가하는 방식으로 처리하므로, admin_be는enable_vnc플래그 전달까지만 책임진다.체크리스트
Requestentity에enable_vnc컬럼 추가 + DB 마이그레이션SaveRequestRequestDTO에enableVnc필드 추가RequestCommandService.saveRequest()에서enableVnc저장 처리AcceptInfoResponseDTO에enable_vnc필드 추가AcceptInfoResponseDTO.fromEntity()에 매핑 추가enable_vnc수신 및 env var/포트 처리 이슈 별도 등록