Home Java 애플리케이션에서 SQL이 실행되는 과정
Post
Cancel

Java 애플리케이션에서 SQL이 실행되는 과정

1. 애플리케이션 레벨

  1. 쿼리 생성:
    • 애플리케이션 코드에서 SQL 쿼리를 생성합니다.
      1
      2
      3
      
      String sql = "SELECT * FROM my_table WHERE id = ?";
      PreparedStatement pstmt = connection.prepareStatement(sql);
      pstmt.setInt(1, 1);
      
  2. 쿼리 실행 요청:
    • pstmt.execute() 또는 pstmt.executeQuery() 메소드를 호출하여 쿼리 실행을 요청합니다.
      1
      
      ResultSet rs = pstmt.executeQuery();
      

2. JDBC 드라이버 레벨

  1. JDBC 드라이버 처리:
    • JDBC 드라이버는 SQL 쿼리를 받아 데이터베이스 서버로 전송하기 위한 준비를 합니다. 이 과정에서 SQL 쿼리를 네트워크 패킷으로 변환합니다.

3. 네트워크 통신

  1. 소켓 통신 설정:
    • JDBC 드라이버는 애플리케이션과 데이터베이스 서버 간의 소켓 연결을 사용하여 통신합니다. 이 소켓 연결은 이미 HikariCP와 같은 커넥션 풀에서 설정되어 있을 수 있습니다.
  2. 시스템 콜:
    • 네트워크 통신을 수행하기 위해 운영체제의 네트워크 스택을 사용합니다. 여기에는 여러 시스템 콜이 포함됩니다.
    • 예를 들어, send() 시스템 콜을 사용하여 SQL 쿼리를 데이터베이스 서버로 전송합니다.

4. 데이터베이스 서버 레벨

  1. 데이터베이스 서버 수신:
    • 데이터베이스 서버는 클라이언트(애플리케이션)로부터 네트워크를 통해 SQL 쿼리를 수신합니다.
    • 서버의 네트워크 스택에서 recv() 시스템 콜을 사용하여 패킷을 수신합니다.
  2. SQL 쿼리 처리:
    • 데이터베이스 서버는 SQL 쿼리를 파싱, 최적화, 실행 계획 수립 후 실제로 데이터를 검색하거나 조작합니다.
  3. 결과 전송:
    • 쿼리 실행 결과를 클라이언트로 전송합니다. 이 과정도 네트워크 패킷으로 변환되어 전송됩니다.
    • 서버에서 send() 시스템 콜을 사용하여 결과를 클라이언트로 전송합니다.

5. 클라이언트 수신 및 처리

  1. 결과 수신:
    • 클라이언트(애플리케이션)는 서버로부터 결과 패킷을 수신합니다.
    • 네트워크 스택에서 recv() 시스템 콜을 사용하여 데이터를 수신합니다.
  2. 결과 처리:
    • JDBC 드라이버는 수신된 데이터를 ResultSet 객체로 변환하여 애플리케이션에 제공합니다.
      1
      2
      3
      4
      5
      
      while (rs.next()) {
      int id = rs.getInt("id");
      String name = rs.getString("name");
      // 결과 처리
      }
      

네트워크 시스템 콜 예시

클라이언트 측

  • 소켓 생성: socket()
  • 서버에 연결: connect()
  • 데이터 전송: send()
  • 데이터 수신: recv()

서버 측

  • 소켓 생성: socket()
  • 클라이언트 연결 수락: accept()
  • 데이터 수신: recv()
  • 데이터 전송: send()
This post is licensed under CC BY 4.0 by the author.
Trending Tags