JDBC 면접 질문 및 답변 상위 50개(2026)

JDBC 면접 질문과 답변

다음 JDBC 면접을 준비하고 계신가요? 사전 계획은 JDBC 면접 환경을 이해하고, 사려 깊은 질문을 통해 지원자와 고용주 모두에게 어떤 통찰력을 얻을 수 있는지 파악하는 것을 의미합니다.

JDBC 기술은 최신 애플리케이션 개발 분야에서 강력한 기회를 제공하며, 기술적 경험과 도메인 전문 지식을 바탕으로 실제 데이터 접근 요구 사항을 충족할 수 있습니다. 이 분야의 전문가들은 분석 능력과 심층적인 경험을 활용하여 신입 엔지니어, 경력 엔지니어, 중간 개발자, 그리고 시니어 팀 리더에 이르기까지 오늘날 직면하는 일반적인 문제부터 고급 문제까지 해결합니다.
자세히보기 ...

👉 무료 PDF 다운로드: JDBC 면접 질문 및 답변

JDBC 면접에서 가장 많이 나오는 질문과 답변

1) JDBC란 무엇이며, 왜 중요한가요? Java 응용 프로그램?

JDBC(Java 데이터베이스 연결은 다음과 같은 기능을 제공하는 API입니다. Java JDBC는 애플리케이션이 관계형 데이터베이스와 상호 작용할 수 있도록 하는 표준 인터페이스를 제공합니다. SQL 문을 전송하고, 데이터를 검색하고, 트랜잭션을 관리하기 위한 표준화된 인터페이스를 제공합니다. JDBC는 이러한 인터페이스와 애플리케이션 간의 연결고리 역할을 합니다. Java 코드와 데이터베이스 드라이버를 통해 플랫폼에 독립적인 데이터베이스 작업을 가능하게 합니다. 주요 장점은 추상화 계층을 제공한다는 점입니다. 개발자는 데이터베이스(예: MySQL, Oracle, PostgreSQL코드 변경을 최소화하면서.

예: 웹 애플리케이션은 JDBC를 사용하여 사용자 정보를 가져올 수 있습니다. MySQL 데이터베이스를 통해 Connection, StatementResultSet 사물.


2) JDBC 드라이버에는 어떤 유형이 있나요? 각각의 특징을 설명해 주세요.

JDBC는 성능과 네이티브 코드 의존도에 따라 네 가지 유형의 드라이버를 정의합니다.

드라이버 유형 성함 기술설명 장점 단점
1에게 입력 JDBC-ODBC 브리지 JDBC 호출을 ODBC 호출로 변환합니다. 쉬운 사용 ODBC 설치가 필요합니다.
2에게 입력 네이티브 API JDBC 호출을 네이티브 데이터베이스 API로 변환합니다. 1형보다 성능이 우수함 플랫폼에 따라 다름
3에게 입력 네트워크 프로토콜 미들웨어를 사용하여 호출을 변환합니다. 데이터베이스에 독립적입니다 추가 네트워크 오버헤드
4에게 입력 얇은 드라이버 JDBC 호출을 데이터베이스별 프로토콜로 변환합니다. 최고의 성능; 순수한 Java DB 전용 드라이버가 필요합니다.

휴대성과 고성능 덕분에 최신 애플리케이션에서는 타입 4 드라이버가 선호됩니다.


3) JDBC 프로그램의 생명주기를 설명하십시오.

JDBC 라이프사이클은 효율적인 연결, 쿼리 실행 및 리소스 종료를 위한 주요 단계로 구성됩니다.

  1. 로드 드라이버 클래스: 사용 Class.forName("com.mysql.cj.jdbc.Driver").
  2. 연결 설정: 을 통하여 DriverManager.getConnection().
  3. 문장 객체 생성: Statement, PreparedStatementCallableStatement.
  4. SQL 쿼리 실행: 사용 executeQuery() or executeUpdate().
  5. 처리 결과: 데이터를 검색하려면 다음을 사용하세요. ResultSet.
  6. 리소스 닫기: 연결 및 명세서를 자유롭게 하여 정보 유출을 방지하세요.

이러한 수명주기를 적절히 관리하면 엔터프라이즈 시스템의 안정성과 확장성을 보장하고 메모리 또는 연결 풀 고갈을 방지할 수 있습니다.


4) Statement, PreparedStatement, CallableStatement의 차이점은 무엇입니까?

이러한 인터페이스는 JDBC에서 SQL 쿼리를 실행하는 다양한 방법을 나타냅니다.

인터페이스 사용 형질 예시
성명서 간단한 SQL 쿼리 매개변수를 허용하지 않습니다. statement.executeQuery("SELECT * FROM users");
준비된 문 매개변수화된 SQL SQL 인젝션을 방지하고 성능을 향상시킵니다. ps.setString(1, "John");
호출 가능문 저장 프로 시저 데이터베이스 기능을 실행하는 데 사용됩니다. cs.call("{call getUser(?)}");

PreparedStatements는 보안 및 사전 컴파일 이점 때문에 가장 널리 사용됩니다.


5) JDBC에서 트랜잭션을 어떻게 처리할 수 있나요?

JDBC 트랜잭션은 여러 작업을 하나의 논리적 단위로 묶어 데이터 무결성을 보장합니다. 개발자는 다음과 같이 트랜잭션을 수동으로 제어할 수 있습니다.

  1. 자동 커밋을 비활성화합니다. conn.setAutoCommit(false);
  2. 여러 SQL 문을 실행합니다.
  3. 성공을 위해 헌신하세요: conn.commit();
  4. 실패 시 롤백: conn.rollback();

이는 원자성을 보장합니다. 즉, 모든 작업이 성공하거나, 아니면 아무것도 성공하지 못합니다.

예: 두 계좌 간 자금 이체는 차변 및 대변 조회를 모두 포함하며, 데이터 불일치를 방지하기 위해 두 조회 모두 단일 거래 내에서 실행됩니다.


6) JDBC 연결 풀링을 사용하는 장점과 단점은 무엇입니까?

연결 풀링은 매번 새로운 연결을 생성하는 대신 활성 연결을 재사용하여 데이터베이스 성능을 향상시킵니다.

아래 장점 단점
성능 연결 생성 오버헤드를 줄입니다. 신중한 구성이 필요합니다
확장성 대규모 사용자 부하를 효율적으로 처리합니다. 연결이 불안정해질 수 있습니다.
자원 관리 데이터베이스 연결을 최적화합니다 디버깅의 복잡성이 증가합니다.

