본문 바로가기

spring boot8

넌 못지나간다! Test가 실패했으면 배포도 되면 안되지! 프로젝트를 진행하고 수많은 테스트 코드가 쌓여 프로덕션 코드가 완성되게 됩니다. 그러나 어디까지 테스트는 개발자가 직접 거쳐줘야 하는 단계이고 자동화 되지 않은 절차는 쉽게 잊혀질 수 있고, 여러 이유를 대며 건너 띌 수 도 있습니다. 이를 방지하기 위해 여러가지 제약조건을 걸어두면 습관처럼 만들 수 있을 것입니다. 실패하는 테스트가 있다면, 배포 실패 Github에서 제공해주는 Github Action을 이용해 CI/CD를 구축할 수 있습니다. action에 대한 설정은 yml로 되어있고 아래 예시는 main 브랜치에 push가 일어났을 때, spring-tdd 디렉토리에서 gradlew build를 수행합니다. gradle build에는 test가 호출되기 때문에 실패하는 테스트 케이스가 있다면 Wo.. 2021. 5. 6.
뭐? MSA? 메시징 시스템은 Kafka겠죠? - 06 서비스가 서비스를 호출하는 서버-클라이언트간의 네트워크 통신은 결합도가 높은 방식으로 시스템간의 의존성이 높아져 코드가 유연하지 못합니다. 그렇기 때문에 서비스간의 결합도가 낮아야 하는 MSA에서는 데이터 송수신을 비동기로 처리하는 Message Queue를 사용하는게 효율적이고, 대표적인 메시지 브로커로 Apache에서 만든 Kafka가 있습니다. Kafka Apache에서 만든 메시지 큐 시스템으로, 대용량의 데이터를 실시간으로 처리하는데 특화되어 있습니다. 메시지를 파일 시스템으로 저장하여 메시지가 유실될 우려가 적으며, Consumer가 Broker에 Pulling 방식으로 메시지를 가져오기 때문에 Consumer가 처리할 수 있는 메시지만 가져올 수 있습니다. Kafka에 대한 기본적인 개념과 .. 2021. 4. 23.
뭐? MSA? 그렇다면 서버를 찾아보자! Service Discovery. - 05 Service Discovery 지금까지 MSA를 위해 API Gateway, Circuit Breaker, Load Balancer 를 만들었었습니다. 하지만 아쉬운점이 있습니다. 그건 바로 서버의 네트워크 정보를 직접 입력해줘야 하는 것입니다. Zuul을 사용한 Gateway를 구현할 때도 application.yml에 url 정보 Hystrix을 적용하면서 사용한 RestTemplate이나 FeignClient에 사용된 url 정보 Ribbon의 서버 목록 정보 MSA환경에서 서비스는 동적으로 확장,축소되지만 이를 개발자가 서버 정보를 수정 하기는 매우 힘든 일입니다. 따라서 이러한 서버들의 정보를 동적으로 관리할 필요가 있습니다. Service Discovery는 서비스의 네트워크 정보를 Serv.. 2021. 4. 21.
내 코인이 떡락이라고??! Slack으로 알림 경보를 받아보자! 최근에 생각 없이 산 도지 코인이 엄청난 폭등을 하는 경험을 겪고나니, 코알못 (코인 잘 모른다는 뜻~)인 저도 코인에 관심을 갖게 되었습니다. 하지만 급락과 급등하는 살얼음판 핀 코인 시장에서 저같이 지식이 부족한 사람이 발 붙이기 쉽지 않은거 같아요. 그래서 어떻게 하면 이 미쳐버린 불지옥에 발 한자국 들일 수 있을까 생각해봤습니다. 바로 Slack을 이용한 알림 경보 시스템!! Slack 슬랙은 일반 메신저의 기능뿐만 아니라 슬랙에서 제공하는 Webhook을 이용한 메시지 전송이 가능하고, Slack에서 제공하는 Block Kit 을 사용해 개발자가 원하는 형태로 메시지 레이아웃 작성이 가능합니다. Slack에서 제공하는 API를 사용해 메시지를 보내는 방법은 제 개발 메모장 블로그에 작성해두었습니.. 2021. 4. 20.
뭐? MSA? 그렇다면 고가용성을 보장해보자! Load Balancer. - 04 Load Balancer MSA는 요즘과 같이 클라우드 환경에서 동작하기에 매우 적합한 아키텍처라고 생각합니다. AWS와 같은 클라우드 서버를 제공하는 서비스에서도 트래픽이 늘어날 경우 오토 스케일링이라는 작업을 해줍니다. 이처럼 MSA는 서비스의 고가용성을 위해 동일한 서비스를 여러대를 두는 Scale-out을 쉽게 할 수 있습니다. 그렇다면 여러개의 서비스 중 과연 어떤 서비스에 Request를 해야 할까요? API Gateway에서는 특정 url 경로에 맞는 서비스로 라우팅되었습니다. 그러면 동일한 서비스에서는 어떻게 각각 라우팅을 할 수 있을까요? Netflix에서 제공하는 Ribbon을 사용하면 서버 목록을 번갈아가면서 호출 할 수 있습니다. Ribbon Ribbon is a Inter Proc.. 2021. 4. 19.
뭐? MSA? 그렇다면 장애 전파를 막아보자! Circuit Breaker. - 03 Circuit Breaker MSA는 서비스에 장애가 발생할 경우 이 서비스에 종속된 다른 서비스까지 장애가 전파될 수 있습니다. Circuit Breaker는 회로차단기라는 의미로 MSA에서는 이 Circuit Breaker패턴을 사용해 위와같은 문제를 해결하였습니다. Circuit Breaker는 A라는 서비스에 장애가 발생하면 이 서비스를 호출하는 B 서비스가 A 서비스를 호출할 때 즉각적으로 호출을 끊어 스레드를 점유하지 않도록 해줍니다. Netflix는 Circuit Breaker 또한 오픈소스로 Hystrix라는 자바 라이브러리를 제공해주고 있습니다. Hystrix Hystrix is a latency and fault tolerance library designed to isolate poi.. 2021. 4. 16.