김전산 주무관의 전자정부프레임워크 Next.js 변환기Eclipse에서 VS Code로

CHAPTER 02

Eclipse에서 VS Code로

한 번에 펼쳐 읽기

기존 전자정부프레임워크는 Eclipse에 남겨 두고, Next.js 신규 프로젝트는 VS Code와 폐쇄망 로컬 AI로 시작한다.

Next.js를 검증하기로 한 다음 날, 정보시스템팀은 개발 도구부터 부딪혔다.

여섯 사람의 화면에는 모두 Eclipse가 열려 있었다. 왼쪽에는 전자정부프레임워크 프로젝트가 여러 개의 모듈로 나뉘어 있었고, 아래에는 Tomcat 또는 JEUS에 올릴 서버 설정과 빌드 로그가 놓여 있었다.

박개발 사무관이 말했다.

“우리는 십 년 넘게 Eclipse로 Java를 개발했습니다. Next.js도 플러그인을 찾아서 여기서 하면 되지 않습니까?”

김전산 주무관은 Eclipse를 나쁜 도구라고 말하지 않았다.

“기존 Java 프로젝트를 유지하는 동안 Eclipse는 계속 필요합니다. Maven, Java 디버깅, WAS 연동과 전자정부프레임워크 소스를 보는 데 익숙합니다. 다만 신규 Next.js 프로젝트까지 같은 도구를 고집할 이유는 없습니다.”

그는 VS Code로 만든 빈 Next.js 작업 공간을 열었다.

“Next.js와 TypeScript 작업에는 VS Code가 우리 팀에 가장 적합합니다. TypeScript 언어 서버, ESLint, 포매터, 테스트, 디버거와 터미널을 한 작업 공간에서 연결하기 쉽습니다. React 컴포넌트와 서버 코드를 오갈 때도 파일 탐색과 타입 오류 확인이 빠릅니다.”

이코딩 주무관이 물었다.

“최고의 도구라는 말입니까?”

“모든 개발자에게 절대적으로 최고라는 뜻은 아닙니다. 우리 조건에서 가장 잘 맞는다는 뜻입니다. 새 프로젝트는 TypeScript와 Next.js이고, 전편에서 구축한 폐쇄망 로컬 AI도 VS Code 확장으로 연결해 쓸 수 있습니다.”

두 도구를 한 번에 버리지 않는다

최정보 팀장은 교체라는 단어부터 확인했다.

“VS Code를 쓰기로 하면 Eclipse를 지웁니까?”

“아닙니다.” 김전산이 말했다. “전환 기간에는 역할을 나눕니다.”

Eclipse
  └─ 기존 전자정부프레임워크·Java·MyBatis 유지보수

VS Code
  └─ 신규 Next.js·TypeScript·테스트·문서

기존 시스템에 장애가 나면 Eclipse에서 바로 고칠 수 있어야 했다. 신규 API가 검증을 통과하기 전까지 기존 소스는 운영 책임을 가진다. 도구 교체가 기존 시스템의 유지보수 능력을 먼저 없애서는 안 된다.

정운영 주무관이 두 작업 공간의 위치도 분리했다.

workspace/
  legacy-egov/     # Eclipse가 여는 기존 저장소
  next-intake/     # VS Code가 여는 신규 저장소

한 저장소의 생성 파일이나 설정이 다른 저장소에 섞이지 않도록 한다. 기존 Java 소스를 신규 프로젝트로 복사해 두고 참고하는 방식도 금지했다. 필요한 업무 규칙은 조사 문서와 테스트 사례로 옮긴다.

VS Code 작업 공간을 표준화하다

VS Code를 설치하는 것만으로 팀 개발 환경이 같아지지는 않는다. 사람마다 다른 확장과 저장 설정을 쓰면 같은 파일이 계속 달라진다.

이코딩 주무관이 신규 저장소에 팀 설정을 넣었다.

next-intake/
  .vscode/
    extensions.json
    settings.json
    launch.json
  package.json
  pnpm-lock.yaml
  tsconfig.json

extensions.json에는 승인된 확장만 추천 목록으로 둔다. settings.json에는 저장 시 포맷, 기본 포매터, TypeScript SDK와 파일 제외 규칙을 맞춘다. 디버깅 설정과 테스트 명령도 저장소에 둔다.

박개발 사무관이 경고했다.

“추천 목록이 자동 설치 목록은 아닙니다. 폐쇄망에서는 확장도 반입 대상입니다.”

외부 Marketplace에서 개발자가 직접 확장을 받지 않는다. 외부 준비 구간에서 승인된 버전의 .vsix를 확보하고 다음 항목을 확인한 뒤 내부 배포 위치에 둔다.

  • 게시자와 확장 식별자
  • 정확한 버전과 파일 해시
  • 라이선스
  • 알려진 취약점과 불필요한 권한
  • 외부 통신 여부
  • 업데이트와 폐기 절차