HikariCP 또는 Apache DBCP와 같은 프레임워크를 사용하면 엔터프라이즈급 시스템에 효율적이고 안정적인 연결 풀링을 제공할 수 있습니다.


7) execute(), executeQuery(), 및 executeUpdate()의 차이점을 설명하십시오.

이 세 가지 방법은 다음 범주에 속합니다. Statement 인터페이스는 서로 다른 목적을 수행합니다.

방법 적용 사례 반환 유형 예시
실행하다() SQL 명령 부울 저장 프로시저의 경우
executeQuery() SELECT 쿼리 결과 집합 기록을 검색합니다
executeUpdate() 삽입, 업데이트, 삭제 int(영향을 받은 행 수) 데이터를 수정합니다

예:

ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
int count = stmt.executeUpdate("UPDATE EMPLOYEE SET salary=5000 WHERE id=1");

이러한 차이점을 이해하면 JDBC에서 SQL 문이 올바르게 실행될 수 있습니다.


8) JDBC 성능을 어떻게 향상시킬 수 있을까요?

JDBC 성능은 다양한 모범 사례를 통해 향상될 수 있습니다.

  • 준비된 문 미리 컴파일된 SQL의 경우.
  • 구현 일괄 업데이트 대용량 데이터 작업을 위해.
  • connection pooling 잦은 새로운 연결 대신에.
  • 필요한 열만 가져오고 나머지는 가져오지 마세요. SELECT *.
  • 리소스 누출을 방지하려면 리소스를 올바르게 닫으십시오.

예: 사용 addBatch()executeBatch() 1000건의 삽입 작업에서 데이터베이스 왕복 횟수가 크게 줄어들어 효율성이 향상됩니다.


9) JDBC에서 배치 업데이트란 무엇이며 어떻게 작동합니까?

일괄 업데이트를 사용하면 여러 SQL 문을 동시에 실행할 수 있으므로 데이터베이스와의 통신을 최소화할 수 있습니다.

단계 :

  1. 만들기 PreparedStatement.
  2. 여러 쿼리를 추가하려면 다음을 사용하세요. addBatch().
  3. 모두 실행하려면 다음을 사용하세요. executeBatch().

예:

PreparedStatement ps = conn.prepareStatement("INSERT INTO student VALUES(?, ?)");
ps.setInt(1, 1); ps.setString(2, "Alice"); ps.addBatch();
ps.setInt(1, 2); ps.setString(2, "Bob"); ps.addBatch();
ps.executeBatch();

배치 처리는 대규모 데이터 삽입 또는 업데이트 시 성능을 크게 향상시킵니다.


10) JDBC에서 ResultSet 인터페이스의 역할은 무엇입니까?

ResultSet SQL 쿼리를 실행하여 생성된 데이터 테이블을 나타냅니다. 이를 통해 행을 순회하고 열 값에 접근할 수 있습니다. getXXX() 방법.

예:

ResultSet rs = stmt.executeQuery("SELECT name FROM employees");
while(rs.next()) {
   System.out.println(rs.getString("name"));
}

ResultSet의 유형:

  • TYPE_FORWARD_ONLY 앞으로만 나아갈 수 있습니다.
  • TYPE_SCROLL_INSENSITIVE 스크롤 기능은 있지만 데이터베이스 변경 사항에는 반응하지 않습니다.
  • TYPE_SCROLL_SENSITIVE 데이터베이스의 변경 사항을 실시간으로 반영합니다.

ResultSet 이는 쿼리 결과를 효율적이고 유연하게 읽는 데 필수적입니다.


11) JDBC와 ODBC의 차이점은 무엇입니까?

JDBC(Java ODBC(Open Database Connectivity)와 CMS는 모두 데이터베이스 접근을 허용하지만, 플랫폼 의존성과 사용 방식에서 근본적인 차이가 있습니다.

요인 JDBC ODBC
지원하는 언어 순수한 Java C 기반
플랫폼 플랫폼 독립적 플랫폼에 따라 다름
드라이버 유형 1~4형 단일 ODBC 드라이버
성능 더 높은 (유형 4) 연결로 인해 낮아짐
용법 Java 어플리케이션 Windows-기반 프로그램

슬립폼 공법 선택시 고려사항 JDBC는 다음과 같은 용도로 맞춤 제작되었습니다. Java 다양한 환경에서 사용 가능하며 데이터베이스 간에 원활한 이식성을 제공합니다. ODBC는 다재다능하지만 추가적인 네이티브 계층 종속성을 도입하므로 현대 기업 환경에서는 JDBC가 더 나은 선택입니다. Java 분야의 다양한 어플리케이션에서 사용됩니다.


12) JDBC 아키텍처의 구성 요소는 무엇입니까?

JDBC 아키텍처는 데이터베이스 통신을 가능하게 하기 위해 상호 작용하는 주요 구성 요소로 이루어져 있습니다.

  1. JDBC API – 다음과 같은 수업을 제공합니다 Connection, StatementResultSet.
  2. JDBC 드라이버 관리자 – 데이터베이스 드라이버 목록을 관리합니다.
  3. JDBC 테스트 드라이버 – 데이터베이스 통신을 위한 유형 1~4 구현.
  4. 데이터베이스 - 실제 데이터를 저장하는 백엔드 시스템.

예시 흐름: Java 애플리케이션 → JDBC API → JDBC 드라이버 관리자 → JDBC 드라이버 → 데이터베이스

이러한 계층 구조 덕분에 JDBC는 유연성, 벤더 독립성 및 향상된 유지 관리성을 확보할 수 있습니다.


13) JDBC에서 ResultSetMetaData와 DatabaseMetaData는 무엇인가요?

두 클래스 모두 유용한 메타데이터를 제공하지만 목적은 서로 다릅니다.

메타데이터 유형 기술설명 사용 예
결과세트메타데이터 쿼리 결과의 열에 대한 정보를 제공합니다. rsmd.getColumnName(1)
데이터베이스메타데이터 데이터베이스 자체에 대한 정보를 제공합니다. dbmd.getDatabaseProductName()

예:

DatabaseMetaData dbmd = conn.getMetaData();
System.out.println(dbmd.getDriverName());

이러한 메타데이터 인터페이스는 개발자가 필드 이름이나 유형을 하드코딩하지 않고도 데이터베이스 스키마 세부 정보를 동적으로 탐색할 수 있도록 지원합니다.


14) JDBC 트랜잭션에서 세이브포인트를 어떻게 사용하나요?

A 저장 지점 트랜잭션 내에서 부분 롤백을 허용합니다. 전체 트랜잭션을 취소하지 않고 롤백할 수 있는 지점을 표시합니다.

