Zed에서도 Spring Boot 개발이 됩니다

Share

Zed를 쓰다가 Java/Spring 프로젝트를 열면 늘 같은 벽에 부딪힙니다. 공식 Java
익스텐션 덕분에 Java 자체는 잘 되는데, Spring은 아무것도 모릅니다.
application.yml은 그냥 텍스트고, @Value("${...}") 안에서는 자동완성이 안 되고,
@Query 안의 JPQL은 오타를 내도 조용합니다. 결국 Spring 작업만 IntelliJ나
VS Code로 넘어가게 됩니다.

그래서 Zed Spring Tools
를 만들고 있습니다. Spring 팀이 만든 공식 Spring Tools
언어 서버를 Zed에 붙이는 익스텐션입니다.

먼저 솔직하게

안정 릴리스가 아닙니다. 지금은 이렇습니다.

  • 검증된 환경은 macOS arm64 하나뿐입니다. Temurin JDK 25.0.3과 하한선인
    21.0.11에서 확인했습니다. Linux와 Windows용 코드는 들어 있지만 실행 증거가
    없으므로 "지원한다"고 말하지 않습니다.
  • Zed 익스텐션 레지스트리에는 제출해 둔 상태고,
    아직 심사 중입니다. 지금은 개발용 익스텐션으로 직접 설치해야 합니다.
  • 공식 Java 익스텐션이 필수입니다. 이걸 대체하는 게 아니라 옆에 붙는
    프로젝트입니다.

문서 원칙도 여기에 맞췄습니다. "구현했다"와 "실제로 동작하는 걸 봤다"를 다른
상태로 관리하고, 후자만 기능 목록에 올립니다. 현재 추적 중인 59개 항목 중
46개가 검증(verified) 상태이고, "구현했지만 아직 확인 못 함" 상태는 의도적으로
0개입니다. 코드가 존재한다는 이유만으로는 아무것도 목록에 올라가지 않습니다.

그래서 뭐가 되나요

검증된 환경 기준으로, 실제로 확인한 것들입니다.

설정 파일application.properties.yml의 자동완성, 호버, 검증,
정의로 이동. .properties.yaml 상호 변환.

Spring을 아는 Java 자동완성@Value 안의 프로퍼티 키, @Qualifier 안의
빈 이름, 스코프와 프로파일, 엔티티에서 유도한 Spring Data 쿼리 메서드,
@Component 메서드 안의 빈 주입 제안. @GetMapping 계열 메서드 템플릿은
import까지 같이 넣어 줍니다.

쿼리와 SpEL@Query 안의 JPQL/HQL/SQL 문법 검증, ?1이나 :name
파라미터에서 실제 메서드 파라미터로 정의 이동, ?1 위의 파라미터 이름 인레이
힌트. SpEL은 Spring이 표현식을 읽는 모든 자리(@Value, @Cacheable,
@EventListener, @ConditionalOnExpression 등)에서 검증되고, 빈 참조에서
@Bean 선언으로 이동할 수 있습니다.

Spring 정적 분석과 퀵픽스 — 불필요한 @Autowired, 생성자 주입으로 바꿀 만한
필드 주입, Boot 3에서 제거된 타입, Boot 4의 API 버저닝·빈 레지스트라 관련 검사
등이 진단으로 뜹니다. 중요한 건 퀵픽스가 실제로 코드를 고친다는 점입니다.
"Convert @Autowired field into Constructor Parameter"를 누르면 필드를 지우고
생성자를 씁니다. JDT 리팩터링과 OpenRewrite 레시피 양쪽 경로 모두 동작합니다.
Boot 패치 버전 업그레이드도 같은 경로를 탑니다 — 빌드 파일 상단의 퀵픽스가
저장 전에 검토 가능한 편집으로 버전을 올려 줍니다.

빌드 파일 진단 — 사용 가능한 패치/마이너 릴리스, 현재 Boot 세대가 OSS 지원
범위 안인지 상용 지원 구간인지, 클래스패스의 Spring Cloud 릴리스가 그 Boot
세대를 실제로 지원하는지.

실행 중인 앱의 라이브 데이터 — 코드 액션으로 로컬 Boot 프로세스에 연결해서
CodeLens에 실시간 빈/엔드포인트 정보를 띄우고, 힙·GC·로거 스냅샷을
.zed/spring-live.md로 뽑을 수 있습니다. 로거는 레벨 변경도 됩니다(확인
프롬프트를 거칩니다). 원격 앱은 boot-java.remote-apps 설정으로 붙습니다 —
VS Code도 쓰는 것과 같은 방식입니다.

