블로그

All
개발
스프링
AI
AI 코딩: 자연어 대신 테스트로 대화하라
최근 AI에게 "이 기능 만들어줘"라고 명령하는 바이브코딩(Vibe Coding)이 주목받고 있다. 이 용어를 만든 안드레 카파시는 "가장 좋은 프로그래밍 언어는 영어가 될 것이다"라고 말하며, 자연어를 이용한 코딩 방식이 미래라고 설명했다. 그러나 나는 조금 다르게 생각한다. 자연어는 본래 일상 대화를 위한 언어이며, 정확한 명세를 표현하기엔 모호하다. 같은 문장을 입력해도, AI 모델의 버전이나 문맥에 따라 결과가 달라지는 비결정성(indeterminacy)이 존재한다. 자연어 코딩의 한계 자연어로 AI에게 "로그인 기능 만들어줘"라고 하면, 어떤 결과가 나올까? 누구는 JWT 기반 로그인, 누구는 세션 로그인, 또 누구는 OAuth2를 구현할 수도 있다. 명령은 같지만, 결과는 다르다. 이처럼 자연어는 명세 언어로서 불확실성을 가지고 있다. AI 코딩의 본질적인 문제는 바로 이 불명확한 요구사항 표현에 있다. 결국, 우리가 원하는 것은 "AI가 정확히 우리가 원하는 조건을 만족하는 코드"다. 참조하면 좋은 글
  1. AI
  2. 개발
  • 박상철
Java Spring과 JSpecify로 null 안전성 완전정복
Java 개발에서 NullPointerException(NPE)는 가장 빈번하고 치명적인 오류 중 하나입니다. 수십 년간 “10억 달러 실수”라 불리며, 수많은 서비스 장애와 유지보수 비용의 원인이 되어왔습니다. 이제 Spring Framework 7.0과 JSpecify 1.0의 통합을 통해 Java의 null 안전성 모델이 근본적으로 개선됩니다. 정적 분석 단계에서 null 가능성을 명확히 정의하고 검증함으로써, 런타임 NPE 발생을 획기적으로 줄일 수 있습니다. 2025년 11월 공개 예정인 Spring Boot 4.0부터는 Spring 전 포트폴리오가 JSpecify 기반으로 전환되며, 이는 Spring 기반 프로젝트 전반에 걸친 코드 품질과 안정성 향상을 의미합니다. 이제 모든 Spring 개발자는 이 변화에 맞춰 코드와 개발 프로세스를 재정비해야 합니다. Java null 문제의 본질과 중요성 Java의 참조 타입은 기본적으로 null을 허용하지만, 이를 명시적으로 표현할 방법이 없습니다. 다음과 같은 코드에서 개발자는 항상 불안감을 느껴야 합니다: NPE가 비즈니스에 미치는 영향은 심각합니다. HTTP 500 에러로 이어지는 예상치 못한 런타임 오류, 방어적 코딩으로 인한 생산성 저하, 그리고 이를 수정하기 위한 추가 유지보수 비용이 발생합니다. 개발자는 각 변수의 null 가능성을 지속적으로 추적해야 하는 인지적 부담을 안고 있었습니다. JSpecify의 등장과 기존 해결책의 한계 Spring의 기존 null 안전성 접근법 Spring Framework는 2017년 버전 5.0부터 org.springframework.lang 패키지의 네 가지 핵심 어노테이션을 통해서 null 안전성을 지원해왔습니다. 이 방식은 IDE와 Kotlin에서 null 안전성을 제공했지만, JSR 305라는 비활성 표준에 의존하는 한계가 있었습니다. 제네릭 타입이나 배열 요소의 null 안전성 지원도 부족했고, 도구마다 다른 해석을 하는 문제가 있었습니다. JSpecify가 해결하는 핵심 문제들 JSpecify는 Google, Spring, JetBrains, Oracle 등 주요 기업들이 협력하여 개발한 도구 독립적인 표준입니다. 2024년 8월 1.0.0이 공식 출시되었으며, 다음과 같은 문제들을 해결합니다: 도구 간 표준화 부족: 각 도구가 서로 다른 annotation을 사용하던 문제
  1. 개발
  2. 스프링
  • 박상철