예:

conn.setAutoCommit(false);
Savepoint sp1 = conn.setSavepoint("Save1");
// Perform operations
conn.rollback(sp1); // Roll back only to this point
conn.commit();

이점:

  • 대규모 거래에 대한 통제력을 향상시킵니다.
  • 전체 롤백 위험을 줄입니다.
  • 부분적인 작업을 격리하여 데이터 무결성을 향상시킵니다.

저장점은 특히 금융 거래나 여러 단계를 거치는 데이터 작업에서 유용합니다.


15) JDBC에서 RowSet의 개념을 설명하고, RowSet의 타입은 무엇인지 설명하세요.

A 행 집합 의 확장이다 ResultSet 연결이 끊긴 상태에서도 스크롤 가능하고 직렬화 가능한 데이터 접근을 지원합니다. ResultSet이 프로그램은 지속적인 데이터베이스 연결을 유지하지 않고도 사용할 수 있습니다.

RowSet의 종류:

  1. JdbcRowSet – 연결된 행 집합.
  2. CachedRowSet – 연결이 끊어진 행 집합입니다.
  3. 웹로우셋 – XML 기반 RowSet.
  4. 필터링된 행 집합 – 필터링된 데이터 보기.
  5. JoinRowSet - 여러 행 집합을 결합합니다.

예:

CachedRowSet crs = new CachedRowSetImpl();
crs.setUrl("jdbc:mysql://localhost/test");
crs.setCommand("SELECT * FROM EMPLOYEE");
crs.execute();

이점: RowSets는 가볍고 오프라인에서 데이터를 조작할 수 있도록 해주므로 모바일이나 연결이 끊긴 시스템에 이상적입니다.


16) JDBC는 SQL 예외를 어떻게 처리합니까?

JDBC는 데이터베이스 관련 오류를 다음과 같은 방식으로 처리합니다. SQLException 이 클래스는 자세한 오류 정보를 검색하는 메서드를 제공합니다.

  • getErrorCode() – 공급업체별 코드를 반환합니다.
  • getSQLState() – SQL 표준 상태 코드를 반환합니다.
  • getMessage() – 오류 설명을 제공합니다.

예:

try {
   stmt.executeQuery("SELECT * FROM invalid_table");
} catch(SQLException e) {
   System.out.println("Error Code: " + e.getErrorCode());
}

Tip 디버깅을 개선하려면 예외를 항상 기록하고 데이터 일관성을 유지하기 위해 트랜잭션을 롤백하십시오.


17) JDBC에서 배치 처리란 무엇이며, 어떻게 효율성을 향상시키는가?

일괄 처리를 통해 여러 SQL 문을 단일 단위로 실행할 수 있으므로 개별 호출의 오버헤드를 최소화할 수 있습니다.

예:

Statement stmt = conn.createStatement();
stmt.addBatch("INSERT INTO STUDENT VALUES(1, 'John')");
stmt.addBatch("INSERT INTO STUDENT VALUES(2, 'Alex')");
stmt.executeBatch();

장점:

  • 네트워크 왕복 횟수를 줄입니다.
  • 거래 성능을 향상시킵니다.
  • 데이터베이스 연결 사용량을 최소화합니다.

일괄 처리는 대규모 데이터 가져오기 또는 반복적인 DML 작업에 이상적입니다.


18) JDBC에서 문장의 종류는 무엇인가요?

JDBC는 각각 다른 사용 사례에 최적화된 세 가지 주요 유형의 문장을 제공합니다.

명세서 유형 기술설명 적용 사례
성명서 간단한 SQL 쿼리를 실행합니다. 정적 SQL의 경우
준비된 문 매개변수가 포함된 사전 컴파일된 SQL 변수를 사용하는 동적 SQL의 경우
호출 가능문 저장 프로시저를 실행합니다. 데이터베이스 측 로직을 호출하기 위해

예:

CallableStatement cs = conn.prepareCall("{call updateSalary(?)}");
cs.setInt(1, 5000);
cs.execute();

적절한 유형을 선택하면 성능과 유지보수성이 향상됩니다.


19) 엔터프라이즈 애플리케이션에서 JDBC 연결을 효율적으로 관리하는 방법은 무엇입니까?

효율적인 연결 관리는 리소스 고갈을 방지하고 확장성을 향상시킵니다. 모범 사례는 다음과 같습니다.

  • 연결 Pooling (예: HikariCP, DBCP).
  • 항상 가까운 연결 finally 블록.
  • 잦은 개폐를 피하고, 가능한 경우 재사용하십시오.
  • 풀 로그를 사용하여 연결 누수를 모니터링하세요.

예:

try (Connection conn = dataSource.getConnection()) {
   // Operations
}

Pooling를 사용하면 여러 스레드가 미리 생성된 연결을 공유할 수 있으므로 지연 시간이 줄어들고 전체 처리량이 향상됩니다.


20) JDBC 문과 Hibernate 세션의 차이점은 무엇입니까?

둘 다 데이터베이스에 접근하지만, 추상화 수준과 기능 면에서 상당한 차이가 있습니다.

특색 JDBC 성명 최대 절전 모드 세션
레벨 저수준 API 고수준 ORM
쿼리 유형 SQL HQL/기준 API
거래 수동 처리 내장 지원
매핑 수동 열 매핑 엔티티 기반
캐싱 지원되지 않음 지원

예:

  • JDBC: 개발자가 SQL 쿼리를 수동으로 작성합니다.
  • Hibernate: 엔티티로부터 SQL을 자동으로 생성합니다.

Hibernate는 내부적으로 JDBC를 사용하지만 ORM 기능, 캐싱 및 트랜잭션 관리를 추가하여 엔터프라이즈 데이터베이스 운영을 간소화합니다.


21) INSERT 문을 실행한 후 JDBC에서 자동 생성된 키를 어떻게 검색할 수 있습니까?

자동 생성 키는 기본 키 ID와 같이 데이터베이스에서 자동으로 생성되는 값입니다. JDBC는 이를 제공합니다. Statement.RETURN_GENERATED_KEYS 그것들을 검색할 수 있는 옵션.

예:

PreparedStatement ps = conn.prepareStatement(
    "INSERT INTO employee(name, salary) VALUES(?, ?)", 
    Statement.RETURN_GENERATED_KEYS);
ps.setString(1, "Alice");
ps.setDouble(2, 60000);
ps.executeUpdate();

ResultSet rs = ps.getGeneratedKeys();
if(rs.next()) {
    int id = rs.getInt(1);
    System.out.println("Generated ID: " + id);
}

