[Java] chapter11

Ryong·2024년 1월 18일
0

Java

목록 보기
12/12
post-thumbnail

네트워크

자바 네트워크 프로그래밍은 네트워크를 통해 데이터를 주고받는 애플리케이션을 개발하는 것을 의미. 자바에서는 java.net 패키지를 통해 네트워크 프로그래밍을 지원.

1. IP 주소와 포트:

  • IP 주소: 인터넷 상의 각 기기를 식별하기 위한 주소. 자바에서는 InetAddress 클래스를 사용하여 IP 주소를 표현.

  • 포트: 컴퓨터 내의 특정 프로세스를 식별하는 논리적인 번호. 자바에서는 Socket 클래스를 통해 특정 포트로 통신.

2. 클라이언트-서버 모델:

네트워크 프로그래밍에서 가장 일반적인 모델로, 클라이언트가 서버에 요청을 보내고, 서버는 이에 응답하는 구조. 자바에서는 Socket 클래스를 클라이언트와 서버 간의 통신을 구현하는 데 사용하며, ServerSocket 클래스를 통해 서버를 구현.

3. 소켓(Socket) 프로그래밍:

  • 클라이언트 소켓: Socket 클래스를 사용하여 서버에 연결하고, 데이터를 전송.

  • 서버 소켓: ServerSocket 클래스를 사용하여 클라이언트의 연결을 받고, 클라이언트와의 통신을 처리.

클라이언트 소켓 예제:

import java.io.*;
import java.net.*;