자동 업데이트와 텔레메트리도 기관 정책에 맞게 통제한다. 확장의 편리함 때문에 폐쇄망 원칙을 우회하지 않는다.

Next.js에 맞는 편집 흐름

김전산은 같은 오류를 Eclipse와 VS Code에서 각각 열어 보였다. TypeScript 함수의 반환 형식이 OpenAPI 응답과 맞지 않는 단순 오류였다.

VS Code에서는 파일을 저장하기 전부터 TypeScript 언어 서버가 잘못된 필드를 표시했다. 테스트 파일과 구현 파일을 나란히 열고 터미널에서 검증 명령을 실행할 수도 있었다.

코드 작성
  → TypeScript 타입 확인
  → ESLint
  → 단위 테스트
  → 개발계 실행

“도구가 업무 규칙을 대신 판단하지는 않습니다.” 김전산이 말했다. “하지만 오타와 타입 불일치처럼 컴퓨터가 바로 찾을 수 있는 문제는 작성하는 자리에서 막아 줍니다. 개발자는 원가 계산과 권한 같은 업무 규칙에 시간을 써야 합니다.”

팀은 VS Code를 선택한 이유를 제품 이름이 아니라 작업 흐름으로 기록했다.

  • Next.js와 TypeScript 진단이 빠르다.
  • 프론트와 서버 코드를 한 작업 공간에서 탐색한다.
  • 테스트, 린트, 형식 검사를 같은 터미널에서 실행한다.
  • 저장소에 팀 설정과 추천 확장을 함께 관리한다.
  • 폐쇄망 로컬 AI를 내부 주소로 연결할 수 있다.

전편의 로컬 AI를 다시 부르다

김전산은 전편에서 구축한 폐쇄망 AI 코딩 환경의 구성도를 열었다. Mac Studio에서 로컬 모델이 실행되고, 정보시스템팀의 개발 도구는 내부망 주소로만 모델을 호출하는 구조였다.

VS Code
  → 승인된 AI 코딩 확장
  → 연구소 내부 AI 주소
  → Ollama 또는 승인된 로컬 모델 실행기
  → Mac Studio

인터넷의 생성형 AI 서비스로 소스를 보내는 구조가 아니었다. 프롬프트와 선택한 코드 문맥은 연구소 내부에서만 이동한다.

이코딩 주무관이 물었다.

“Eclipse에서도 AI 플러그인을 찾을 수 있지 않습니까?”

“있을 수 있습니다. 하지만 우리가 전편에서 검증한 작업 흐름은 VS Code와 Continue 계열의 내부 모델 연결입니다. 새 프로젝트에서는 이미 검증한 길을 사용하고, 도구를 하나 더 검증하는 일을 동시에 벌이지 않는 편이 안전합니다.”

최정보 팀장은 로컬 AI의 역할부터 물었다.

“AI에게 프로젝트 전체를 맡기는 겁니까?”

“아닙니다. 반복 코드를 줄이고, 테스트 초안과 설명을 만드는 보조 도구로 씁니다. 최종 코드는 사람이 읽고 테스트하고 책임집니다.”

활용 범위는 구체적으로 정했다.

  • TypeScript 타입과 입력 검증 코드 초안
  • 반복되는 Route Handler와 테스트 골격
  • MyBatis SQL의 조건을 설명하는 문서 초안
  • Knex Query Builder 변환 초안
  • 오류 로그와 타입 오류의 해석
  • 단위 테스트의 경계 조건 제안
  • 변경 코드에 대한 검토 질문 생성

반대로 맡기지 않을 일도 적었다.

  • 운영 DB에 직접 접속해 쿼리 실행
  • 승인 없이 패키지 추가
  • 보안·권한 규칙의 최종 결정
  • 금액과 지급 로직의 무검증 반영
  • 운영 배포와 기능 플래그 변경
  • 테스트를 통과하지 않은 코드의 병합

AI가 만든 코드에도 같은 문을 세운다

박개발 사무관은 AI 제안에 조건을 붙였다.

“로컬에서 돈다는 것과 안전한 코드를 만든다는 것은 다른 이야기입니다.”

김전산이 동의했다.

“맞습니다. 외부 유출 위험을 낮춘 것이지, 환각과 잘못된 구현이 사라진 것은 아닙니다.”

팀은 AI가 만든 코드만 따로 느슨하게 보지도, 무조건 배척하지도 않기로 했다. 사람이 직접 작성한 코드와 같은 검증 절차를 적용한다.

AI 제안
  → 담당자 검토
  → 타입 검사
  → 린트
  → 단위·통합 테스트
  → 동료 리뷰
  → 개발계
  → 테스트베드

AI에게 보내는 문맥도 최소화한다. 비밀번호, 토큰, 운영 계정, 개인정보, 실제 계약 금액은 프롬프트에 넣지 않는다. 내부 모델이라도 필요 없는 비밀정보를 복사할 이유는 없다.

