컴퓨터 공학(34)
-
(데이터베이스) Lost update와 serializable
트랜잭션에는 4가지 격리수준이 있습니다. read uncomittedread comittedrepeatable readserializable 그리고 각각의 트랜잭션은 다음과 같은 문제를 발생할 수 있습니다.dirty readnon-repeatable readphantom read(phantom read는 MVCC덕에 발생하지 않습니다.) 하지만 이와 별개로 serialiable을 제외한 트랜잭션 격리 레벨에서 발생할 수 있는 lost update 문제가 있습니다. Lost updateLost Update는 동시성 제어 문제 중 하나로, 두 개 이상의 트랜잭션이 동시에 같은 데이터를 수정하려고 할 때 발생할 수 있습니다. 이는 하나의 트랜잭션이 수행한 업데이트가 다른 트랜잭션에 의해 덮어쓰여지는 상황을 말..
2024.07.14 -
당신의 Go 코드의 nil 체크가 실패하는 이유(feat. interface)
* 몇 개월 전, 회사에서 문제 해결을 위해서 리팩터링이 있었고, 그 과정에서 에러가 발생했었는데, 그 경험을 공유하고자 이 글을 작성합니다. 저에게 하루 약 120만 건 이상의 요청이 들어오는 서버에 관한 태스크가 주어졌습니다. 서버에 새로운 파이프라인을 추가했고, 이에 대해서 개발환경에서 모든 테스트를 마치고, 실제 운영환경에 배포했습니다. 무사 배포를 기원했지만, 배포하자마자 서버는 죽었다 살아나기를 반복했고, 이 때문에 바로 서버를 롤백했습니다. 저는 매우 의아했습니다. 에러가 발생한 지점의 코드를 저는 고친 것이 없었고, 해당 지점에서 원래 에러가 발생하고 있지 않았기 때문이죠. 그렇게 한 시간 동안 원인을 찾기 위해 로그를 열심히 찾았고, 결국 문제의 원인을 찾아냅니다. 문제 발생의..
2024.05.13 -
(네트워크) gRPC로 가는길(1) / HTTP의 역사(1.0, 1.1, 2.0)
MSA에서 사용하는 기술, gRPC. 컴포넌트 간에 통신을 위해서 사용됩니다. 왜 REST를 사용하지 않고 gRPC를 사용해서 통신할까요? HTTP1.1을 사용하는 HTTP/REST와는 달리 gRPC는 HTTP 2.0을 사용하기 때문에 1.1 대비 빠른 속도를 가지고 있습니다. 그러니까 gRPC를 알기 위해서는 HTTP 2.0에 대해서 알아야 합니다. 2.0을 이해하기 위해서는 HTTP의 역사에 대해서 아는 게 도움이 되겠죠? 그러니 이 문서에서는 HTTP의 역사에 대해 다루겠습니다. ⚡️HTTP 0.9 - One line 프로토콜 HTTP 초기버전에는 버전 번호가 없었습니다. 그러니까 그때 당시에는 HTTP를 사용한다고 말했을 뿐, HTTP0.9를 사용한다고 말하지 않았다는 것입니다. HTTP 0.9가..
2023.02.26 -
(디자인 패턴 복습 시리즈) 어댑터 패턴(Adapter pattern)
이번 시간에 복습할 패턴은 어댑터 패턴입니다. 어댑터 패턴은 싱글톤과 함께 어디선가 많이 들어본 패턴에 속합니다.(뇌피셜) 어댑터 하면 가장 쉽게 떠오르는게 220v를 110v로 변환해주는 어댑터입니다. 일본이나 중국, 영궁을 여행가면 각기 다른 어댑터를 챙겨가는 그런 상황을 생각해보자고요. 우리는 일본에서 충전기를 사용하기 위해 새로운 충전기를 가져가거나, 혹은 앞의 플러그 부분을 갈아끼우지 않습니다. 다만 110v용 어댑터를 챙겨가서 사용하죠. 객체지향에서도 마찬가지입니다. 기존의 시스템과 새로 도입해야하는 시스템이 있습니다. 하지만 기존의 시스템과 새로 도입해야하는 시스템이 상호호환이 잘 되지 않는 부분이 있습니다. 이런상황에서 우리는 기존의 시스템을 새로 작성하지 않고, 어댑터 패턴을 사용해서 기..
2023.02.04 -
(Python) FastAPI MVC(1)
이 문서는 Fastpi-mvc를 번역한 글입니다. Why fastAPI-mvc? fastapi-mvc란? fastapi-mvc는 fastapi 웹 프레임워크의 개발자 생산성 툴입니다. 모든 개발자가 fast-api를 시작할 때 필요한 것을 바탕으로, fast-api 응용프로그램 개발을 더욱 쉽게 하기 위해서 만들어졌습니다. fastapi-mvc는 적은 코드로 더 많은 것을 달성할 수 있습니다. 특정 작업을 시작하는 데 필요한 모든 것을 생성하여 개발을 더욱 쉽게 만들 수 있도록 설계된 "Generator"라는 여러 스크립트가 함께 제공됩니다. fastapi-mvc는 독단적인 소프트웨어입니다. 일을 처리하는 최선의 방법이 있다고 가정하고, 그 방법을 장려하도록 설계되었지만 경우에 따라 대안을 방해하기도 합..
2023.01.20 -
웹 서버 vs 웹 애플리케이션 서버(Web Server vs WAS)
이 문서에서는 웹 서버와 웹 애플리케이션 서버에 대해서 다룹니다. 많이들 혼동하는 것이 웹 서버와 웹 애플리케이션 서버입니다. 무엇이 다를까요? 웹 서버(Web Server) 웹 서버는 하드웨어, 소프트웨어 두 가지 특면에서 바라볼 수 있습니다. 하드웨어 측면에서 웹 서버는 소프트웨어와 웹 사이트의 컴포넌트 파일들을 저장하는 컴퓨터입니다. 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터를 주고 받을 수 있도록 합니다. 소프트웨어 측면에서 웹 서버는 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리합니다. 현대의 통신은 대부분 HTTP에 국한됩니다. 또한 웹 서버를 넓게 보자면 정적 리소스를 제공하고 기타 부가기능을 제공합니다. (정적 리소스는 단순 서빙) 대표적으로 Apache와 Ngi..
2023.01.02