실행/디버그 설정 생성 — 코드 액션 하나로 워크트리의 Boot 프로젝트를 찾아
.zed/tasks.json.zed/debug.json을 만듭니다. application-<profile>.*에서
발견한 프로파일마다 항목이 하나씩 생겨서, Zed의 태스크 선택기가 곧 프로파일
선택기가 됩니다. 기존 설정을 손실 없이 파싱할 수 없으면 덮어쓰지 않고 사이드카
파일로 남깁니다.

Spring Modulith — 모듈 내부를 침범하는 참조에 진단이 뜨고, Structure
문서가 애플리케이션 모듈 단위로 묶이면서 각 타입에 (API) / (internal)
표시가 붙습니다.

비행기에서도 됩니다. 고정된 Spring Tools 아티팩트를 한 번 내려받고 나면
그 뒤로는 네트워크가 필요 없습니다. 모든 아웃바운드 연결을 막고 돌린 실행에서도
자동완성, 진단, 퀵픽스, 클래스패스 브리지가 전부 동작했습니다. Boot 버전
진단만 조용해집니다 — Maven Central과 api.spring.io에 물어봐야 하는
정보라서요. 오래된 조언을 보여 주느니 아무 말도 안 하는 쪽을 택했습니다.

안 되는 것

Java 문자열 안쪽의 SpEL이나 쿼리 조각에 색이 들어가지 않습니다. LSP semantic
tokens가 필요한데 Zed 1.11.3은 Java 버퍼에 대해 이걸 요청하지 않습니다 —
Spring이 동적으로 등록해도, 공식 Java 서버가 정적으로 선언해도 마찬가지입니다.
Java 코드 자체는 Zed의 자체 문법으로 정상 하이라이팅되니, 그 문자열 안의 색깔만
빠집니다. 검증과 이동은 일반 LSP를 타기 때문에 잘 됩니다.

그 외에 Spring Initializr, 실험적 임베디드 MCP 서버, AI 설명 커맨드는 아직
방향을 정하지 못한 상태입니다. 나머지는 알려진 한계
정리해 뒀습니다.

써 보려면

필요한 것:

  • Zed + 공식 Java 익스텐션(필수)
  • JDK 21 이상 (21.0.11과 25.0.3에서 검증, 22~24는 미검증)
  • rustup으로 설치한 Rust (Zed가 개발용 익스텐션 빌드에 요구합니다)
  • 첫 아티팩트 다운로드를 위한 네트워크 (그때 한 번만)

설치는 저장소를 클론한 다음 Zed 익스텐션 페이지에서 Install Dev Extension
고르고 그 디렉터리를 선택하면 됩니다. Java 익스텐션을 먼저 설치하세요. 이미
JDT LS가 돌고 있었다면 Zed를 재시작해야 브리지 번들이 전달됩니다.

한 가지 더 — .java 파일을 최소 하나는 열어 두세요. Zed는 Java 버퍼가 있을
때만 Java 언어 서버를 띄우고, 익스텐션이 대신 띄워 줄 수 없습니다.
application.properties만 열어 둔 세션에는 프로젝트 클래스패스가 없어서
프로퍼티 검증이 문법 수준으로만 동작합니다. 이 경우 익스텐션이 실패라고
보고하는 대신 상황을 한 번 알려 줍니다.

CodeLens는 Zed에서 기본적으로 꺼져 있으니, 라이브 데이터를 보려면 설정에
"code_lens": "on"을 넣어야 합니다.

마지막으로

macOS arm64 밖의 환경은 전부 미검증입니다. Linux나 Windows에서 Zed로 Spring을
쓰고 싶으셨다면, 돌려 보고 뭐가 깨지는지 알려 주시는 것만으로도 큰 도움이
됩니다. 이슈, 로그, "이건 왜 이렇게 만들었나요" 같은 질문 전부 환영합니다.

저장소: https://github.com/luceat-lux-vestra/zed-spring-tools

Read more

DB 테이블을 우클릭 한 번으로 Mermaid ERD로 — erdMaid 플러그인을 만들었습니다

문서에 넣을 ERD가 필요할 때마다 같은 일을 반복하고 있었습니다. DataGrip에서 테이블 스키마를 열어놓고, 컬럼 이름과 타입을 하나씩 옮겨 적고, FK 관계를 눈으로 따라가며 ||--o{ 를 손으로 그리는 일이요. 테이블이 다섯 개면 참을 만합니다. 마흔 개면 참을 수 없습니다. 그래서 erdMaid 를 만들었습니다. IntelliJ 계열 IDE의 Database 도구 창에서 테이블을 선택하고

By algorist