AI 확장의 설정 파일에는 외부 모델 주소를 넣지 않는다. 연구소 내부에서 승인한 모델 주소만 허용하고, 사용 가능한 모델과 확장 버전도 고정한다. 설정 변경은 코드 리뷰 대상에 포함한다.

정운영 주무관은 네트워크 확인 항목을 추가했다.

  • AI 확장이 외부 인터넷 연결을 시도하지 않는가
  • 모델 요청이 내부 주소로만 향하는가
  • 프롬프트 로그의 저장 위치와 보존 기간은 무엇인가
  • 사용자별 접근 권한과 사용 기록을 확인할 수 있는가
  • 모델 장애 시 일반 편집과 테스트가 계속 가능한가

“AI가 멈추면 개발도 멈추는 구조는 안 됩니다.” 정운영 주무관이 말했다.

로컬 AI는 생산성을 돕는 선택 기능이다. 빌드, 테스트와 배포가 AI 서비스에 의존해서는 안 된다.

여섯 사람의 작업 환경을 맞추다

정운영 주무관은 VS Code와 AI 확장을 한 사람씩 수동으로 설치하고 끝내지 않았다. 폐쇄망 내부 배포 묶음과 점검표를 만들었다.

vscode-offline-kit/
  vscode/
  extensions/
  node/
  pnpm/
  certificates/
  checksums.txt
  sbom/
  install-guide.md

각 개발자는 같은 버전을 설치하고 해시를 확인한다. Node.js와 패키지 관리자 버전도 프로젝트 파일에 고정한다. 내부 인증서를 신뢰하는 방법과 내부 패키지 저장소 주소는 운영 문서로 관리한다.

설치 뒤에는 같은 검증을 수행한다.

  1. VS Code와 Node.js 버전 확인
  2. 승인된 확장 목록 확인
  3. 외부 Marketplace와 텔레메트리 차단 확인
  4. 내부 패키지 저장소에서 의존성 설치
  5. TypeScript 타입 검사와 테스트 실행
  6. 내부 로컬 AI 모델 연결
  7. 외부 통신이 발생하지 않는지 점검

김전산은 팀원 모두에게 같은 작은 과제를 냈다.

과제
- 샘플 프로젝트 조회 타입 작성
- 잘못된 상태 코드를 막는 검증 함수 작성
- 단위 테스트 세 건 작성
- 로컬 AI에는 테스트 경계 조건만 질문

누군가는 직접 작성하고, 누군가는 AI 초안을 고쳐 썼다. 중요한 것은 누가 더 빨리 타이핑했는지가 아니었다. 여섯 사람의 결과가 같은 타입 검사와 테스트를 통과하고, 다른 사람이 읽을 수 있어야 했다.

두 번째 회의의 결론

최정보 팀장은 칠판의 두 도구 이름 사이에 선을 그었다.

기존 Java 운영: Eclipse
신규 Next.js 개발: VS Code
코딩 보조: 폐쇄망 로컬 AI
최종 책임: 담당 개발자와 검토자

“VS Code를 쓰면 개발이 쉬워집니까?” 팀장이 물었다.

김전산은 과장하지 않았다.

“도구만 바꾼다고 업무 규칙이 쉬워지지는 않습니다. 다만 Next.js에 맞는 타입 검사, 테스트와 로컬 AI를 한 작업 공간에 모으면 반복 작업과 도구 전환을 줄일 수 있습니다. 그만큼 복잡한 Oracle 쿼리와 권한 검증에 시간을 쓸 수 있습니다.”

“Eclipse는 언제 없앱니까?”

“기존 전자정부프레임워크가 운영되는 동안 없애지 않습니다. 마지막 기능이 전환되고 보존 기간이 끝날 때 판단합니다.”

최정보 팀장이 회의 결론을 승인했다.

  1. 기존 전자정부프레임워크 유지보수는 Eclipse로 계속한다.
  2. 신규 Next.js 프로젝트의 표준 편집기는 VS Code로 정한다.
  3. VS Code와 확장은 승인된 오프라인 묶음으로 반입한다.
  4. 전편에서 구축한 폐쇄망 로컬 AI를 코딩 보조로 연결한다.
  5. AI가 만든 코드도 사람의 검토와 모든 테스트를 통과해야 한다.
  6. 개발과 배포는 AI 서비스가 없어도 가능해야 한다.

이코딩 주무관이 VS Code에서 새 작업 공간을 열었다. 아직 접수 화면도 API도 없었다. 대신 여섯 사람이 같은 도구, 같은 설정, 같은 내부 AI를 바라보고 있었다.

김전산은 다음 회의 제목을 적었다.

화면보다 API가 먼저다

그 내용은 임시 원고로 보관했다. 도구와 폐쇄망 개발 환경을 먼저 맞춘 뒤, 기존 MyBatis와 신규 JSON API를 비교하는 단계에서 다시 꺼낼 예정이었다.

COMMENTS · 일지 02

Eclipse에서 VS Code로 댓글 0

아직 댓글이 없습니다. 읽다가 궁금한 점이나 보탤 내용을 남겨 주세요.