목록매일메일 (63)
종식당

🥛 단위 테스트단위 테스트는 소프트웨어의 가장 작은 단위, 즉 개별 메서드나 함수의 기능을 검증하는 테스트이다. 특정 기능이 올바르게 동작하는지 확인하는 위함이며 독립적이고 빠르게 실행된다.🍭 통합 테스트통합 테스트는 개별 모듈들이 결합되어 전체 시스템이 올바르게 동작하는지 검증하는 테스트이다. 모듈 간의 상호작용이 올바르게 동작하는지 위함이며 실제 데이터베이스, 네트워크 등의 외부 시스템과의 통합을 테스트한다.🍡 슬라이스 테스트슬라이스 테스트는 특정 레이어(controller, service, repository)에 대한 테스트이다. 애플리케이션의 특정 슬라이스가 올바르게 동작하는지 확인하기 위해 작성된다. 스프링의 특정 컴포넌트만을 로드하여 테스트하므로 상대적으로 빠르게 실행된다.관련된 어노테이..

DBMS에서 트랜잭션을 특별한 제어 없이 병행 수행을 허용한다면 데이터의 일관성과 무결성을 보장하기 어렵다.이때, 병행 수행되는 트랜잭션들을 제어하기 위해서 락을 사용할 수 있으며 DBMS에서 락은 크게 공유 락과 배타 락으로 분류할 수 있다.🧊 공유 락공유 락(shared lock)은 읽기 락(read lock)이라고 부르며, 공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 공유 락을 획득할 수 있지만, 배타 락은 획득할 수 없다. 즉, 공유 락을 사용하면 트랜잭션 내에서 조회한 데이터가 변경되지 않는 것을 보장한다.SELECT * FROM table_name WHERE id = 1 FOR SHARE;🌹 배타 락배타 락(exclusive lock)은 쓰기 락(write lock)이라고 부르며, ..

🥞 동기 vs 비동기동기와 비동기는 호출하는 함수의 작업 완료를 기다리는지 여부의 차이가 있습니다. 함수 A가 동기로 함수 B를 호출하면 A는 B의 작업이 완료될 때까지 기다려야 한다. 따라서 작업이 순차적으로 진행된다.하지만, 함수 A가 비동기로 함수 B를 호출하면 A는 B의 작업 완료를 신경 쓰지 않고 따로 동작한다. 따라서 작업이 순차적으로 진행되지 않는다.블로킹과 동기는 어떤 차이가 있나요? 🤔두 개념은 유사하면서도 다르다. 동기 호출에서는 호출된 함수가 작업을 완료할 때까지 호호출한 함수가 기다린다. 즉, 작업이 순차적으로 진행되는 것을 의미한다. 반면, 블로킹은 함수가 호출된 후, 호출한 함수의 결과를 기다리기 위해 실행을 멈추는 상태를 의미한다. 즉, 제어권이 반환되지 않고 대기하는 상황..

🐻 TCP 3-way handshakeTCP 3-way handshake는 TCP/IP 네트워크에서 안정적이고 연결 지향적인 통신을 설정하기 위해 사용되는 절차이다. 이 절차는 클라이언트와 서버 간에 신뢰할 수 있는 연결을 설정하기 위해 세 개의 메시지(세그먼트)를 교환하는 과정을 포함한다. 우선 클라이언트는 서버에 연결을 요청하는 SYN 세그먼트를 보낸다. 이 세그먼트에는 초기 순서 번호(sequence number)와 윈도우 크기(window size) 정보가 포함되어 있다. 이후 서버는 클라이언트의 요청을 수락하고, SYN과 ACK플래그가 설정된 세그먼트를 클라이언트에 보낸다. 이 세그먼트에는 서버의 초기 순서 번호와 클라이언트의 초기 순서 번호에 대한 응답(ACK = 클라이언트의 초기 순서 번호..

외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능에 악영향을 줄 수 있다. 이를 해결하기 위한 가장 기본적인 방법은 타임아웃을 설정하는 것이다.크게 타임아웃에는 커넥션 타임아웃과 리드 타임아웃, HTTP 커넥션 풀 타임아웃을 설정해 볼 수 있다.다음과 같이 특정 서비스의 장애가 전체 서비스에 영향을 주는 경우는 어떻게 해결할 수 있을까요? 🤔1. A 서비스, B 서비스, C 서비스 연동 코드가 HTTP 커넥션 풀을 공유한다.2. A 서비스의 장애로 응답 시간 지연이 발생하는 경우 2-1. 풀에 남은 커넥션이 점점 줄어든다. 2-2. 풀에서 커넥션을 구하는 대기 시간이 증가한다. 2-3. B, C 서비스에 대한 연..