이점 : 이 기능은 자동 증가 필드가 있는 테이블에 데이터를 삽입할 때 필수적이며, 새로 생성된 레코드 식별자를 쉽게 검색할 수 있도록 해줍니다.


22) JDBC에서 BLOB과 CLOB은 무엇이며, 어떻게 처리됩니까?

BLOB(Binary Large Object) 및 CLOB(Character Large Object)는 이미지, 비디오 및 대용량 텍스트 파일과 같은 대용량 데이터를 저장하는 데 사용됩니다.

타입 저장된 데이터 JDBC 방법
얼룩 이진 데이터(이미지, 오디오) getBinaryStream() / setBinaryStream()
클럽 문자 데이터(XML, 텍스트) getCharacterStream() / setCharacterStream()

예:

PreparedStatement ps = conn.prepareStatement("INSERT INTO files VALUES(?, ?)");
FileInputStream fis = new FileInputStream("photo.jpg");
ps.setBinaryStream(1, fis, (int)new File("photo.jpg").length());
ps.executeUpdate();

참고 : 리소스 누수를 방지하고 적절한 파일 처리를 보장하기 위해 항상 스트림을 닫으십시오.


23) ResultSet을 스크롤 가능하고 업데이트 가능하게 만들려면 어떻게 해야 합니까?

기본적으로 ResultSet 현재는 앞으로만 이동 가능하고 읽기 전용입니다. 스크롤 및 업데이트 기능을 추가하려면 다음 파일을 생성해야 합니다. Statement 특정 유형 및 동시성 모드를 사용합니다.

예:

Statement stmt = conn.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE, 
    ResultSet.CONCUR_UPDATABLE);

ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
rs.absolute(3);
rs.updateString("name", "UpdatedName");
rs.updateRow();

설명 :

  • TYPE_SCROLL_INSENSITIVE: 임의 탐색을 허용하고 데이터베이스 변경 사항을 무시합니다.
  • CONCUR_UPDATABLE: 데이터를 직접 수정할 수 있습니다. ResultSet.

24) JDBC에서 DataSource란 무엇이며 DriverManager와는 어떻게 다른가요?

DataSource 이는 연결 풀 또는 분산 트랜잭션을 통해 연결을 관리하기 위한 인터페이스입니다. 이는 보다 유연한 기능을 제공합니다. DriverManager.

아래 드라이버매니저 데이터 소스
타입 기본 연결 관리 고급 연결 풀링
조회 URL 기반 JNDI 기반
재사용 성 매번 새로운 연결을 생성합니다. 공유된 연결을 재사용합니다.
최고의 사용 작은 앱 기업 시스템

예:

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("jdbc/mydb");
Connection conn = ds.getConnection();

DataSource는 확장성과 성능 향상을 위해 모든 엔터프라이즈 애플리케이션에 권장됩니다.


25) JDBC에서 PreparedStatement를 사용하여 배치 처리를 하는 방법을 설명하십시오.

일괄 처리 PreparedStatement 유사한 SQL 문을 효율적으로 일괄 실행할 수 있습니다.

예:

PreparedStatement ps = conn.prepareStatement("INSERT INTO student VALUES(?, ?)");
for(int i=1; i<=5; i++){
   ps.setInt(1, i);
   ps.setString(2, "Student" + i);
   ps.addBatch();
}
ps.executeBatch();

장점:

  • 네트워크 지연 시간을 줄여줍니다.
  • 데이터베이스와의 통신을 최소화합니다.
  • 거래 처리량을 향상시킵니다.

이 방법은 수천 개의 레코드를 삽입하거나 반복적인 업데이트를 수행할 때 특히 유용합니다.


26) JDBC의 DatabaseMetaData를 사용하여 데이터베이스 메타데이터 분석을 어떻게 수행합니까?

DatabaseMetaData 데이터베이스 및 드라이버 기능에 대한 자세한 정보를 제공합니다.

예:

DatabaseMetaData dbmd = conn.getMetaData();
System.out.println("Database: " + dbmd.getDatabaseProductName());
System.out.println("Driver: " + dbmd.getDriverName());
System.out.println("URL: " + dbmd.getURL());

일반적인 용도 :

  • 지원되는 SQL 기능을 확인합니다.
  • 테이블, 스키마 및 열 정보를 검색합니다.
  • 드라이버 호환성을 확인하십시오.

이는 특히 동적 데이터베이스 적응성이 요구되는 애플리케이션에 유용합니다.


27) JDBC에서 execute(), executeQuery(), executeUpdate()의 차이점은 무엇입니까?

이러한 메서드는 다양한 유형의 SQL 문을 실행하는 데 사용됩니다.

방법 반품 적용 사례
execute() 부울 여러 결과 또는 저장된 프로시저에 사용됩니다.
executeQuery() 결과 집합 SELECT 쿼리에 사용됩니다.
executeUpdate() int(영향을 받은 행 수) 삽입, 업데이트, 삭제에 사용됩니다.

예:

int rows = stmt.executeUpdate("UPDATE EMPLOYEE SET salary=6000 WHERE id=101");

핵심: 쿼리 실행의 정확성과 최적의 성능을 보장하기 위해 항상 올바른 방법을 선택하십시오.


28) JDBC 리소스를 닫기 위한 최적의 방법은 무엇입니까?

적절한 리소스 관리는 메모리 누수와 연결 고갈을 방지합니다. 권장되는 접근 방식은 다음과 같습니다. 리소스를 사용하여 시도 in Java.

예:

try (Connection conn = DriverManager.getConnection(url, user, pass);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEE")) {
    while (rs.next()) {
        System.out.println(rs.getString("name"));
    }
}

모범 사례:

  • 항상 가까이 ResultSet, StatementConnection.
  • 연결 풀을 사용하여 더 효율적으로 관리하세요.
  • 불필요한 개방형 연결을 피하십시오.

29) JDBC 성능 최적화를 위한 일반적인 기법에는 어떤 것들이 있습니까?

JDBC 성능 튜닝은 오버헤드를 줄이고 처리량을 향상시키는 데 중점을 둡니다.

최적화 기술:

  1. connection pooling (예: HikariCP).
  2. 취하다 준비된 문 위에 Statement.
  3. 신청 일괄 업데이트 대량 삽입물의 경우.
  4. 가져오기 크기 큰 결과를 얻기 위한 튜닝.
  5. 필요한 열만 가져옵니다.SELECT column1, column2).
  6. 작업을 통합하여 네트워크 왕복 횟수를 최소화하십시오.

예:

stmt.setFetchSize(1000);

