분류 전체보기

    Why DDD, Clean Architecture and Hexagonal ?

    어느 순간부터 소프트웨어 개발 세계에서는 도메인 주도 설계, 클린 아키텍처라는 용어가 사용 되기 시작했습니다. 이것들은 도대체 어떤 것이며, 왜 등장하게 됐을까요? 도메인 주도 설계(Domain-Driven Design) 💡 소프트웨어의 본질은 해당 소프트웨어의 사용자를 위해 도메인에 관련된 문제를 해결하는 능력에 있다 DDD와 객체지향 도메인 주도 설계를 보다 잘 이해하고 적용하기 위해선 객체지향에 대한 이해가 필요합니다. 객체지향의 본질과 핵심은 뭘까요? 저는 객체 그 자체라고 생각합니다. 객체지향이라는 것은 결국 각 객체간 역할을 명확히 가져가고, 각 객체간에 메시지를 주고 받는 형태의 프로그래밍 방법론이라 생각하기 때문인데요. 그렇다면 객체지향 프로그래밍에서 사용되는 이 객체들은 어떻게 추려낼 수..

    [토비의 스프링 3.1] 2장 테스트

    테스트란 무엇인가? 애플리케이션이 복잡해질 수록 변경을 어떻게 대응할지 전략을 짜는게 매우 중요해집니다. 이전 챕터에서는 변경에 조금 더 쉽게 대응할 수 있도록하는 객체지향 설계의 중요성과 그 방법에 대해 다루었는데요. 이번 챕터에서는 테스트 기술에 대해서 다루려고 합니다. 테스트는 왜 필요할까요? 만들어진 코드에 확신을 가질 수 있게 해줍니다. 변화에 유연하게 대처할 수 있는 자신감을 갖게 해줍니다. 테스트가 잘 구성되어 있다면 기존 코드에 변경이 발생하더라도 기존 기능이 여전히 잘 동작하는지 쉽게 검증할 수 있습니다. 그럼 테스트는 어떻게 해야 좋을까요? 테스트 설계 내 계좌에서 다른 사람에게 돈을 보내는 송금 서비스가 있다고 생각 해보겠습니다. 실제로는 이것보다 훨씬 복잡한 아키텍처를 가지겠지만 간..

    [토비의 스프링 3.1] 1장 오브젝트와 의존관계

    Reflection, Default Constructor Reflection을 이용해 오브젝트를 생성하기 때문에 Default Constructor가 필요하다고 이야기 함. 코드가 어떤식으로 작성되기 때문에 그런걸까? val someClass = SomeClass::class.java val constructors = someClass.getDeclaredConstructor() constructors.isAccessible = true val instance = constructors.newInstance() Class에 대한 Reference 획득 → 해당 Class의 생성자 획득 → 생성자를 사용할 수 있게끔 접근 지정자 public 으로 변경 → 생성자를 이용해 인스턴스 생성 이와 같이 Defau..

    Facebook을 다운 시킨 원인, BGP hijacking이 무엇인가?

    개요 2021년 10월, 페이스북(현 Meta)의 서비스(FaceBook, Instagram, WhatsApp, Oculus, ...) 전반을 이용할 수 없는 장애가 발생 했었습니다. 해당 장애는 긴급 복구되는데 5시간, 완벽하게 복구되는데 12시간이 걸렸을 정도로 이례적으로 오래걸렸는데요. 이런 경우 일반적으로 서버 장애, 서버 다운이라고 표현하지만 정확히 말하자면 이는 서버 다운은 아니었습니다. 네트워크의 문제였죠. 그리고 이렇게 복구에 오래 걸리는 네트워크 관련 문제는 대부분 "DNS"에 의해 발생합니다. 실제로 페이스북, 인스타그램 접속 제한의 문제도 DNS였구요. 구체적으로 공개되기 전 까지는 BGP hijacking을 비롯한 BGP 관련 문제가 아닐까 단순히 '추정'하고 있었는데, 그 추정이 ..

    [AWS CloudWatch] CloudWatch Agent를 별도로 설치하는 이유

    AWS CloudWatch를 사용할 경우 CloudWatch Agent를 별개로 설치하게 된다. 그런데 Agent를 설치하지 않아도 CloudWatch를 사용할 수 있는데, 왜 설치하는걸까? 차이점 AWS CloudWatch는 기본적으로 CPU Utilization 같이 호스트에서 감지할 수 있는 Metric을 측정할 수 있다. 다만, OS에서 관리하는 Metric에 대해서는 측정할 수 없다. 당연하다. 메모리와 디스크를 할당하는 주체는 최초 가용량을 할당해준 호스트가 아니라 OS이기 때문이다. 그래서 메모리 사용량, 디스크 사용량, CPU 사용량, 네트워크 인바운드/아웃바운드 크기 등 OS 내부에서 이루어지는 Metric을 측정하기 위해선 CloudWatch Agent 설치가 필수적이다. Agent를 ..