DB 세션(Session) 이란?

유경록·2025년 3월 31일

데이터베이스

목록 보기
4/5
post-thumbnail

DB 세션(Session) 이란?

데이터베이스에서 세션(Session)은 클라이언트가 데이터베이스에 연결되어 있는 동안의 논리적인 작업 단위이다. 흔히 연결(Connection)과 혼동하기 쉬운데, 이 둘은 엄연히 다르다.


📌 Connection vs Session

ConnectionSession
정의DB와 Client 간의 물리적 통신 경로Client가 연결을 통해 서버에서 작업을 수행하는 동안의 상태
기능데이터 전송 및 명령 실행상태 정보 유지, 트랜잭션 관리, 세션 변수 등
시작/종료Client가 서버에 접속할 때 설정되고, 작업 완료 시 종료연결이 활성화된 동안 지속되며, 연결 종료 시 세션도 종료
고유 ID일반적으로 물리적 연결에 대한 ID는 없음고유한 세션 ID로 구분 가능
상태 유지Stateless (상태를 기억하지 않음)트랜잭션 상태, 사용자 정보 등 상태를 유지
예시TCP/IP 연결MySQL 세션, ORM 세션

🔍 세션의 특징

  • 세션은 고유한 세션 ID를 가짐
  • 트랜잭션을 시작하고, commit 또는 rollback할 때까지 상태를 유지
  • 세션 내에서만 사용할 수 있는 세션 변수(Session Variable)가 존재
  • 세션이 종료되면 해당 정보도 모두 사라짐

🔹 JDBC 예시 (Raw SQL + 트랜잭션 제어)

import java.sql.*;

public class JdbcSessionExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            conn.setAutoCommit(false);  // 트랜잭션 시작

            String updateSql = "UPDATE users SET name = ? WHERE id = ?";
            try (PreparedStatement pstmt = conn.prepareStatement(updateSql)) {
                pstmt.setString(1, "New Name");
                pstmt.setInt(2, 1);
                pstmt.executeUpdate();

                conn.commit();  // 커밋
            } catch (SQLException e) {
                conn.rollback();  // 예외 발생 시 롤백
                e.printStackTrace();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

🔸 JPA / Hibernate 예시 (ORM 사용)

import jakarta.persistence.*;

public class JpaSessionExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();

        try {
            tx.begin();  // 트랜잭션 시작

            User user = em.find(User.class, 1);
            user.setName("New Name");

            tx.commit();  // 커밋
        } catch (Exception e) {
            tx.rollback();  // 예외 발생 시 롤백
            e.printStackTrace();
        } finally {
            em.close();  // 세션 종료
            emf.close();
        }
    }
}
  • Connection 객체가 DB와의 물리적 연결(Connection)을 나타냄

  • conn.setAutoCommit(false)는 트랜잭션을 시작하는 코드

  • 이 커넥션이 닫히기 전까지 하나의 세션(Session)이 유지됨

배운점

이번 정리를 통해 DB에서의 Connection과 Session의 차이점을 명확하게 이해할 수 있었다.
특히 세션이 단순한 연결이 아니라 트랜잭션 관리와 상태 유지를 위한 논리적 단위라는 점이 인상 깊었다.
JDBC와 JPA에서 세션이 어떻게 다르게 사용되는지도 예제를 통해 직접 확인하면서, 앞으로 트랜잭션을 설계할 때 더 신중하게 접근해야겠다는 생각이 들었다.
ORM을 사용할수록 세션 개념이 더 중요해지기 때문에, 이번 개념 정리는 앞으로의 프로젝트에 큰 도움이 될 것 같다.

profile
작은 문제도 끝까지 파고들며, 꾸준히 성장하는 백엔드 개발자를 지향합니다.

0개의 댓글