public class ClientExample {
    public static void main(String[] args) {
        try {
            // 서버에 연결
            Socket socket = new Socket("localhost", 12345);

            // 데이터 전송을 위한 스트림 생성
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(outputStream, true);

            // 데이터 전송
            writer.println("Hello, Server!");

            // 연결 종료
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

서버 소켓 예제:

import java.io.*;
import java.net.*;

public class ServerExample {
    public static void main(String[] args) {
        try {
            // 서버 소켓 생성 및 포트 바인딩
            ServerSocket serverSocket = new ServerSocket(12345);

            while (true) {
                // 클라이언트의 연결 대기
                Socket clientSocket = serverSocket.accept();

                // 클라이언트와의 통신을 위한 스트림 생성
                InputStream inputStream = clientSocket.getInputStream();
                BufferedReader reader = 
                new BufferedReader(new InputStreamReader(inputStream));

                // 데이터 수신
                String message = reader.readLine();
                System.out.println("Received from client: " + message);

                // 연결 종료
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. URL과 HttpURLConnection:

  • URL 클래스: 자바에서는 URL 클래스를 통해 웹상의 리소스에 접근.

  • HttpURLConnection 클래스: HTTP 프로토콜을 사용하는 웹 서버와 통신하기 위한 클래스.

URL 및 HttpURLConnection 예제:

import java.io.*;
import java.net.*;

public class HttpExample {
    public static void main(String[] args) {
        try {
            // URL 생성
            URL url = new URL("https://www.example.com");

            // HttpURLConnection 열기
            HttpURLConnection connection = 
            (HttpURLConnection) url.openConnection();

            // 요청 방법 설정 (GET, POST 등)
            connection.setRequestMethod("GET");

            // 응답 코드 확인
            int responseCode = connection.getResponseCode();
            System.out.println("Response Code: " + responseCode);

            // 응답 데이터 읽기
            BufferedReader reader = new BufferedReader
            (new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 연결 종료
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 소켓 프로그래밍과 스레드:

네트워크

프로그래밍에서는 일반적으로 여러 클라이언트와의 동시 접속을 처리하기 위해 스레드를 사용. 각 클라이언트는 별도의 스레드에서 처리되며, 서버는 여러 클라이언트의 요청을 병렬적으로 처리.

6. 소켓 통신의 보안(Secure Socket Layer, SSL):

javax.net.ssl 패키지를 사용하여 소켓 통신에 SSL을 적용.
SSL을 사용하면 데이터의 암호화와 서버 인증이 가능해져 보안이 강화.

JDBC

JDBC(Java Database Connectivity)는 자바 프로그램에서 데이터베이스에 접속하고 SQL 문을 실행하는 데 사용되는 API(프로그래밍 인터페이스). JDBC는 데이터베이스에 대한 표준 인터페이스를 제공하여 여러 데이터베이스에 대한 일관된 접근을 가능하게 한다.

1. JDBC의 기본 개념:

  • 드라이버(Driver): JDBC 드라이버는 특정 데이터베이스와 통신하기 위한 라이브러리로서, 해당 데이터베이스를 지원하는 JDBC 드라이버를 사용해야 한다.

  • JDBC URL: JDBC URL은 데이터베이스에 연결하기 위한 주소로, 데이터베이스 종류와 연결 정보를 포함한다.

  • Connection 객체: 데이터베이스에 연결을 나타내는 객체로, DriverManager.getConnection() 메서드를 통해 얻을 수 있다.

  • Statement 객체: SQL 문을 실행하기 위한 객체로, Connection.createStatement() 메서드를 통해 생성한다.

  • ResultSet 객체: 쿼리 결과를 저장하고 조회하기 위한 객체로, Statement.executeQuery() 메서드를 통해 생성한다.

2. JDBC 드라이버 로드:

JDBC 드라이버를 사용하기 위해서는 해당 드라이버를 로드해야 한다. 드라이버는 데이터베이스 공급업체에서 제공하는 JAR 파일에 포함되어 있다.

// MySQL 드라이버 로드 예제
Class.forName("com.mysql.cj.jdbc.Driver");

3. 데이터베이스 연결:

DriverManager.getConnection() 메서드를 사용하여 데이터베이스에 연결한다. 연결 정보는 JDBC URL, 사용자 이름, 비밀번호 등을 포함한다.

String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "username";
String password = "password";
Connection connection = DriverManager.getConnection(url, user, password);

4. SQL 문 실행:

  • Statement 객체를 사용한 실행:
Statement statement = connection.createStatement();
String sql = "SELECT * FROM mytable";
ResultSet resultSet = statement.executeQuery(sql);
  • PreparedStatement 객체를 사용한 실행(파라미터화된 쿼리):
String sql = "INSERT INTO mytable (column1, column2) VALUES (?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "value1");
preparedStatement.setInt(2, 42);
preparedStatement.executeUpdate();

5. 쿼리 결과 처리:

while (resultSet.next()) {
    int id = resultSet.getInt("id");
    String name = resultSet.getString("name");
    System.out.println("ID: " + id + ", Name: " + name);
}

6. 트랜잭션 관리:

JDBC를 사용하여 트랜잭션을 관리할 수 있다. connection.setAutoCommit(false)을 호출하여 자동 커밋을 해제하고, connection.commit() 또는 connection.rollback()을 호출하여 트랜잭션을 완료하거나 롤백할 수 있다.

try {
    connection.setAutoCommit(false);
    // 여러 SQL 문 실행
    connection.commit();
} catch (SQLException e) {
    connection.rollback();
    e.printStackTrace();
} finally {
    connection.setAutoCommit(true);
}

7. 자원 해제:

JDBC를 사용한 후에는 반드시 자원을 해제해야 한다. close() 메서드를 호출하여 연결, 스태이트먼트, 리절트셋 등의 자원을 해제한다.

if (resultSet != null) {
    resultSet.close();
}
if (statement != null) {
    statement.close();
}
if (connection != null) {
    connection.close();
}

8. 예외 처리:

JDBC 메서드는 SQL 예외를 던질 수 있으므로, 예외 처리가 필요한다. try-catch 블록을 사용하여 예외를 처리한다.

try {
    // JDBC 코드
} catch (SQLException e) {
    e.printStackTrace();
}
profile
새로운 시작. 그리고 도약

0개의 댓글