본문 바로가기

dev37

단일체(singleton) 패턴 디자인 패턴하면 가장 먼저 생각나는 싱글톤 패턴인데, 이는 단 하나의 클래스 인스턴스만을 갖도록 보장하고 전역적인 접근을 갖는다. 보통 싱글톤 패턴은 안티패턴으로 OCP에 위배되는 경우가 발생해서 테스트, 디버깅이 어려워지고 멀티 스레드 환경에서 동기화 처리를 안하면 여러 개가 생성된다고 얘기하며(어지간하면 피하라고..) 유의해서 사용하면 공통으로 객체를 사용되는 데 구현할 수 있다. Logger나 Thread / DB Connection Pool도 싱글톤 으로 구현돼있다. 보통 싱글톤 패턴에 동기화라면 서브클래싱해서 아래와 같이 작성한다. public class Singleton { private static Singleton singleton; public syncronized Singleton ge.. 2020. 5. 26.
tcpdump mtr Connection timed out (Connection timed out) 이 납니다. 지연이 발생해서 사용했던 네트워크 진단 도구에 대해 간단히 알아봅니다. mtr mtr --tcp --port 443 -r -w -c {{destination}}지연이 발생해도 ping이 빠지는 현상이 일어날 수 있다고 합니다. traceroute + ping을 결합해둔 mtr을 사용합니다. 호스트와 destination 구간에 각 경유하는 호스트마다 손실율을 확인할 수 있어 어떤 네트워크 이슈가 있는지 확인이 가능합니다. ICMP를 사용하기에 UDP 패킷이 차단된 곳까지 추적할 수 있습니다. traceroute vs ping vs mtr에 대해 자세히 포스팅된 블로그도 참고하실 수 있습니다. tcpdump tcpd.. 2020. 5. 15.
Cucumber Junit으로만 단위테스트, 통합 테스트로 검증하다, Cucumber를 도입하게 되었는데 접하게 된 BDD의 개념과 어떤 식으로 사용되고 있는 지 풀어본다. BDD(동적 주도 개발)는 TDD의 확장으로 도메인을 알고 있는 사람이라면 쉽게 이해할 수 있다. 비즈니스 관점으로 어떠한 feature를 작성해 개발하는 것으로 아래의 예시를 보면 누구나 쉽게 이해할 수 있는 언어로 작성되어 있다. 여기서는 Cucumber라는 BDD 프레임워크 기준으로 적어본다. Cucumber는 Ghrekin[https://cucumber.io/docs/gherkin/reference/#keywords] 이라는 DSL 를 사용하여 테스트 케이스로 변환하여 검증한다. 시나리오를 작성하기 위한 Ghrekin의 몇 가지 키워드가 있다.. 2020. 5. 11.
모든 API 엔드포인트에 공통 파라미터가 필요하다. 기존에 있던 API 모듈에 특정 파라미터를 거의 모두 추가해줘야 하는 요건이 생겼다. 추가할 파라미터를 String addParameter; 라고 하자. 아래와 같이 두 가지 정도로 방안을 생각해 볼 수 있다. Request DTO Object에 추가 @GetMapping public void get(@RequestBody DtoObject dto) {} public class DtoObject { private String addParameter; private ... } RequestParam을 모두 명시적으로 파라미터를 추가 @GetMapping public void get(@RequestBody DtoObject dto, @RequestParam(required=false) String addPa.. 2020. 4. 30.