컴퓨터 공학(36)
-
Go 애플리케이션에서 테스트 커버리지 시각화하기
Context테스트 커버리지는 안정성의 척도인가?어떤 애플리케이션이든 기능이 고도화됨에 따라서 코드가 많아지고, 이 코드가 정상적으로 동작하는지를 테스트하기 위해서 우리는 많은 테스트 코드를 작성합니다. 그리고 우리는 테스트의 커버리지를 척도로 삼아 이 애플리케이션이 얼마나 안정적인가를 따지곤 합니다. 하지만 실제로 테스트 커버리지가 높다고 해서 애플리케이션이 안정적인 것은 아닙니다. 커버리지는 단순히 "작성된 코드 중 테스트가 실제로 실행한 부분"으로, 예외 상황이나 경계 조건까지 테스트를 하지 않으면 수치가 높아도 의미가 없습니다. 그럼에도 불구하고 커버리지가 중요한 이유커버리지는 BMI에 비유한다면 BMI가 건강의 전부는 아니지만, 기초 지표로는 유용한 것처럼, 커버리지도 그런 신호등 역할을 해줍..
03:50:31 -
멱등성 있는 이벤트 발행하기
EDA에 많은 관심을 가지고 있어서 이벤트에 대해 많은 공부를 하게 되었고,그중 멱등성 있는 이벤트 발행하기라는 주제로 글을 작성하려고 합니다. # 이벤트EDA에서 이벤트는 단순한 기록으로 처리되는 것이 아니라 시스템 구성요소 간의 동기/비동기 통신 및 비즈니스 로직 실행의 핵심 메시지로 취급합니다. 일반적인 layered architecture를 생각해 보면,A 엔티티의 변경사항이 발생하고, 이 이벤트를 A와 관련된 엔티티에 전파해야 한다면, A service 이런 패턴은, 응집도를 떨어뜨리고, 결합을 강하게 만들어 좋은 패턴이라고 볼 수는 없죠. @RequiredArgsConstructorpublic class Aservice { private final ARepository aReposit..
2025.03.12 -
(데이터베이스) 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