이러한 최적화는 종합적으로 애플리케이션의 속도, 확장성 및 안정성을 향상시킵니다.


30) JDBC에서 저장 프로시저를 호출하는 방법은 무엇입니까?

저장 프로시저는 데이터베이스에 저장된 미리 컴파일된 SQL 문입니다. JDBC는 이를 사용합니다. CallableStatement 그것들을 실행하기 위해.

예:

CallableStatement cs = conn.prepareCall("{call getEmployeeSalary(?)}");
cs.setInt(1, 101);
ResultSet rs = cs.executeQuery();
while (rs.next()) {
    System.out.println("Salary: " + rs.getDouble(1));
}

장점:

  • 성능을 향상시킵니다(사전 컴파일된 로직).
  • 보안을 강화합니다(접근 제어).
  • 코드 재사용을 장려합니다.

저장 프로시저는 복잡한 비즈니스 로직을 데이터베이스 계층 내에 캡슐화하는 데 이상적입니다.


31) JDBC 연결이란 무엇입니까? Pooling는 내부적으로 어떻게 작동하는 건가요?

JDBC 연결 Pooling는 데이터베이스 연결을 반복적으로 열고 닫는 대신 미리 생성된 연결을 재사용하는 메커니즘입니다.

연결 풀이 초기화되면 정의된 개수의 데이터베이스 연결이 생성되어 메모리에 유지됩니다. 애플리케이션이 연결을 요청하면 새 연결을 생성하는 대신 풀에서 기존 연결을 가져옵니다. 사용 후에는 재사용을 위해 풀로 반환됩니다.

장점:

  • 연결 생성 오버헤드를 줄입니다.
  • 애플리케이션 응답성을 향상시킵니다.
  • 동시 접속 사용자 수에 대한 확장성을 향상시킵니다.

다음과 같은 프레임워크 히카리CP아파치 DBCP 이러한 풀을 효율적으로 관리하기 위해 일반적으로 사용됩니다.


32) HikariCP를 사용하여 JDBC에서 연결 풀링을 어떻게 구성합니까?

HikariCP는 최신 기술에서 사용되는 고성능 JDBC 연결 풀입니다. Java 분야의 다양한 어플리케이션에서 사용됩니다.

구성 예:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();

주요 혜택:

  • 매우 빠르고 가볍습니다.
  • 낮은 지연 시간과 최소한의 오버헤드.
  • 수영장 상태를 자동으로 모니터링합니다.

HikariCP는 뛰어난 속도와 안정성 덕분에 Spring Boot 및 마이크로서비스에 선호됩니다.


33) JDBC에서 DriverManager와 DataSource의 차이점은 무엇입니까?

둘 다 데이터베이스 연결을 얻는 데 사용되지만 확장성과 아키텍처에서 차이가 있습니다.

특색 드라이버매니저 데이터 소스
연결 유형 직접 연결 풀링/분산
구성 코드에 하드코딩됨 JNDI를 통해 외부에서 구성됨
성능 낮 춥니 다 더 높은
기업용 소규모 애플리케이션 엔터프라이즈급 시스템
거래 내역 제한된 XA 트랜잭션을 지원합니다.

슬립폼 공법 선택시 고려사항 DaVinci에는 DriverManager 더 간단합니다. DataSource 웹 및 기업 환경에 적합한 전문적인 연결 관리 기능을 제공합니다.


34) JDBC에서 "적합한 드라이버를 찾을 수 없습니다" 오류가 발생하는 일반적인 원인은 무엇입니까?

이는 JDBC가 데이터베이스 드라이버를 찾거나 로드할 수 없을 때 자주 발생하는 오류입니다.

원인 :

  1. 클래스패스에 JDBC 드라이버 JAR 파일이 포함되어 있지 않습니다.
  2. JDBC URL 형식이 잘못되었습니다.
  3. 누락 Class.forName() (구식 표현) Java 버전).
  4. 드라이버 버전과 데이터베이스 버전이 일치하지 않습니다.

예시 수정 사항:

Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "pass");

드라이버를 올바르게 등록하고 호환되는 버전을 사용하면 이 문제가 해결됩니다.


35) JDBC에서 SQL 인젝션 공격을 방지하는 방법은 무엇입니까?

SQL 인젝션은 악의적인 SQL 코드가 쿼리에 삽입될 때 발생합니다. 최선의 방어책은 다음과 같습니다. PreparedStatement를 사용하여 문자열 연결 대신에.

안전하지 않은 코드:

Statement stmt = conn.createStatement();
stmt.executeQuery("SELECT * FROM users WHERE name='" + userInput + "'");

안전한 코드:

PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE name=?");
ps.setString(1, userInput);

기타 조치:

  • 입력값을 검증하고 정제합니다.
  • 데이터베이스 권한을 제한하세요.
  • 민감한 작업에는 저장 프로시저를 사용하십시오.

PreparedStatements는 특수 문자를 자동으로 이스케이프 처리하므로 안전한 JDBC 코드를 작성하는 데 필수적입니다.


36) JDBC를 직접 사용하는 것과 Hibernate와 같은 ORM 프레임워크를 사용하는 것의 장점과 단점은 무엇입니까?

아래 JDBC 최대 절전 모드
Control: 세밀한 SQL 제어 자동화된 ORM 매핑
성능 간단한 작업에는 더 빠릅니다. 약간 더 느리게 (추상적으로)
학습 곡선 쉽게 복잡한
이식성 SQL 방언으로 제한됨 높음(데이터베이스 무관)
생산성 수동 코딩 간소화된 기본 문구

슬립폼 공법 선택시 고려사항 JDBC는 완벽한 제어와 성능을 제공하지만 트랜잭션 관리 및 객체 매핑에 더 많은 노력이 필요합니다. Hibernate는 CRUD 작업을 간소화하고 캐싱을 지원하지만, 가벼운 애플리케이션에는 과할 수 있습니다.


37) JDBC를 통해 실행된 SQL 쿼리를 어떻게 로깅합니까?

SQL 쿼리 로깅은 디버깅 및 성능 모니터링에 필수적입니다.

기법:

  1. JDBC 드라이버 로깅을 활성화합니다.
    럭셔리 MySQL, 추가 : jdbc:mysql://localhost:3306/test?logger=com.mysql.cj.log.StandardLogger
  2. 로깅 프레임워크를 사용하십시오.
    JDBC를 SLF4J 또는 Log4j 인터셉터로 감싸십시오.
  3. 연결 프록시 라이브러리:
    같은 도구 P6스파이 or 데이터소스-프록시 JDBC 호출을 가로채고 SQL 쿼리를 투명하게 기록합니다.

