Open SuyeonChoi opened 10 months ago
보통은 권위있는 시니어가 하라는대로...
평균 응답속도을 보고 타임아웃을 설정하면 이후에는 그 이상 걸린 시간이 측정이 안된다 SLO 응답시간 응답 성공률와 관련이 있을 것 같다
타임아웃 설정했는데 정상 처리가 됐지만 타임아웃으로 성공 응답을 못받을 경우 문제가 생길 수 있지 않을까 애플리케이션에서 중복 요청 방지 로직을 단다
MySQL에서 INSERT
작업을 성공적으로 수행했지만 클라이언트가 성공 여부를 전달 받지 못하는 상황은 네트워크 지연, 타임아웃, 또는 서버와 클라이언트 사이의 연결 문제 등 다양한 이유로 발생할 수 있습니다. 이런 문제를 극복하려면 여러 방법을 사용할 수 있습니다:
트랜잭션 관리:
INSERT
작업을 트랜잭션으로 묶어 수행하고, 작업이 성공적으로 완료된 후에만 트랜잭션을 커밋(commit)하세요. 만약 오류가 발생하면 트랜잭션을 롤백(rollback)하여 데이터 일관성을 유지하세요.응답 확인:
INSERT
작업의 성공 여부를 확인하기 위해 별도의 확인 요청을 전송할 수 있습니다. 이를 위해 클라이언트는 SELECT
문을 사용하여 새로 삽입된 레코드를 조회할 수 있습니다.중복 검사:
UNIQUE
제약 조건을 사용하여 중복 레코드를 방지하고, INSERT IGNORE
또는 INSERT ... ON DUPLICATE KEY UPDATE
문을 사용하여 중복 키를 처리하세요.로깅과 모니터링:
INSERT
작업의 성공 여부를 추적하고, 오류와 예외를 기록하세요.재시도 메커니즘:
INSERT
작업의 성공 여부를 받지 못할 경우 재시도 메커니즘을 구현하여 작업을 다시 시도할 수 있습니다. 그러나 이 방법은 중복 삽입과 같은 다른 문제를 유발할 수 있으므로 주의가 필요합니다.비동기 처리:
INSERT
작업을 처리하고 클라이언트에 결과를 나중에 전달할 수 있습니다.이러한 방법들은 서로 조합되어 사용될 수 있으며, 구체적인 문제와 요구 사항에 따라 적절한 해결책을 선택해야 합니다.
MySQL에서 자동 생성(auto generated) 키, 특히 AUTO_INCREMENT 키를 사용할 때, 이 키는 주로 기본 키(primary key)로 사용되며, 각 새로운 레코드에 대해 유니크한 값을 자동으로 생성합니다. 이 경우, 중복 레코드를 방지하고 클라이언트에게 성공 여부를 전달하는 몇 가지 방법이 있습니다:
LAST_INSERT_ID 함수 사용:
LAST_INSERT_ID()
함수는 최근에 생성된 AUTO_INCREMENT 값을 반환합니다. 이를 통해 클라이언트는 삽입 작업이 성공적으로 이루어졌는지 확인하고, 새로 생성된 레코드의 ID를 가져올 수 있습니다.트랜잭션 사용:
INSERT
작업을 수행한 후에 트랜잭션을 커밋합니다. 오류가 발생하면 롤백하여 데이터의 일관성을 유지하세요. 이 방법은 INSERT
작업의 성공 여부를 클라이언트에게 정확하게 전달하도록 도와줍니다.응답 확인과 로깅:
INSERT
작업의 성공 여부를 확인할 수 있습니다. 또한, 서버와 클라이언트 모두에서 로깅을 사용하여 작업의 성공, 실패 및 오류를 기록하고 모니터링할 수 있습니다.에러 핸들링:
비동기 처리:
INSERT
작업을 처리하고, 작업이 완료되면 클라이언트에 결과를 전달할 수 있습니다.유니크한 비즈니스 로직 기반의 키 생성:
INSERT
작업의 성공 여부를 확인하는 데 도움이 될 수 있습니다.이러한 방법들은 개별적으로 또는 함께 사용하여, 클라이언트가 INSERT
작업의 성공 여부를 더 잘 이해하고 처리할 수 있게 도와줍니다.
본인의 서비스에서 외부 노드를 호출할 때 설정하는 timeout 기준은 어떻게 판단하셨나요? 캐테(tn-web-catchtable)은 ExternalApiHttpTemplate에서 픽업 및 웨이팅 서버 호출 시 5초로 걸어줬던데 어떤 기준으로 설정했는지 아시는분..?