본문 바로가기

전체 글37

BitBucket Deployment 파이프라인을 만들어보자 최근에 들어서야 프라이빗 레파지토리를 팀 단위로 생성할 수 있지만 이전엔 아니었다. 그래서 많은 형상 관리 툴 중에 Bitbucket을 고려하지 않았나 싶다. 실제로 3명으로 구성된 아주 자그마한 팀일 때 bitbucket을 고려하여 소스를 관리하였다. Github도 지금은 CI/CD를 파이프라인으로 구현할 수 있지만 bitbucket은 좀 이전에 해당 파이프라인을 가지고 있었다. Bitbucket으로 개발한 프로젝트 중에 MySQL DB 도커 이미지를 관리하는 레파지토리가 있다. (거의 로컬, 테스트 환경에서 사용하는 스키마 관리 정도..) 해당 레파지토리에 올린 후에 ECS 로 이미지를 빌드해서 업로드하는 플로우가 필요했는데, bitbucket에서 아주 간단하게 해당 파이프라인을 제공한다. 물론 AW.. 2020. 6. 9.
멀티모듈에 한 방으로 적용되는 application.yml 멀티모듈에서 공통된 하나의 application property를 적용했던 과정을 포스팅합니다. 현재 운영하고 있는 애플리케이션은 아래와 같이 멀티 프로젝트로 구성돼있습니다. 모든 모듈은 core 를 의존하고 있기 때문에 core에 특정 도메인(A Domain)의 프로퍼티를 동일하게 가지고 있어야 합니다. 처음엔 모듈이 몇 개 되지 않아 모든 모듈의 프로퍼티에 작성해주었는데요. A Domain 에 추가되는 값들을 모든 모듈에서 관리하기란 쉽지 않았습니다. 다중 프로퍼티를 한 번만 기술하기 위해 두 가지 방법을 찾게 되었습니다. spring.profiles.include 위와 같이 환경에 따라 하나의 파일로 정의해줍니다. 그리고 모듈마다 spring.profiles.include: core 로 명시해주면 .. 2020. 6. 8.
단일체(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.