블로그

일반적인 Java 실수를 방지하는 방법

February 2, 2022
완더 네토
노트북을 무릎에 올리고 키보드를 타이핑하는 세 사람의 모습을 위에서 내려다본 장면입니다.

더 생산적인 Java 개발자가 되어보세요

전 세계 900만 명의 개발자가 사용하는 Java(Oracle Corporation)는 세계에서 가장 인기 있는 프로그래밍 언어 중 하나입니다. Java는 Java Runtime Environment(JRE)를 지원하는 다양한 기기에서 프로그램을 실행할 수 있는 매우 범용적인 언어이기 때문에 수많은 애플리케이션 프레임워크가 Java를 기반으로 구축되었습니다. 개발자 주도 커뮤니티가 매우 활발하며, 초보 프로그래머를 위한 심층적인 지원은 Java의 지속적인 인기에 기여하고 있습니다.

Java는 오랜 역사를 가진 만큼, 커뮤니티는 수년간 표준, 도구, 코딩 패턴을 개발하고 개발자들이 반복적으로 겪는 일반적인 실수를 줄이기 위해 노력해 왔습니다. 이러한 모든 커뮤니티 주도 이니셔티브의 공통된 목표는 개발자가 Java로 애플리케이션을 개발할 때 생산성을 극대화하도록 돕는 것입니다. 하지만 애플리케이션 코드에 모범 사례나 패턴을 적용하는 것은 개발자의 책임입니다. 모범 사례를 강제하는 방식은 매우 다양하며, 커뮤니티 내에서도 의견이 분분하기 때문에 코딩 관행에 대한 표준 접근 방식을 정립하기가 어렵습니다. 개발자들은 온라인 커뮤니티에서 도움을 구하게 되는데, 때로는 의도치 않게 코딩 문제에 대해 안전하지 않은 해결책을 얻게 될 수도 있습니다.

개발자가 일반적인 Java 코딩 문제에 대해 안전한 해결책을 구현할 수 있도록 돕기 위해, 저희는 Sensei를 만들었습니다. Sensei는 전문적인 환경에서 귀하 또는 귀하의 조직이 정의한 레시피(또는 규칙)에 따라 잘못된 코딩 패턴을 수정하는 IntelliJ 플러그인입니다. Sensei를 사용하면 개발자는 클릭 한 번으로 일반적인 Java 실수(함정)를 식별하고 수정할 수 있습니다.

계속 읽어보시고 Sensei가 어떻게 일반적인 Java 코딩 실수를 해결하여 개발자 생산성을 높이는지 알아보세요.

개발자를 좌절시키는 반복적인 실수

이러한 일반적인 실수 중 하나는 래퍼(wrapper) 값의 잘못된 동등성 비교입니다. 박싱된 기본형(boxed primitives) 값은 예상치 못한 결과를 방지하기 위해 참조 비교 연산자(==) 대신 equals 메서드를 사용하여 비교해야 합니다.

예를 들어, -128에서 127 범위의 Integer 값에 참조 비교 연산자를 사용하면 (보통) equals 메서드와 동일하게 작동합니다. 하지만 이 범위를 벗어난 값으로 동일한 비교를 수행하면 결과가 달라집니다. 이는 Java가 해당 범위의 Integer 값에 대해 상수 풀(constant pool)을 유지하기 때문입니다. equals 메서드를 사용하면 항상 예상한 결과가 나오므로 비교를 위한 올바른 방법입니다.

이 예제에서는 동등성을 확인하기 위해 연산자(==)를 잘못 사용하고 있습니다.

그 결과 다음과 같은 출력이 나타납니다:

true

false

false

true

올바른 비교 방법은 equals 메서드를 사용하는 것입니다.

그러면 출력 결과는 다음과 같습니다:

true

false

true

false

이 잘 알려진 모범 사례는 꽤 오랫동안 존재해 왔지만, 레거시 코드에서는 여전히 잘못 구현되어 가장 부적절한 순간에 문제를 일으키곤 합니다. 그래서 저희는 Sensei를 사용하여 이러한 바람직하지 않은 코딩 패턴을 로컬에서 식별하고 클릭 한 번으로 수정할 수 있는 레시피(또는 규칙)를 만들었습니다.

Sensei는 코드를 입력하는 즉시 바람직하지 않은 코드를 스캔하고 수정할 수 있는 고도로 사용자 정의 가능한 IDE 플러그인입니다. 수백 개의 다운로드 가능한 코드 변환 및 마이그레이션 레시피(규칙)를 제공하며, 직접 레시피를 만들 수 있는 내장 기능도 갖추고 있습니다. 개발자는 Sensei를 통해 코드를 작성하는 도중 잘못된 패턴을 수정하여 더 빠르게 고품질 코드를 제공하고, 결과적으로 팀과 프로젝트 전반에서 일관되고 표준화된 방식으로 코드를 작성할 수 있습니다.

Sensei가 일반적인 Java 문제를 해결하는 방법

Sensei를 사용하면 나만의 레시피를 만들 수 있으므로, 위에서 언급한 실수를 바로잡기 위한 레시피를 직접 만들었습니다.

이 예제에서는 박싱된 기본 타입에서 비교 연산자(==)를 사용하는 위치를 찾고자 합니다.

Sensei 레시피는 다음과 같습니다(YAML 형식):

위의 설정은 코드를 입력할 때나 전체 파일, 구성된 범위, 심지어 전체 코드베이스에서 반복되는 잘못된 패턴을 검색할 수 있습니다. 패턴이 발견되면 온라인에서 검색할 필요 없이 즉시 수정하는 것이 자연스러운 다음 단계입니다. Sensei를 사용하면 지정된 대로 코드를 추가/편집/삭제하는 수정 기능을 만들 수 있습니다. 필요에 따라 여러 수정 옵션을 제공하여 개발자가 상황에 가장 적합한 방법을 선택하도록 할 수도 있습니다.

이 예제에서는 비교 연산자(==) 대신 equals 메서드를 사용하여 비교를 다시 작성하고자 합니다.

사용 가능한 수정 기능은 다음과 같이 설명됩니다:

작동 방식:

Java code defining Comparison class with method comparing two Integer objects using == operator.

표준 코딩 가이드라인을 쉽게 구현하는 방법

Java Gotchas Cookbook은 일반적인 실수를 방지하고 코드를 깔끔하고 안전하게 유지하도록 돕는 22가지 레시피를 제공합니다. 객체 동등성, 예외 처리, 정규 표현식, 컬렉션 등 다양한 Java 언어 기능과 API의 잘못되거나 안전하지 않은 사용을 감지합니다. Sensei와 이 쿡북을 도입하면 처음부터 더 나은 코드를 작성할 수 있으며, 팀이나 프로젝트, 조직의 특성에 맞는 나만의 레시피를 직접 만들 수도 있습니다.

이는 Sensei를 사용하여 프로젝트를 표준화하는 여러 방법 중 하나일 뿐입니다. 풀 리퀘스트를 검토하거나 직접 코딩할 때 자주 마주치는 안티 패턴이나 수동 코드 변환 작업을 항상 눈여겨보세요. 개발자들이 자주 놓치는 코딩 가이드라인이 있다면 이를 레시피로 변환하여, 개발자가 승인된 코드 변환을 자신 있게 적용할 수 있도록 도울 수 있습니다.

지금 Sensei를 설치하고 Java Gotchas Cookbook을 활성화하여 생산적인 개발 경험을 누려보세요. https://sensei.securecodewarrior.com/cookbooks/scw:java

*2021, State of Developer Nation, https://www.developernation.net/developer-reports/de20

‍

태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.