예시 (P6Spy 설정):

modulelist=com.p6spy.engine.spy.P6SpyFactory
driverlist=com.mysql.cj.jdbc.Driver

이러한 도구는 코드 로직을 수정하지 않고도 느린 쿼리를 식별하고 성능을 최적화하는 데 도움이 됩니다.


38) 멀티스레드 환경에서 JDBC를 안전하게 사용하는 방법은 무엇입니까?

JDBC 연결은 다음과 같습니다. 스레드 안전하지 않음그러므로 각 스레드는 자체적으로 유지해야 합니다. Connection, StatementResultSet.

모범 사례:

  • connection pooling (예: HikariCP).
  • 공유를 피하십시오 Connection 스레드 간 객체.
  • 모든 리소스를 닫습니다 finally 블록 또는 try-with-resources를 사용하세요.
  • 동기화는 공유 객체에만 사용하고 JDBC 작업에는 사용하지 마십시오.

예:

각 스레드는 연결 풀에서 연결을 빌려옵니다.

Connection conn = dataSource.getConnection();

완료되면 안전하게 반환됩니다. 이는 스레드 격리와 데이터 일관성을 보장합니다.


39) JDBC는 Spring Framework 또는 Spring Boot와 어떻게 통합됩니까?

Spring은 JDBC 통합을 원활하게 제공합니다. Jdbc템플릿반복적인 코드를 간소화합니다.

이 시스템은 연결 관리, 예외 처리 및 리소스 정리를 자동으로 처리합니다.

예:

@Autowired
private JdbcTemplate jdbcTemplate;
public List<Employee> getEmployees() {
    return jdbcTemplate.query("SELECT * FROM employee", 
        (rs, rowNum) -> new Employee(rs.getInt("id"), rs.getString("name")));
}

이점:

  • 매뉴얼 없음 try-catch-finally 블록.
  • 일관된 예외 처리.
  • 내장형 거래 관리 기능.

Spring Boot 자동 구성 DataSource 또한 프로덕션 환경에 대비하여 연결 풀링을 통합합니다.


40) JDBC Connection 객체는 수명 주기 동안 어떤 상태를 가질 수 있습니까?

JDBC 연결은 수명 주기 동안 여러 상태를 거칩니다.

주 정부 기술설명
초기화 연결 객체가 생성되었지만 아직 연결되지 않았습니다.
엽니다 데이터베이스와의 연결이 설정되었습니다.
거래에서 트랜잭션 내에서 SQL 작업을 수행합니다.
확정됨/되돌려짐 거래가 완료되었습니다.
휴무 연결이 풀로 반환되거나 종료되었습니다.

예시 흐름:

Connection conn = ds.getConnection();
conn.setAutoCommit(false);
// execute queries
conn.commit();
conn.close();

이러한 상태를 올바르게 관리하면 기업 시스템의 안정성을 확보하고, 데이터 유출을 방지하며, 거래 무결성을 유지할 수 있습니다.


41) JDBC 드라이버에는 어떤 네 가지 유형이 있으며, 성능과 이식성 측면에서 어떤 차이가 있습니까?

JDBC는 JDBC 호출을 데이터베이스별 작업으로 변환하는 방식이 서로 다른 네 가지 드라이버 유형을 정의합니다.

타입 성함 기술설명 이식성 성능
1에게 입력 JDBC-ODBC 브리지 JDBC 호출을 ODBC 호출로 변환합니다. 높음 높음
2에게 입력 네이티브 API 벤더별 네이티브 라이브러리를 사용합니다. 중급 중급
3에게 입력 네트워크 프로토콜 번역을 위해 미들웨어를 사용합니다. 높음 보통
4에게 입력 얇은 드라이버 순수한 Java 드라이버가 DB와 직접 통신합니다. 매우 높음 매우 높음

슬립폼 공법 선택시 고려사항 타입 4 드라이버는 순수한 성능 덕분에 오늘날 가장 선호되는 드라이버입니다. Java 본질적인 특성, 높은 성능 및 플랫폼 독립성. 구형 유형은 최신 애플리케이션에서 거의 사용되지 않습니다.


42) JDBC에서 트랜잭션 격리란 무엇이며, 격리 수준에는 어떤 것들이 있습니까?

트랜잭션 격리 수준은 데이터베이스 트랜잭션들이 서로 상호 작용하는 방식을 정의합니다. JDBC는 동시 트랜잭션 간의 데이터 가시성을 결정하는 표준 SQL 격리 수준을 지원합니다.

격리 수준 방지 기술설명
READ_UNCOMMITTED 더티 리드 커밋되지 않은 데이터를 읽습니다.
READ_COMMITTED 더티 리드 많은 데이터베이스에서 기본값으로 설정되어 있습니다.
반복 가능 읽기 반복 불가능한 읽기 거래 중 변경을 방지합니다.
직렬화 가능 팬텀 리즈 가장 엄격한 방식으로 완벽한 격리를 보장합니다.

예:

conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

핵심: 격리 수준이 높을수록 데이터 일관성은 향상되지만 동시성 성능이 저하될 수 있으므로 비즈니스 요구 사항에 따라 선택해야 합니다.


43) JDBC는 분산(XA) 트랜잭션을 어떻게 지원합니까?

JDBC는 분산 트랜잭션을 지원합니다. XA 프로토콜이는 단일 트랜잭션 하에서 여러 데이터베이스 또는 시스템을 조정합니다.

이는 다음을 사용하여 처리됩니다.

  • javax.sql.XADataSource 연결 풀링 및 분산 제어를 위해.
  • 거래 관리자 (예 : Atomikos, Bitronix 또는 Spring의 JTA).

예시 워크플로:

  1. 글로벌 거래를 시작하세요.
  2. 여러 데이터베이스에 액세스합니다.
  3. 2단계 커밋 프로토콜(2PC)을 사용하여 준비하고 커밋합니다.

사용 사례 : 은행 송금이나 여러 시스템에 걸쳐 ACID 규정을 준수해야 하는 기업 애플리케이션.

XA 트랜잭션은 강력하지만 복잡하므로 교착 상태를 방지하기 위해 세심한 관리가 필요합니다.


44) 운영 시스템에서 JDBC 성능을 어떻게 프로파일링합니까?

JDBC 성능 프로파일링을 통해 느린 쿼리와 병목 현상을 식별할 수 있습니다.

