• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Thread.sleep() 의 순서에 대해서

23.07.18 14:28 작성 조회수 625

1

안녕하세요~

@Test void dataSourceConnectionPoolTest() throws SQLException, InterruptedException { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(URL); dataSource.setUsername(USERNAME); dataSource.setPassword(PW); dataSource.setMaximumPoolSize(10); dataSource.setPoolName("MY CUSTOM POOL"); useDataSource(dataSource);
Thread.sleep(1000); }

해당 함수에서 궁금한 점이 있어서 질문을 남기게 되었습니다.

제가 이해한 바로는 위 행위는

"새로운 나만의 custom Hikari Pool을 만드는 것" 으로 이해했고, 해당 hikari Pool 이 생성되었고, 10개의 Pool 을 지정해줌에 따라 Pool에 Connection 을 채워주는 것 같습니다.

이 때, 새로운 스레드를 만들어서 해당 스레드에서 Connection 들을 만들어서 Pool 로 넘겨주기 때문에,
useDataSource(dataSource) 를 통해 새로 만든 HCP 에 있는 Connection 객체를 확인하려면 메인 스레드를 중지하여 잠시 새로운 스레드에서 Connection 을 불러올 시간을 주는 것이라고 이해했습니다.

궁금한 것은, 그렇다면 Thread.sleep() 이 useDataSource 위에 있어야 하는거 아닌가 했습니다. 그래야 새로운 스레드에서 새로운 HCP 에 Connection Pool 을 채워주고, useDataSource() 에서 해당 Connection 을 꺼내올 수 있는 거라고 생각했습니다.

(제가 Connection 이 채워지는 시점을 몰라서 이해가 안된 것 같기도 합니다. 혹시 Connection 을 채워주는 시점이 .setMaximumPoolSize() 를 하는 시점일까요? 언제 채워주기 시작하는지도 궁금합니다)

------------------------------------------------ 추가내용

제가 Thread 를 useDataSource() 위 아래 놓고 로그를 찍어봤는데,
1) Thread.sleep() 없을 경우
2) Thread.sleep() 이 use() 아래 있는 경우 - 강사님이 활용한 경우
3) Thread.sleep() 이 use() 위에 있는 경우 - 제가 생각한 올바른 방법

3) 으로 찍힌 로그와 1) 이 찍힌 로그가 동일하고, 강사님이 활용하신 2) 모습처럼 connection 이 추가되는 모습을 확인할 수 없었습니다.

이 현상도 위에 마지막에 물어본 것처럼 Connection 이 채워지는 시점을 알면 이해에 도움이 될 수 있을 것 같습니다..!

답변 1

답변을 작성해보세요.

1

안녕하세요. 강우석님

setXxx의 경우 커넥션에 관련 정보를 설정하는 것으로 이해하시면 됩니다. 아직 설정중이기 때문에 커넥션 정보를 받으면 안되겠지요?

그래서 커넥션을 최초로 조회하는 시점에 초기화가 진행됩니다.

감사합니다.

강우석님의 프로필

강우석

질문자

2023.07.21

최초 조회 시점이군요!!

그래서 use 를 먼저 호출해서 초기화가 되게끔 한 후

정지를 하는 것이군요!!

이해가 잘 되었습니다 ㅎㅎ 감사합니다!!

새벽 4시 50분에도 일을하고 계시다니.. 정말 대단하십니다..