ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION362 / 1500
데이터베이스난이도 중하5분 답변 목표 · 보강본

연결 풀에서 이전 요청의 시간대나 임시 설정이 다음 요청에 남습니다. 연결 반환 때 무엇을 초기화해야 하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

풀은 물리 연결을 재사용하므로 세션 변수·트랜잭션·임시 객체·역할 같은 상태가 다음 요청에 남을 수 있습니다. 요청이 끝났다는 애플리케이션 상태와 DB 세션이 깨끗하다는 사실을 구분해야 합니다.

동작 원리와 전제

요청 A가 세션 시간대나 검색 경로를 바꾸고 그대로 반납하면 B의 쿼리가 다른 의미로 실행될 수 있습니다. 가능하면 transaction-local 설정을 사용하고, 반환 시 rollback·reset 절차와 드라이버 계약을 확인합니다. 사용자 역할을 세션에 저장하는 구성은 특히 인가 누출을 주의합니다.

선택과 실패 처리

취소된 쿼리의 결과를 아직 읽고 있는 연결은 즉시 재사용하면 프로토콜 응답이 섞일 수 있습니다. 드라이버가 정리 완료를 보장하는지 확인하고 불확실한 연결은 폐기합니다. 모든 reset이 무료는 아니므로 필요한 상태를 최소화하고 세션 의존 로직을 줄입니다.

구체적인 사례와 검증

요청 A가 검색 경로를 tenant A 스키마로 바꾼 연결을 반환하고 B가 같은 연결을 받으면, SQL이 같아도 다른 데이터에 접근할 수 있습니다. 설정을 코드에서 다시 넣는 방식만으로는 예외 경로의 누락을 막기 어려워 transaction-local scope나 검증된 pool reset을 사용합니다. reset이 실패하면 그 연결을 정상 풀에 돌려보내지 않습니다. prepared statement나 임시 테이블도 연결별 상태라서 세션 재설정과 성능 영향이 있을 수 있습니다. 풀의 일반적인 테스트뿐 아니라 물리 연결 하나만 사용하게 강제한 테스트로 이전 요청 상태가 다음 요청에 남는지 확인하겠습니다.

같은 연결을 강제로 재사용하는 테스트에서 시간대·role·transaction·예외·취소 경로를 확인합니다. 풀 크기를 늘려 증상을 가리기보다 획득·반환의 상태 계약을 고칩니다. 요청별 문맥은 연결의 우연한 이전 사용자가 아니라 명시적인 입력으로 관리합니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 풀은 물리 연결을 재사용하므로 세션 변수·트랜잭션·임시 객체·역할 같은 상태가 다음 요청에 남을 수 있습니다.
  • 선택 조건: 취소된 쿼리의 결과를 아직 읽고 있는 연결은 즉시 재사용하면 프로토콜 응답이 섞일 수 있습니다.
  • 검증 기준: 같은 연결을 강제로 재사용하는 테스트에서 시간대·role·transaction·예외·취소 경로를 확인합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 연결을 pool에 반환하면 세션 상태가 항상 자동 초기화된다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 쿼리는 짧은데 연결 보유가 길다면 어떤 대기를 transaction 밖으로 옮겨야 하나요?
  • 재사용 실행 단위에 이전 사용자 문맥이 남지 않게 어떤 설정·정리 수명을 두나요?
  • 날짜 경계를 계산할 때 현지 달력 하루와 24시간의 경과를 어떻게 구분하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기