개요클라이언트와 서버 간 통신 과정에서, 어떠한 이유로든 둘 중 하나가 제 기능을 할 수 없게 되는 일이 종종 발생한다. 그러나 한 쪽의 무응답으로 인해 다른 한 쪽이 영영 응답을 대기할 수는 없는 노릇이다.이러한 난감한 상황을 해결하기 위해 존재하는 설정이 바로 타임아웃(Timeout)이다. 이 타임아웃 값을 잘 설정하면 클라이언트와 서버가 불필요하게 시간과 리소스를 낭비하는 것을 상당히 개선할 수 있다.오늘은 웹 서비스를 제공하기 위한 TCP/HTTP 통신 과정에서 주로 발생하는 타임아웃에는 어떤 것들이 있는지 알아보고, 이들을 어떻게 잘 다룰 수 있는지를 클라이언트와 서버 각각의 시점으로 확인해보는 시간을 가지고자 한다.오늘 알아볼 타임아웃의 주제는 아래와 같다.Connection TimeoutRe..
사이트에 연결할 수 없음 (DNS_PROBE_FINISIHED_NXDOMAIN)최근에 하나의 애플리케이션 서버를 구축하고 배포한 뒤 당당하게 도메인으로 접속했는데 아래 화면을 만난 적이 있다. 해당 화면은 잘못된 사이트에 접속하면 쉽게 만나볼 수 있는 화면이다.그렇다면 이 화면이 보여지는 이유는 뭘까? 하단의 오류명이 DNS로 시작하는 것을 보아하니, DNS와 관련이 있어 보인다.그래서 우선은, 브라우저의 URL 입력창에 접근하고자 하는 URL을 입력했을 때 무슨 일이 일어나는지를 먼저 되짚어봤다.브라우저는 먼저 URL을 분석하여 URL로부터 도메인을 추출한다.(https://admin.devpanpan.com → admin.devpanpan.com)도메인으로부터 IP 주소를 얻어내기 위해 DNS 서버에..
이 글은 최범균 님의 유튜브 “프로그래밍 초식 : DB 트랜잭션 조금 이해하기 02 격리”를 시청하고 작성되었습니다. 같은 데이터에 동시 접근? 동시성은 초심자가 놓치기 쉬운 문제를 발생시킴 ex) 당직 담당자를 최소 1명은 유지해야 한다. 2명의 담당자 A, B가 존재한다. A가 담당자 수를 SELECT ⇒ 결과: 2 B가 담당자 수를 SELECT ⇒ 결과: 2 A는 자신이 빠져도 최소 1명을 만족하므로 자신을 당직에서 제거하도록 UPDATE B가 자신이 빠져도 최소 1명을 만족하므로 자신을 당직에서 제거하도록 UPDATE 결과적으로 남은 당직자는 0명. 최소 1명을 유지해야 한다는 비즈니스 로직 위반 왜? A와 B가 동시에 같은 데이터(당직자 수)에 접근했기 때문 따라서 트랜잭션을 격리하여 이러한 동..
트랜잭션 (Transaction) 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위 트랜잭션이 필요한 이유 SELECT → UPDATE → INSERT 순으로 동작하는 비즈니스 로직이 있다고 가정하자. 만약 UPDATE를 성공적으로 수행한 후 INSERT를 수행하는 과정에서 오류가 발생해 성공적으로 INSERT가 수행되지 않았다면, 이는 로직을 작성한 개발자가 의도한대로 처리된 것이 아니라고 봐야 한다. 따라서 개발자는 어떻게든 수행된 UPDATE를 되돌려야 하고, 이는 복잡한 추가 작업을 요구한다. 트랜잭션을 도입하면 INSERT까지 모든 쿼리가 정상적으로 수행된 경우에만 변경 사항을 반영하고(Commit), 중간에 예외 등에 의해 일부 쿼리가 정상적으로 수행되지 못한 경우에는 수행된 쿼리의 ..
클라이언트에서도 데이터베이스에서 길이 제한 오류가 나지 않도록 문자열 길이에 제한을 둘 필요가 있다. 보통 한글과 같은 문자는 1 Byte가 아닌 2 또는 3 Bytes로 이루어진다. (주로 사용하는 UTF-8은 한글을 3 Bytes로 표현한다.) 따라서, VARCHAR가 Byte를 기준으로 한다면 VARCHAR의 길이 제한은 어떤 것을 입력하는지, 어떤 인코딩 방식을 사용하는지에 따라 달라질 것이다. 이를 모르고 사용하면 추후에 이슈가 생길 수도 있고, 데이터베이스 마이그레이션 시 문제가 발생할 여지도 있을 것 같아 주로 사용하는 DBMS 종류별로 정리해보았다. ✔ VARCHAR의 기준 - MySQL 버전 4.1 이전까지는 Bytes를 사용했다가 4.1부터는 Character를 사용한다고 한다. 즉, ..
IP 주소는 A부터 E까지 총 5개의 클래스로 구성된다. 다섯 가지 클래스는 다음과 같이 구성된다. 위 그림을 통해 알 수 있는 한 가지 사실은 IP를 나타내기 위해 사용되는 비트의 수가 다르다는 것이다. IP를 나타내기 위한 비트를 제외한 비트는 모두 호스트를 할당하는 비트로 사용된다. 즉, 클래스별로 할당 가능한 호스트의 수가 다르며, A클래스가 가장 많고 C 클래스로 갈수록 줄어든다. 일반적으로 클래스 A는 대규모 네트워크에, 클래스 B는 중간 규모의 네트워크에, 클래스 C는 소규모 네트워크에 사용된다. D와 E는 멀티캐스트, 연구 등에 사용되기 위한 클래스이지만 잘 사용되지 않는다고 한다. 또한, IP는 사설 IP와 공인 IP로 나뉜다. 사설 IP는 특정 네트워크 내에서 사용하는 상대적인 주소라면..