단위 테스트란 무엇인가
·
Programming/Unit Testing
단위 테스트의 정의 단위 테스트의 가장 중요한 세 가지 속성은 아래와 같다. 1. 작은 코드 조각을 검증하고, 2. 빠르게 수행하고, 3. 격리된 방식으로 처리하는 자동화된 테스트 처음 두 가지 속성은 대체로 논란의 여지가 없지만, 마지막 속성인 '격리 문제'는 단위 테스트의 고전파와 런던파를 구분하는 근원이 된다. 격리 문제에 대한 런던파의 접근 런던파에서는 '테스트의 격리 방식'을 '테스트 대상 시스템을 협력자 ( collaborator )에게서 격리하는 것'으로 규정한다. 즉, 하나의 클래스가 다른 클래스들에 의존하면 모든 의존성을 테스트 대역 ( test double )로 대체해야한다. 이 방법의 이점 중 하나는 테스트가 실패하면 코드베이스의 어느 부분이 고장 났는지 확실히 알 수 있다는 것이다...
커버리지 지표 ( coverage metrix )
·
Programming/Unit Testing
테스트 스위트 품질 측정을 위한 커버리지 지표 커버리지 지표란? 커버리지 지표는 테스트 스위트가 소스 코드를 얼마나 실행하는지를 백분율로 나타낸다. 일반적으로 커버리지 지표의 커버리지 숫자가 높을 수록 더 좋다고 알려져있지만, 사실 이것은 그리 간단하지 않다. 커버리지 지표는 중요한 피드백을 주더라도 테스트 스위트 품질을 효과적으로 측정하는 데 사용될 수 없다. 코드 커버리지가 너무 적을 때 ( 약 10% 미만 )는, 테스트가 충분치 않다는 좋은 증거이지만, 100 % 커버리지라고 해서 반드시 양질의 테스트 스위트를 보장하지는 않는다. 높은 커버리지의 테스트 스위트도 품질이 떨어질 수 있다. 코드 커버리지 지표에 대한 이해 가장 많이 이용되는 커버리지 지표는 "코드 커버리지( code coverage )..
단위 테스트의 목표
·
Programming/Unit Testing
개요 단위 테스트를 배운다는 것은 테스트 프레임 워크나 목 라이브러리 등과 같은 기술적인 부분을 익히는 것에 그치지 않는다. 단위 테스트는 단순히 테스트를 작성하는 것보다 더 큰 범주이다. 테스트에 드는 노력을 가능한 한 줄이고 그에 따르는 이득을 최대화해야 한다. 두 가지를 모두 달성하기란 쉽지 않다. 단위 테스트 현황 지난 20년간 단위 테스트를 적용할 것을 독려하는 분위기가 자리 잡았으며, 대부분의 프로그래머는 단위 테스트를 실천하고 중요성을 알고 있다. 그냥 쓰고 버리는 프로젝트가 아니라면, 단위 테스트는 늘 적용해야 한다. 기업용 애플리케이션 개발 프로젝트는 거의 모두 단위 테스트가 적용되어 있으며, 제품 코드와 테스트 코드의 비율은 1:1에서 1:3 ( 제품 코드 한 줄 : 테스트 코드 세 줄..
Unit Testing (Vladimir Khorikov) 책을 리뷰하기 전
·
Programming/Unit Testing
단위 테스트의 중요성은 개발을 공부한 이후부터 줄곧 들어왔다. 하지만 실무에서 개발을 하다보면 단위 테스트에 대한 여러 가지 질문이 생각난다. - 좋은 단위 테스트가 뭐지? 내가 작성한 것도 좋은 단위 테스트인가? - 테스트하고자 하는 것이 너무나 단순해서 결과가 자명한 경우에도 테스트 코드를 짜는 것이 필요할까? - 모든 함수를 테스트해야하는가? 일부만 테스트해도 된다면, 어디까지 테스트 코드를 짜는 것이 바람직할까? 이러한 질문들의 답을 찾기 위한 과정으로, 블라디미르 코리코프의 Unit Test ( 단위 테스트 | 생산성과 품질을 위한 단위 테스트 원칙과 패턴 )을 읽게 되었다. 이 책의 구성은 크게 다음과 같다. 1. 단위 테스트의 목표를 정의 / 좋은 테스트와 좋지 않은 테스트를 구별하는 방법 ..
AMQP & RabbitMQ
·
Programming/Protocol
1. 개요 RabbitMQ is the most widely deployed open source message broker. - RabbitMQ 공식 홈페이지 RabbitMQ를 구글에 검색하면 가장 상단에 나오는 내용이다. 일반적으로 블로그에서는 RabbitMQ를 간단하게 “AMQP를 구현한 오픈소스 메세지 브로커“ 정도로 정의한다. 위 정의를 보고 RabbitMQ가 무엇인지 단박에 알 수 있는 사람은 이 글을 보고 있지 않을 것이다. AMQP는 무엇이고, 메세지는 무엇이며 브로커는 무엇인지 궁금증이 들기 마련이다. 큐에 대한 기본적인 개념 나아가 AMQP부터 정리하며, 최종적으로 RabbitMQ가 어떤 녀석인지 알아보자. 2. AMQP ( Advanced Message Queue Protocol ) ..
Server Sent Events ( SSE )
·
Programming/Protocol
1. SSE 란? 웹 브라우저와 서버 사이의 단방향 통신을 가능케 하는 프로토콜 기술이다. 서버가 클라이언트로 데이터를 푸시하는데에 사용되며, 실시간 업데이트를 필요로 하는 웹 어플리케이션에 유용하다. 2. SSE의 특징 2-1. 단방향 통신 SSE는 오직 서버에서 클라이언트로만의 데이터 전송을 지원하는 단방향 통신 프로토콜이다. 즉, 클라이언트에서 서버로 요청을 보내지 않아도, 서버는 실시간 업데이트를 클라이언트로 전송할 수 있다. 2-2. 텍스트 기반 SSE는 주로 텍스트 데이터에 최적화되어 있다. ( 대용량 바이너리 파일 처리 등에는 부적합하다 ) 💡 텍스트 데이터란? 텍스트 기반으로 표현될 수 있는 모든 데이터. ( 예시 1 ) JSON 형식 data: {"event": "update", "dat..
Circuit Breaker Pattern
·
Programming
개요 많은 서버들에서는 안정성을 위해 Circuit Breaker 패턴을 취하고 있다. 본 페이지에서는 Circuit Breaker 패턴의 정의와 구현 방식에 대해 정리해본다. Circuit Breaker Pattern 이란? 배경 서비스 개발 도중 외부 의존성은 피해갈 수 없다. 가령, 게시물을 올리는 서비스를 생각해보자. 개발자는 이미지를 버퍼로 받아서 Google Cloud Storage 나 AWS DynamoDB 등에 이미지를 업로드한다. 이 때, 예기치 못하게 Google Cloud Storage 나 AWS DynamoDB에 장애가 생긴다면, 어떻게 될까? 해당 API는 장애를 겪게 되고, 경우에 따라서는 장애가 다른 곳까지 전파될 수도 있다. 물론 적절한 에러 핸들링이 조치에 도움이 될 때도 ..