책
-
데이터 중심 애플리케이션 설계책/데이터 중심 애플리케이션 설계 2023. 2. 12. 20:35
요약 분산시스템에서 일어날 수 있는 문제들 네트워크로 패킷을 보낼땐 패킷은 손실되거나 임의대로 지연될 수 있다는 것을 항상 기억 해야 합니다. 분산 시스템에 올라간 노드는 서로의 시간이 일치하지 않을 수 있습니다. 노드의 응답 시간은 상당기간 동안 반환 되지 않을 수 있습니다. 이 경우, 다른 노드에 의해 죽었다고 판단될 수 해당 노드는 재시작 될 수도 있습니다. 다시 살아났더라도 멈췄다는 사실을 알지 못할 수 있습니다. 부분 실패 가 생길 수 있다는 사실이 분산 시스템의 뚜렷한 특성입니다. 대부분의 시스템은 노드에 장애가 발생했는지 알 수 있는 정확한 메커니즘이 없어서 대부분의 분산 알고리즘은 원격 노드를 아직 쓸 수 있는 지 결정하기 위해 타임아웃을 사용합니다. 단일 노드에서는 오히려 이런 합의 알고..
-
Classicist TDD vs Mockist TDD책/단위 테스트 2022. 7. 25. 22:53
Classicist TDD vs Mockist TDD 테스트를 구성하다 보면 실제 객체를 사용해서 테스트를 구성해야 할 지 아니면 Mock 을 사용해서 구성해야 할 지 고민될 때가 많습니다. 이번 포스팅에서는 실제 객체 사용을 권장하는 Classcist 와 Mock 사용을 권장하는 Mockist를 비교하면서 Test 에 대해 알아보도록 하겠습니다. 시작전 해당 주제를 설명하기 앞서 Test Double 이란 용어를 먼저 설명하겠습니다. Test Double이란 영화에서 스턴트 더블 개념에서 비롯되어서 테스트를 진행하는 것입니다. 실제 객체를 활용하기에 어렵거나 비용이 많이 들 떄 사용하는 가짜 객체를 의미합니다. 테스트 더블에는 각각 Dummy, Fake, Mock, Spy, Stub 이 있습니다. Du..
-
3. 단위 테스트 구조책/단위 테스트 2022. 7. 13. 23:13
3. 1 단위 테스트를 구성하는 방법 3.1.1 AAA 패턴 사용 AAA 패턴이란 (Arrange, Act, Assert)해당 패턴을 사용하면 테스트를 준비, 실행, 검증 3부분으로 나눌 수 있습니다. 코드로 나타내면 다음과 같습니다. import domain.Calculator; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class CalculatorTest { @Test publi..
-
단위 테스트 1장책/단위 테스트 2022. 6. 26. 23:29
1. 단위테스트란? 테스트에 드는 노력을 가능한 줄이고 그에 따르는 이득은 최대가 되어야 한다. 즉, 무난하게 성장하고 유지보수가 많이 필요하지 않고 끊임없이 변화하는 고객의 요구에 신속히 대응할 수 있는 프로젝트이다. 이 책을 통해 어떤 단위테스트 기술이 좋은지를 구별하고 공통적인 안티패턴을 피하는 방법을 배운다. 1.1 단위 테스트 현황 테스트를 작성하는게 현재 소프트웨어 시장에서 당연한 현상이다. 하지만 일부 테스트는 오히려 예외를 잘 확인하지 못할 뿐더러 유지보수하는데 오래걸리는 효과만 얻는다. 이 책을 통해 좋은 테스트를 구성하는 법을 배우게 된다. 1.2 단위 테스트 목표 단위 테스트 활동이 더 나은 설계로 이어진다. 비즈니스 코드에 단위 테스트를 작성하면 일반적으로 더 나은 설계로 이어지기 ..
-
스프링 부트와 AWS 로 구현하는 웹서비스 3장책/스프링부트와 AWS로 혼자 구현하는 웹서비스 2022. 5. 1. 23:43
JPA 라는 자바 표준 ORM 기술을 사용하면 객체지향 프로그래밍을 할 수 있습니다. MyBatis, iBatis 는 ORM 이 안닌 SQL Mapper 입니다. ORM 은 객체를 맵핑하는 것이고 SQL MAPPLER 는 쿼리를 매핑합니다. 3.1 JPA 소개 현대 웹 어플리케이션에서 RDB(Relational Database, 관계형 데이터베이스) 는 필수적인 요소가 되었습니다. 관계형 데이터베이스는 SQL 만 인식할 수 있기 때문에 SQL 은 필수적입니다. 하지만 객체지향 프로그래밍과 순수 SQL 이 만나면 패러다임 불일치 가 일어납니다. RDB는 어떻게 데이터를 저장할지에 초점이 맞춰진 기술입니다. 객체지향 프로그래밍은 메시지를 기반으로 기능과 속성을 한곳에서 관리 하는 기술 입니다. 아래 코드를 ..
-
Clean Code 3장책/클린코드 2022. 4. 24. 23:06
package chap3; import chap3.etc.PageCrawlerImpl; import chap3.etc.PageData; import chap3.etc.SuiteResponder; import chap3.etc.WikiPage; import chap3.etc.WikiPagePath; public class HtmlUtil { public static String testableHtml(PageData pageData, boolean includeSuiteSetup) throws Exception { WikiPage wikiPage = pageData.getWikiPage(); StringBuffer buffer = new StringBuffer(); if (pageData.has..
-
Spring Boot와 AWS 로 혼자 구현하는 웹서비스 1, 2 장책/스프링부트와 AWS로 혼자 구현하는 웹서비스 2022. 4. 22. 23:45
이동욱님이 쓰신 "스프링부트와 AWS로 혼자 구현하는 웹 서비스" 를 현재(SpringBoot 2.6.7) 버전에 맞게 일부 변형했습니다. 전반적인 내용은 동일합니다. 1장 intellij 의 간단한 세팅 및 github 와 intellij 를 연결한 부분이 나옵니다. 이 부분은 다른 블로그 글도 있으니 참고하셔도 될 거 같습니다. 2장 테스트 코드는 현재 웹 서비스에서 매우 중요한 요소입니다. 테스트 코드에서 꼭 짚고 넘어가야 하는것은 TDD와 단위테스트(unit test)입니다. 2.1 테스트 코드 소개 TDD 테스트가 주도하는 개발(Test-Driven-Development, 혹은 Test-First-Development) 을 의미합니다. 항상 실패하는 테스트를 먼저 작성하고(RED) 테스트가 통과..