Now's Log
Preview Image

데이터베이스 커넥션 풀(Connection Pool)

애플리케이션과 데이터베이스가 통신을 하기 위해서는 데이터베이스 커넥션이 필요하다. 데이터베이스 커넥션의 생애주기 데이터베이스 드라이버를 사용하여 데이터베이스에 연결 데이터 읽기/쓰기를 위한 TCP 소켓 열기 소켓을 통한 데이터 읽기/쓰기 연결 종료 소켓 닫기 커넥션 풀이 없다면 애플리케이션에서 데이터베이스에 접근해야하는 요청...

Preview Image

Thread, Process, Core의 수는 다다익선일까?

스레드, 프로세스, 코어의 수가 많을수록 시스템 성능이 향상된다고 생각할 수 있지만, 실제로 그렇지 않을 확률이 크다. Thread 쓰레드가 지나치게 많아지면 운영체제가 쓰레드 간 컨텍스트 스위칭을 자주 수행해야 하여 CPU 자원이 쓰레드 관리에 소모된다. 이로 인해 실제 작업 수행 효율이 떨어질 수 있으며, 많은 쓰레드가 동시에 실행될 경우 메모리...

Preview Image

단위테스트 VS 통합테스트

단위 테스트는 소프트웨어으 가장 작은 단위, 즉 개별 메서드나 함수의 기능을 검증하는 테스트다. 특정 기능이 올바르게 동작하는지 확인하기 위함이며 독립적이고 빠르게 실행된다. 반면 통합 테스트는 개별 모듈들이 결합되어 전체 시스템이 올바르게 동작하는지 검증하는 테스트다. 모듈 간의 상호작용이 올바르게 동작하는지 확인하기 위함이며 실제 데이터베이스, 네...

Preview Image

동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애시 어떻게 조치해야 할까?

외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능에 악영향을 줄 수 있다. 이를 해결하기 위한 가장 기본적인 방법은 타임아웃을 설정하는 것이다. 크게 타임아웃에는 커넥션 타임아웃과 리드 타임아웃, HTTP 커넥션 풀 타임아웃을 설정해 볼 수 있다. 다음과 같은 특정 서비스 ...