본문 바로가기
반응형

전체 글122

404 인가 500 인가 - 내 잘못인지 서버 잘못인지 가르는 첫 숫자 상태 코드의 첫 자리 하나가 디버깅 방향을 반대로 돌립니다. 4xx면 보낸 요청을, 5xx면 서버 로그를 봐야 하고, 본문이 비어도 성공일 수 있습니다 — 작은 서버를 띄워 직접 받아 확인했습니다.API 를 붙이다 에러가 나면 어디부터 봐야 할까요. 요청을 고쳐야 할지, 서버 담당자에게 물어야 할지, 아니면 애초에 연결이 안 된 건지 — 그 판단이 상태 코드 첫 자리 하나에 들어 있습니다. 127.0.0.1 에 경로마다 원하는 코드를 돌려주는 작은 서버를 띄우고, 200·204·301·302·400·401·403·404·500 을 직접 왕복시켜 봤습니다. 4xx 와 5xx 일 때 서버 쪽 로그에 무엇이 다르게 남는지, 401 과 403 이 실제로 무엇이 다른지, 본문이 비었는데도 성공인 경우가 왜 둘이나.. 2026. 10. 9.
[java/spring] DB 커넥션 풀 고갈 - 트랜잭션이 길면 풀이 잠긴다 커넥션은 트랜잭션이 끝나야 돌아온다. 트랜잭션 안에서 외부 API 를 기다리면 그 시간만큼 풀이 잠기고, 남은 요청은 대기 한계를 채운 뒤 예외로 끊긴다.평소엔 멀쩡하던 서비스가 특정 시간대에만 응답이 몰려 죽습니다. DB 부하는 낮고 CPU 도 여유가 있는데 요청은 계속 실패합니다. 예외 메시지는 Connection is not available, request timed out입니다. 느린 것은 DB 가 아니라 커넥션을 기다리는 쪽입니다. 커넥션은 트랜잭션이 끝나야 돌아온다@Transactional 메서드가 트랜잭션을 여는 순간 HikariCP 커넥션 풀에서 커넥션이 하나 나갑니다. 스프링 부트 기본 설정에서는 메서드 안에서 DB 를 한 번도 건드리지 않아도 마찬가지입니다. 그리고 그 커넥션은 트랜잭.. 2026. 10. 9.
HTTP/1.1·2·3 - 멀티플렉싱과 QUIC로 병목 지우기 HTTP는 1.1의 순차 처리(HOL blocking)에서 2의 멀티플렉싱, 3의 QUIC(UDP)로 진화하며 병목을 하나씩 없앴다. 각 세대의 개선점과 TCP HOL의 잔존까지. 웹은 HTTP 위에서 도는데, 그 HTTP도 세대를 거치며 "한 번에 얼마나·어떻게 나르느냐"를 개선해 왔습니다. 1.1에서 2, 3으로 오며 병목이 하나씩 사라졌습니다. HTTP/1.1 — 연결당 하나씩HTTP/1.1은 한 TCP 연결에서 요청을 순차 처리합니다. 앞 요청의 응답이 끝나야 다음이 나가는 구조라, 하나가 느리면 뒤가 다 막힙니다(HOL, head-of-line blocking). 브라우저는 이를 우회하려고 도메인당 연결을 여러 개 엽니다. keep-alive로 연결을 재사용하고, 헤더는 매 요청 평문으로 반복됩.. 2026. 10. 9.
[.net] 예외 처리 - throw 와 throw ex 는 다른 코드다 throw ex 는 스택트레이스를 잘라 진짜 발생 지점을 지운다. 예외는 비싸므로 실패가 정상인 자리에는 TryParse 계열을 쓴다. 예외를 잡아서 다시 던질 때 throw ex; 라고 썼는데, 로그를 보니 어디서 났는지가 안 나옵니다. 예외 처리를 어디까지 감싸야 하는지도 기준이 없고, catch (Exception) 으로 다 잡으면 편한 것 같은데 그러지 말라는 말도 봤습니다. throw ex 가 지우는 것예외를 잡아 로그를 남기고 다시 올려보내는 코드는 흔합니다. 이때 throw ex; 라고 쓰면 예외를 그 자리에서 새로 던지는 것이 됩니다. 스택트레이스가 여기서부터 다시 쌓입니다.실행해 비교해 보면 그대로 드러납니다. throw ex 쪽은 스택이 2줄이고 첫 줄이 at Program.Rethr.. 2026. 10. 9.
[AI] AI 에이전트 초보 팁 - 「했다」와 「됐다」 사이를 확인하는 다섯 가지 습관 AI 에이전트 초보 팁 다섯 가지. 에이전트가 설정·차단·되돌리기·저장·예약을 «했다»고 할 때 실제로 됐는지 어디서 확인하는지, Claude Code·Antigravity 기준으로 정리했습니다. 얼마 전 에이전트에게 옵시디언 vault 두 개가 합쳐졌는지 확인을 맡겼습니다. 에이전트는 결과에 「노트를 쌓던 자동 생성기는 멈춘 상태로 보인다」는 보고를 덧붙였고, 근거는 crontab 과 LaunchAgent, 그리고 vault 한 곳의 수정 시각이었습니다. 실제로는 터미널 하나에 떠 있던 Antigravity 세션 안에서 6시간마다 4편씩, 그때까지 약 100편을 쓰고 있었습니다. 에이전트가 들여다본 vault 는 그 작업이 쓰던 곳이 아니었습니다. 에이전트의 「했다」는 보고이고, 「됐다」는 따로 확인할.. 2026. 9. 28.
반응형