도구 및 기법:

  1. P6Spy 또는 datasource-proxy SQL 문을 기록하고 분석합니다.
  2. JVisualVM / Java 비행기록장치(JFR) 연결 사용량을 모니터링하기 위해.
  3. 데이터베이스 수준 도구 처럼 MySQL의 EXPLAIN 검색 결과를 프로파일링합니다.
  4. 측정항목 수집 Prometheus와 Grafana 대시보드를 사용합니다.

모범 사례:

  • 각 쿼리의 실행 시간을 기록합니다.
  • 장기 실행 거래를 식별합니다.
  • 인덱스와 쿼리 설계를 최적화하세요.

프로파일링을 통해 애플리케이션은 과부하 상태에서도 최적의 데이터베이스 상호 작용을 유지할 수 있습니다.


45) JDBC 메모리 누수의 일반적인 원인은 무엇이며, 이를 방지하는 방법은 무엇입니까?

메모리 누수는 JDBC 리소스와 같은 경우에 발생합니다. Connection, StatementResultSet 제대로 닫히지 않았습니다.

일반적인 원인 :

  • 누락 close() 전화.
  • 정리 작업을 중단시키는 예외 발생.
  • 연결 풀 구성이 잘못되었습니다.
  • 처리되지 않은 대용량 결과 집합이 메모리에 저장되어 있습니다.

예방:

  • 항상 사용 리소스를 사용하여 시도 블록.
  • 구성 maxIdleTime최대 수명 수영장에서.
  • 보관을 피하세요 ResultSet 전 세계적으로 참조됩니다.

예:

try (Connection conn = dataSource.getConnection();
     Statement stmt = conn.createStatement()) {
     // Execute queries
}

적절한 메모리 정리 작업은 장시간 실행되는 애플리케이션에서 안정적인 메모리 사용과 높은 가용성을 보장합니다.


46) JDBC를 마이크로서비스 또는 클라우드 네이티브 환경에 최적화하려면 어떻게 해야 할까요?

마이크로서비스 및 클라우드 환경에서는 경량화되고 복원력이 뛰어난 JDBC 사용이 매우 중요합니다.

최적화 :

  • 히카리CP 경량 연결 풀링을 위해.
  • 취하다 무국적자 JDBC 세션.
  • 이점 읽기 복제본 그리고 캐싱(예: Redis).
  • 구현 회로 차단기 (Resilience4j)는 데이터베이스 장애 복구를 위한 도구입니다.
  • 접속 시간 초과공허한 퇴거 매개 변수를 설정합니다.

구성 예:

config.setConnectionTimeout(3000);
config.setIdleTimeout(60000);

목표 : 컨테이너 및 분산 시스템 전반에 걸쳐 JDBC 연결이 효율적이고, 내결함성이 뛰어나며, 자동 확장이 가능하도록 보장합니다.


47) JDBC에서 데이터베이스 연결 실패를 어떻게 적절하게 처리할 수 있습니까?

분산 환경에서는 연결 실패가 불가피하며, JDBC는 애플리케이션이 다운되지 않도록 이러한 실패를 처리해야 합니다.

모범 사례:

  1. 연결 재시도 기능을 사용하세요 지수적 백오프를 사용합니다.
  2. SQLTransientConnectionException을 처리합니다. 일시적인 오류에 대해서.
  3. 대체 로직을 구현하세요 또는 재시도 대기열.
  4. 데이터 소스 연결 풀을 사용하세요 자동 복구를 위해서입니다.

예:

for (int i = 0; i < 3; i++) {
   try (Connection conn = ds.getConnection()) {
       break; // success
   } catch (SQLTransientConnectionException e) {
       Thread.sleep(1000 * (i + 1)); // exponential retry
   }
}

이는 일시적인 데이터베이스 장애 발생 시에도 복원력을 보장합니다.


48) JDBC에서 commit, rollback, savepoint의 차이점은 무엇입니까?

Concept 기술설명 예시
커밋 거래를 영구적으로 확정합니다. conn.commit()
되돌리기 Rev마지막 커밋 이후의 모든 변경 사항을 표시합니다. conn.rollback()
저장 지점 특정 시점으로 부분 롤백을 허용합니다. Savepoint sp = conn.setSavepoint("sp1")

예:

conn.setAutoCommit(false);
Savepoint sp = conn.setSavepoint();
conn.rollback(sp);
conn.commit();

사용 사례 : 저장점은 전체 과정을 되돌리지 않고 부분적으로 실행 취소가 필요한 대규모 트랜잭션에서 매우 중요합니다.


49) JDBC는 데이터베이스 메타데이터를 어떻게 처리하며, 이는 왜 유용한가요?

JDBC는 다음을 통해 메타데이터를 제공합니다. 데이터베이스메타데이터결과세트메타데이터 인터페이스.

데이터베이스메타데이터: 지원되는 SQL 유형, 드라이버 버전 및 스키마와 같은 데이터베이스 수준 정보를 제공합니다.

ResultSetMetaData: 열 이름 및 데이터 유형과 같은 결과 집합 수준의 세부 정보를 제공합니다.

예:

DatabaseMetaData dbmd = conn.getMetaData();
System.out.println(dbmd.getDatabaseProductName());

용도 :

  • 동적 쿼리 생성.
  • 스키마 탐색 도구.
  • 데이터베이스 호환성 검사.

메타데이터를 사용하면 여러 데이터베이스 시스템과 동적으로 상호 작용해야 하는 애플리케이션에 JDBC를 적용할 수 있습니다.


50) 엔터프라이즈급 애플리케이션에서 JDBC를 사용하는 데 있어 가장 효과적인 방법은 무엇입니까?

안정성, 확장성 및 유지보수성을 보장하기 위해 다음 JDBC 모범 사례를 준수하십시오.

  1. 항상 가까이 Connection, StatementResultSet.
  2. connection pooling데이터 소스 대신 DriverManager.
  3. 취하다 준비된 문 매개변수화된 쿼리의 경우.
  4. 구현 거래 관리 적절한 격리를 통해 주의 깊게.
  5. 데이터 가져오기 크기가 너무 크면 안 됩니다. 결과가 많을 경우 페이지네이션을 사용하세요.
  6. 로깅 및 모니터링 (예: P6Spy).
  7. 배치 작업 및 캐싱을 최적화합니다.
  8. 재시도 및 대체 로직을 통해 예외를 적절하게 처리하세요.

결과: 이러한 원칙을 준수하면 JDBC 애플리케이션이 운영 환경에서 안정적이고 성능이 우수하며 안전하게 유지됩니다.


🔍 JDBC 면접에서 자주 나오는 질문들과 실제 시나리오 및 전략적 대응 방안

