Development
-
서비스를 개발하며 외부 API를 호출하는 경우가 많이 존재한다.외부 API를 호출할 때 발생하는 timeout 내역들을 정리해 놓고, 다음에 이슈가 발생했을 때 쉽게 기억을 떠올리기 위해서 정리해 두자.Connection Timeout 클라이언트가 서버와 통신을 요청하기 전에 서로 Connection을 맺는 과정을 TCP 통신에서 3 way handshake이라 한다.이 과정에서 일정 시간이 지나 connection을 맺지 못하는 경우에 발생할 수 있는 Timeout이다.Caused by: java.net.SocketTimeoutException: Connect timed out Socket Timeout ~= Read Timeout클라이언트와 서버가 Connection을 맺은 이후에 발생할 수 있다. ..
[Timeout] Timeout 종류 정리(connection, socket, read..)서비스를 개발하며 외부 API를 호출하는 경우가 많이 존재한다.외부 API를 호출할 때 발생하는 timeout 내역들을 정리해 놓고, 다음에 이슈가 발생했을 때 쉽게 기억을 떠올리기 위해서 정리해 두자.Connection Timeout 클라이언트가 서버와 통신을 요청하기 전에 서로 Connection을 맺는 과정을 TCP 통신에서 3 way handshake이라 한다.이 과정에서 일정 시간이 지나 connection을 맺지 못하는 경우에 발생할 수 있는 Timeout이다.Caused by: java.net.SocketTimeoutException: Connect timed out Socket Timeout ~= Read Timeout클라이언트와 서버가 Connection을 맺은 이후에 발생할 수 있다. ..
2024.12.31 -
4개의 용어, 개념이 헷갈리는데 Spring의 WebClient를 쓰기 위해서 개념을 공부하다 보니 정리해두고 싶어졌다.찾아본 내역들을 다음에 봐도 바로 떠오를 수 있도록 해보자. 우선 blocking, non-blocking이 좀 더 직관적으로 이해하기 쉬웠다. blocking/non-blocking제어권의 반환을 기준으로 생각하자 blocking - 진행하던 작업에서 다른 작업을 호출하면 제어권이 넘어가 버린다.제어권이 돌아올 때까지 기다려야 한다. non-blocking - 진행하던 작업에서 다른 작업을 호출해도 제어권을 넘기지는 않는다.계속 내가 진행하던 작업을 진행할 수 있다. sync/async작업 완료 여부에 관심, 결괏값의 전달 개념을 이해하는데 도움이 되는지는 모르겠지만,단어 자체만의..
sync/async, blocking/non-blocking4개의 용어, 개념이 헷갈리는데 Spring의 WebClient를 쓰기 위해서 개념을 공부하다 보니 정리해두고 싶어졌다.찾아본 내역들을 다음에 봐도 바로 떠오를 수 있도록 해보자. 우선 blocking, non-blocking이 좀 더 직관적으로 이해하기 쉬웠다. blocking/non-blocking제어권의 반환을 기준으로 생각하자 blocking - 진행하던 작업에서 다른 작업을 호출하면 제어권이 넘어가 버린다.제어권이 돌아올 때까지 기다려야 한다. non-blocking - 진행하던 작업에서 다른 작업을 호출해도 제어권을 넘기지는 않는다.계속 내가 진행하던 작업을 진행할 수 있다. sync/async작업 완료 여부에 관심, 결괏값의 전달 개념을 이해하는데 도움이 되는지는 모르겠지만,단어 자체만의..
2024.12.28 -
데이터의 일관성 유지 - 동시에 여러 사용자가 데이터를 수정하려고 할 때 발생할 수 있는 충돌을 방지 낙관적 락(Optimistic Lock)(비선점 락)이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법DB의 락 기능을 사용하는 것이 아닌, 애플리케이션 계층에서 제공하는 락트랜잭션을 커밋하기 전까지는 충돌유무를 알 수 없다장점-성능이 좋고, 데드락 발생 가능성이 낮다단점-충돌이 발생한 경우 이를 해결하기 위한 추가 작업 필요(재시도, 롤백..) 비관적 락(Pessimistic Lock)(선점 락)이름 그대로 트랜잭션의 충돌이 발생한다고 가정하고 우선 락을 걸고 보는 방법DB의 락 기능을 사용 - 대표적으로 select for update 구문장점-데이터의 일관성을 유지하기..
[Lock] 낙관적 락 & 비관적 락데이터의 일관성 유지 - 동시에 여러 사용자가 데이터를 수정하려고 할 때 발생할 수 있는 충돌을 방지 낙관적 락(Optimistic Lock)(비선점 락)이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법DB의 락 기능을 사용하는 것이 아닌, 애플리케이션 계층에서 제공하는 락트랜잭션을 커밋하기 전까지는 충돌유무를 알 수 없다장점-성능이 좋고, 데드락 발생 가능성이 낮다단점-충돌이 발생한 경우 이를 해결하기 위한 추가 작업 필요(재시도, 롤백..) 비관적 락(Pessimistic Lock)(선점 락)이름 그대로 트랜잭션의 충돌이 발생한다고 가정하고 우선 락을 걸고 보는 방법DB의 락 기능을 사용 - 대표적으로 select for update 구문장점-데이터의 일관성을 유지하기..
2024.12.18 -
jacoco자바 코드커버리지를 측정할 때 사용하는 오픈소스 라이브러리 java code coverage의 약자로 ja co co 코드커버리지테스트의 수행 결과를 수치로 나타내는 방법 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는가를 수치로 확인하는 것 즉, 테스트 코드가 적절하게 작성이 되었는지를 측정하는 방식 중에 하나이다. gradle 설정 plugins { id 'jacoco'}jacoco {// toolVersion = '0.8.12'// 테스트결과 리포트를 저장할 경로 변경// reportsDir = ${project.reporting.baseDir}/jacoco // default location }위와 같이 설정하면, gradle에서 jacoco를 사용할 준비가 된 것이다..
[DevOps] jacoco 코드 커버리지jacoco자바 코드커버리지를 측정할 때 사용하는 오픈소스 라이브러리 java code coverage의 약자로 ja co co 코드커버리지테스트의 수행 결과를 수치로 나타내는 방법 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는가를 수치로 확인하는 것 즉, 테스트 코드가 적절하게 작성이 되었는지를 측정하는 방식 중에 하나이다. gradle 설정 plugins { id 'jacoco'}jacoco {// toolVersion = '0.8.12'// 테스트결과 리포트를 저장할 경로 변경// reportsDir = ${project.reporting.baseDir}/jacoco // default location }위와 같이 설정하면, gradle에서 jacoco를 사용할 준비가 된 것이다..
2024.12.10