이제 나는 매일 회고를 작성하는 것이 아닌 한주의 회고를 작성하기로 결정했다. 주간 어떤 고민과 생각을 작성하는 것보다는, 기술적인 내용을 작성하는 것이 좋겠다고 생각을 했다. 왜냐하면 기술블로그를 목표로 하는 블로그가 점점 개발 일기 중심의 블로그가 되어가고 있었기 때문이다. 그리고 TIL은 다른 사람들에게 도움이 되는 글이 되지 못한다는 생각이 들었다. 하지만 스스로 하는 회고를 그만두고 싶지는 않았다. 회고를 글로 작성하면서, 보다 내 생각을 정리 할 수 있었고, 다른사람은 몰라도 내가 다시보면 재밌었다.(나 왜이런고민한거냐? 바본가.. 하는 그런 재미..) 그래서 나는 생각을 기존의 회고는 WIL 을 통해 정리하고, 주중에는 공부한 내용이 정리가 완료되면 해당 내용을 포스팅하기로 정하였다. 그리하..
파이프-필터 아키텍처(Pipes and Filters Architecture) 파이프-필터 아키텍처는 일련의 파이프를 따라 흐르며 여러 단계의 필터를 통과해 원하는 환경에 도달하는 데이터로 묘사할 수 있다. 파이프 는 필터를 연결하며, 일반적으로 분산 대기열이나 메시지 브로커에 해당한다. 필터는 각 단계에서 데이터를 처리하는 고립된 소프트웨어 컴포넌트 에 해당하며, 수신 데이터에 대해 하나의 작업만을 수행하고, 나머지 파이프라인과 무관하게 동작한다. 데이터 소스: 데이터의 출처를 말한다. 사용자로부터 네트워크 요청을 수신하는 백엔드 서비스가 될 수도 있다. 센서 또는 종단 장치에서 데이터 샘플을 수신하는 서비스형 함수 요소 같은 경량 서비스가 될 수 있다. 데이터 싱크: 모든 처리 단계(필터)를 통과한 ..
데메테르의 법칙, LoD LoD 는 일반적인 설계원칙(SOLID, KISS, DRY) 만큼 잘 알려진 원칙은 아니지만, 이 원칙을 준수할 경우 코드에서 높은 응집도 와 낮은 겹합도 를 달성 해낼 수 있게 된다. 높은 응집도와 낮은 결합도 는 코드의 가독성과 유지 보수성을 효과적으로 향상시키고 기능 변경으로 인한 코드 변경 범위 를 줄일 수 있는 매우 중요한 설계 사상이다. 단일 책임 원칙, 구현이 아닌 인터페이스기반 개발 등 많은 설계 원칙 또한 높은 응집도와 낮은 결합도를 달성하는 것을 목표로 하고 있다. 시스템, 모듈, 클래스, 함수의 설계와 개발 뿐만 아니라 마이크로서비스, 프레임워크, 구성요소 클래스 라이브러리의 설계와 개발에도 적용될 수 있다. 높은 응집도 높은 응집도는 클래스 자체의 설계에 사..
가능한 단순하게 유지하라, Keep It Short and Simple(KISS) KISS 에 대해 알아보기 전에, 다음 질문에 스스로 답을 해보는 것이 좋다. KISS 원칙에서 단순한 이라는 단어가 가지는 의미는 무엇일까? 어떤 종류의 코드를 단순한 코드라고 할 수 있을까? 복잡한 코드는 어떤 코드인가? 간단한 코드를 작성하려면 어떻게 하면 좋을까? YAGNI 원칙은 KISS 원칙과 어떤 점이 다른가? KISS 원칙 정의와 해석 KISS 원칙은 가능한 단순하게 유지하라 는 원칙이며, 많은 상황에 적용될 수 있는 포괄적인 설계 원칙이다. Keep It Simple and Stupid, Keep It Short and Simple, Keep it Simple and Straight forward 등 다양하..
리팩터링, Refactoring 지속적인 리팩토링 은 코드 품질을 향상시키는 효과적인 수단이다. 하지만 리팩토링 을 하는 것은 단순히 문제를 해결하는 것보다 더 많은 능력이 요구된다. 코드를 리팩터링 할 때에는 코드의 나쁜냄새 와 설계결함 에 대한 통찰력을 기반으로 설계원칙, 디자인패턴, 코딩규칙 등을 합리적으로 능숙하게 사용해야한다. 효율적인 리팩터링 을 진행하기 위해서는 왜(Why, 목적) 리팩터링을 해야하는지, 무엇(What, 대상)을 리팩터링 해야하는지, 언제(When, 시기) 리팩터링을 해야하는지, 어떻게(How, 방법) 리팩터링을 해야하는지 을 알아야한다. 리팩터링의 목적 마틴 파울러가 정의한 리팩토링은 다음과 같다. 리팩터링은 코드에 대한 이해를 쉽게 하기 위해 소프트웨어의 내부 구조를 개선..
로드밸런싱, LoadBalancing 로드밸런싱이란, 전송자로부터 오는 각 요청을 시스템 내 한 워커에 디스패칭 하는 기능을 말한다. 이를 활용한다면, 사실상 무한대의 컴퓨터 자원을 활용할 수 있는 클라우드 환경에서 손쉽게 확장성을 가진 애플리케이션을 만들 수 있다. 로드밸런싱을 사용한다면 매일 수십억 개 이상의 요청을 처리할 수 있다. PB 규모의 데이터를 처리할 수 있다. 클라우드 환경에서 비용 효율적인 아키텍처를 구축할 수 있다. 로드밸런싱이 없을 경우 수만 명의 고객이 사용하는 애플리케이션을 단일 클라우드 서버 에서 배포하는 상황일 경우 다음과 같은 문제점이 발생할 수 있다. 수신 트래픽이 단일 서버의 CPU 메모리 혹은 네트워크 용량을 넘어설 경우 애플리케이션이 충돌하거나 성능이 저하될 수 있다..