계: API Abuse

API는 호출자와 피호출자 간의 계약입니다. 가장 흔한 형태의 API 오용은 호출자가 이 계약에서 자신의 몫을 이행하지 못하기 때문에 발생합니다. 예를 들어, 프로그램이 chroot()를 호출한 후 chdir()을 호출하지 못하면 활성 루트 디렉터리를 안전하게 변경하는 방법을 지정하는 계약을 위반하는 것입니다. 라이브러리 오용의 또 다른 좋은 예는 피호출자가 호출자에게 신뢰할 만한 DNS 정보를 반환할 것으로 예상하는 것입니다. 이 경우, 호출자는 자신의 행동에 대해 특정한 가정을 함으로써(반환 값이 인증 목적으로 사용될 것으로 예상) 피호출자 API를 오용합니다. 다른 쪽에서 호출자-피호출자 계약을 위반할 수도 있습니다. 예를 들어, 코더가 하위 클래스 SecureRandom을 지정하고 임의 값이 아닌 값을 반환하는 경우 계약을 위반하는 것입니다.

EJB Bad Practices: Use of java.io

Abstract
프로그램은 java.io 패키지를 사용하여 Enterprise JavaBeans 규격을 위반합니다.
Explanation
Enterprise JavaBeans 규격에 따르면 모든 bean 공급자는 bean이 이식 가능하고 EJB 컨테이너에서 일관성 있게 동작하도록 하기 위한 프로그래밍 지침을 따라야 합니다[1].

이 경우, 프로그램은 다음 EJB 지침을 위반합니다.

"Enterprise Bean은 Java I/O 패키지를 사용하여 파일 시스템의 파일과 디렉터리에 액세스할 때 주의해야 합니다."

규격에서 다음과 같이 정당화하는 요구 사항입니다.

"파일 시스템 API는 비즈니스 구성 요소가 데이터에 액세스하는 데 적합하지 않습니다. 모든 인스턴스에서 파일에 액세스할 수 없는 경우도 있고, 인스턴스마다 내용이 다를 수도 있으며, 파일에 대한 업데이트를 조정하는 것이 어려울 수도 있습니다. 비즈니스 구성 요소는 JDBC 같은 리소스 관리자 API를 사용하여 데이터를 저장해야 합니다."
References
[1] Jakarta Enterprise Beans 4.0 Eclipse Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 576
desc.structural.java.ejb_bad_practices_use_of_java_io