Enterprise 중급

취약한 JNDI 문자열 조회를 타입 안전 CDI 주입으로 대체합니다.

✕ Java EE
public class OrderService {
    private DataSource ds;

    public void init() throws NamingException {
        InitialContext ctx = new InitialContext();
        ds = (DataSource) ctx.lookup(
            "java:comp/env/jdbc/OrderDB");
    }

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
✓ Jakarta EE 8+
@ApplicationScoped
public class OrderService {
    @Inject
    @Resource(name = "jdbc/OrderDB")
    DataSource ds;

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
이 코드에 문제가 있나요? 알려주세요.
🔒

타입 안전 연결

주입 오류는 런타임 문자열 조회가 아닌 배포 시점에 잡힙니다.

🗑️

보일러플레이트 없음

InitialContext 생성, JNDI 이름 문자열, NamingException 처리를 제거합니다.

🧪

테스트 가능

의존성은 주입된 필드로, 단위 테스트에서 목으로 쉽게 대체할 수 있습니다.

이전 방식
JNDI 조회
모던 방식
CDI @Inject
JDK 버전
11
난이도
중급
JNDI 조회 대 CDI 주입
사용 가능

Jakarta EE 8 / Java 11 이후 널리 사용 가능

전통적인 JNDI 패턴은 문자열 기반 리소스 조회를 강제하여 타입 불일치가 런타임까지 잡히지 않습니다. CDI @Inject는 컨테이너가 의존성을 해석하도록 하여 타입 불일치를 배포 시점에 잡습니다.

공유 𝕏 🦋 in