다음은 JDBC 면접에서 나올 만한 10가지 질문과 면접관이 기대하는 답변, 그리고 효과적인 답변 예시입니다.

1) JDBC란 무엇이며, 왜 중요한가요? Java-기반 애플리케이션?

후보자에게 기대하는 것: JDBC의 핵심 목적과 데이터베이스 연결에서의 역할에 대한 이해.

예시 답변: “JDBC는 Java API를 활성화합니다 Java 표준 인터페이스를 통해 애플리케이션이 관계형 데이터베이스와 상호 작용할 수 있도록 합니다. 이는 서로 다른 데이터베이스 시스템에서 쿼리를 실행하고, 데이터를 검색하고, 트랜잭션을 관리하는 일관된 방식을 제공하기 때문에 중요합니다.


2) JDBC 드라이버의 역할과 다양한 드라이버 유형에 대해 설명해 주시겠습니까?

후보자에게 기대하는 것: 네 가지 드라이버 유형과 각 유형의 사용 사례에 대한 지식.

예시 답변: "JDBC 드라이버는 JDBC와 다른 기술 간의 통신을 가능하게 하는 구현체입니다." Java 애플리케이션과 데이터베이스에 사용됩니다. 유형은 4가지가 있습니다. 유형 1(JDBC-ODBC 브리지), 유형 2(네이티브 API), 유형 3(네트워크 프로토콜), 유형 4(순수 API)입니다. Java 드라이버). 타입 4 드라이버는 플랫폼에 독립적이며 더 나은 성능을 제공하기 때문에 오늘날 가장 일반적으로 사용됩니다.


3) 대규모 애플리케이션에서 데이터베이스 연결을 효율적으로 처리하는 방법은 무엇입니까?

후보자에게 기대하는 것: 연결 풀링 및 성능 최적화에 대한 인식.

예시 답변: "효율적인 연결 관리를 위해 HikariCP나 Apache DBCP 같은 연결 풀링 프레임워크를 사용합니다. 이러한 풀은 활성 연결 집합을 유지하여 새로운 연결을 반복적으로 생성하는 오버헤드를 줄이고 부하가 높은 환경에서 성능을 향상시킵니다."


4) Statement, PreparedStatement, CallableStatement의 차이점을 설명하십시오.

후보자에게 기대하는 것: 문장 유형과 각 유형을 언제 사용해야 하는지에 대한 이해.

예시 답변: "Statement 간단한 정적 SQL 쿼리에 사용됩니다. PreparedStatement 매개변수화된 쿼리에 사용되며 SQL 인젝션을 방지하는 데 도움이 됩니다. CallableStatement 저장 프로시저를 실행하는 데 사용됩니다. 올바른 유형을 선택하면 성능과 보안이 모두 향상됩니다.


5) 애플리케이션에서 JDBC 성능을 최적화했던 경험에 대해 말씀해 주세요.

후보자에게 기대하는 것: 주도성과 분석력을 보여주는 실제 사례.

예시 답변: "이전 직장에서 특정 쿼리가 반복적인 연결 생성으로 인해 너무 오래 걸리는 것을 발견했습니다. 그래서 연결 풀을 도입하고 연결된 SQL 쿼리를 다른 방식으로 대체했습니다." PreparedStatement 객체들을 통합함으로써 성능이 향상되었을 뿐만 아니라 보안도 강화되었습니다."


6) JDBC를 사용할 때 SQL 인젝션을 방지하는 방법은 무엇입니까?

후보자에게 기대하는 것: 보안 모범 사례에 대한 지식.

예시 답변: “가장 확실한 방법은 사용하는 것입니다.” PreparedStatement 매개변수화된 쿼리를 사용합니다. 이렇게 하면 사용자 입력이 실행 가능한 SQL이 아닌 데이터로 처리됩니다. 또한 입력 데이터의 유효성을 검사하고 가능한 한 동적 SQL 생성을 피합니다.


7) JDBC 연결 실패 문제를 해결해야 했던 상황을 설명하고, 어떤 단계를 거쳤는지 설명하십시오.

후보자에게 기대하는 것: 논리적인 디버깅 과정 및 문제 해결 능력.

예시 답변: "이전 직장에서 운영 중인 애플리케이션이 데이터베이스에 연결되지 않는 문제가 발생했습니다. 네트워크 구성을 확인하고, 자격 증명을 검증하고, JDBC URL 형식을 검토했습니다. 로그를 살펴본 결과, 데이터베이스 마이그레이션 중에 포트 설정이 잘못된 것을 발견했습니다. URL을 수정하니 문제가 해결되었습니다."


8) JDBC에서 트랜잭션을 어떻게 관리하며, 트랜잭션이 중요한 이유는 무엇입니까?

후보자에게 기대하는 것: 의 이해 commit, rollback그리고 ACID 규정을 준수합니다.

예시 답변: “JDBC를 사용하면 애플리케이션이 트랜잭션을 관리할 수 있습니다. Connection 객체입니다. 자동 커밋을 비활성화하고 여러 작업을 실행한 다음 호출할 수 있습니다. commit or rollback 결과에 따라 달라집니다. 트랜잭션 관리는 데이터 무결성을 보장하고 ACID 속성을 지원합니다.


9) JDBC를 사용하여 해결했던 까다로운 데이터베이스 관련 문제에 대해 이야기해 주세요.

후보자에게 기대하는 것: 디버깅, 최적화 또는 복잡한 SQL 처리 경험.

예시 답변: "이전 직장에서 대규모 데이터 세트를 일괄 삽입해야 하는 기능을 개발했습니다. 초기 구현 방식은 레코드를 하나씩 삽입하는 방식이라 성능 문제가 발생했습니다. 그래서 일괄 처리 방식을 사용하여 로직을 개선했습니다." PreparedStatement이는 실행 시간을 크게 단축시켰습니다.


10) 여러 프로젝트에서 촉박한 기한 내에 동시에 JDBC 기능 개선이 필요한 상황을 어떻게 처리하시겠습니까?

후보자에게 기대하는 것: 시간 관리, 우선순위 설정 및 의사소통.

예시 답변: "먼저 각 개선 사항의 시급성, 영향력, 복잡성을 평가하겠습니다. 이해관계자들에게 일정을 명확하게 전달하고, 작업을 관리 가능한 부분으로 나누며, 가장 중요한 항목부터 먼저 처리하겠습니다. 필요한 경우, 팀원들과 협력하여 코드 품질을 유지하면서 기한 내에 완료할 수 있도록 하겠습니다."

이 게시물을 요약하면 다음과 같습니다.