전체 글 161

[ 아키텍처 ] 파이프-필터 아키텍처

파이프-필터 아키텍처(Pipes and Filters Architecture) 파이프-필터 아키텍처는 일련의 파이프를 따라 흐르며 여러 단계의 필터를 통과해 원하는 환경에 도달하는 데이터로 묘사할 수 있다. 파이프 는 필터를 연결하며, 일반적으로 분산 대기열이나 메시지 브로커에 해당한다. 필터는 각 단계에서 데이터를 처리하는 고립된 소프트웨어 컴포넌트 에 해당하며, 수신 데이터에 대해 하나의 작업만을 수행하고, 나머지 파이프라인과 무관하게 동작한다. 데이터 소스: 데이터의 출처를 말한다. 사용자로부터 네트워크 요청을 수신하는 백엔드 서비스가 될 수도 있다. 센서 또는 종단 장치에서 데이터 샘플을 수신하는 서비스형 함수 요소 같은 경량 서비스가 될 수 있다. 데이터 싱크: 모든 처리 단계(필터)를 통과한 ..

[ 개인공부 ] 코드 설계 원칙, 데메테르의 법칙, LoD

데메테르의 법칙, LoD LoD 는 일반적인 설계원칙(SOLID, KISS, DRY) 만큼 잘 알려진 원칙은 아니지만, 이 원칙을 준수할 경우 코드에서 높은 응집도 와 낮은 겹합도 를 달성 해낼 수 있게 된다. 높은 응집도와 낮은 결합도 는 코드의 가독성과 유지 보수성을 효과적으로 향상시키고 기능 변경으로 인한 코드 변경 범위 를 줄일 수 있는 매우 중요한 설계 사상이다. 단일 책임 원칙, 구현이 아닌 인터페이스기반 개발 등 많은 설계 원칙 또한 높은 응집도와 낮은 결합도를 달성하는 것을 목표로 하고 있다. 시스템, 모듈, 클래스, 함수의 설계와 개발 뿐만 아니라 마이크로서비스, 프레임워크, 구성요소 클래스 라이브러리의 설계와 개발에도 적용될 수 있다. 높은 응집도 높은 응집도는 클래스 자체의 설계에 사..

개인공부 2023.11.02

[ 개인공부 ] 코드설계원칙, KISS 원칙에 관하여

가능한 단순하게 유지하라, 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 등 다양하..

개인공부 2023.11.01

[ 개인 공부 ] 리팩터링(Refactoring)에 관하여

리팩터링, Refactoring 지속적인 리팩토링 은 코드 품질을 향상시키는 효과적인 수단이다. 하지만 리팩토링 을 하는 것은 단순히 문제를 해결하는 것보다 더 많은 능력이 요구된다. 코드를 리팩터링 할 때에는 코드의 나쁜냄새 와 설계결함 에 대한 통찰력을 기반으로 설계원칙, 디자인패턴, 코딩규칙 등을 합리적으로 능숙하게 사용해야한다. 효율적인 리팩터링 을 진행하기 위해서는 왜(Why, 목적) 리팩터링을 해야하는지, 무엇(What, 대상)을 리팩터링 해야하는지, 언제(When, 시기) 리팩터링을 해야하는지, 어떻게(How, 방법) 리팩터링을 해야하는지 을 알아야한다. 리팩터링의 목적 마틴 파울러가 정의한 리팩토링은 다음과 같다. 리팩터링은 코드에 대한 이해를 쉽게 하기 위해 소프트웨어의 내부 구조를 개선..

개인공부 2023.10.30

[ 아키텍처 ] 로드밸런싱 패턴

로드밸런싱, LoadBalancing 로드밸런싱이란, 전송자로부터 오는 각 요청을 시스템 내 한 워커에 디스패칭 하는 기능을 말한다. 이를 활용한다면, 사실상 무한대의 컴퓨터 자원을 활용할 수 있는 클라우드 환경에서 손쉽게 확장성을 가진 애플리케이션을 만들 수 있다. 로드밸런싱을 사용한다면 매일 수십억 개 이상의 요청을 처리할 수 있다. PB 규모의 데이터를 처리할 수 있다. 클라우드 환경에서 비용 효율적인 아키텍처를 구축할 수 있다. 로드밸런싱이 없을 경우 수만 명의 고객이 사용하는 애플리케이션을 단일 클라우드 서버 에서 배포하는 상황일 경우 다음과 같은 문제점이 발생할 수 있다. 수신 트래픽이 단일 서버의 CPU 메모리 혹은 네트워크 용량을 넘어설 경우 애플리케이션이 충돌하거나 성능이 저하될 수 있다..

[ Trouble-Shooting ] 컨테이너 간 통신에서 발생한 Failed to send HTTP request to endpoint

문제 정의 컨테이너 환경을 구축하고 테스트를 하는 과정에서 에러가 발생했다. Kafka 이벤트를 발행하는 API 테스트 간, Kafka 이벤트 발행 시, schema-registry 통신간 Connection refused 에러가 발생했다. 사실 수집 shoes-ordering-app1 | 2023-10-26 06:20:26.284 INFO 1 --- [nio-8181-exec-1] o.a.k.clients.producer.KafkaProducer : [Producer clientId=producer-1] Instantiated an idempotent producer. shoes-ordering-app1 | 2023-10-26 06:20:26.313 INFO 1 --- [nio-8181-exec-1] ..

[ TIL ] 탈락과 하소연, 친구와 개발

요즘 하루는 독서, 취업공고 확인 및 지원, 프로젝트 개선 으로 계속 돌아간다. 매일같이 새로운 내용을 공부하고, 새로 지원하고.. 프로젝트문제를 개선하고... 정신은 없고 시간은 많이 흘러간다. 그런데 요즘 나는 많이 지친 것 같다. 공부와 개발은 재밌는데, 서류에서 떨어지는 내 모습들에 자신감도, 자존감도 많이 떨어지는 것 같다. 내 이력서가 문제가 있는 것 같은데, 어떻게 수정하면 좋을지 모르겠다.. 어떻게 블로그도, 깃허브도 오지 않은 채 탈락이 되는 지 모르겠다. 이력서 자체만의 이력으로는 믿을 수 없다는걸까? 생각이 많아진다. 어떻게 해야 잘 전달이 될까? 그래서 오늘은 친구의 회사에 놀러가서 밥도 같이 먹고, 같이 공부도했다. 정말 얼마만에 주중에 나가본지 모르겠다. 어느덧 세상은 추워졌고,..

회고/TIL 2023.10.26

[ 개인공부 ] DRY 원칙

중복 코드를 작성하지 말라, Don't Repeat Yourself(DRY) DRY(Don't Repeat Yourself) 원칙은 흔히 중복 코드를 작성하지 말라 는 의미로 사용된다. 하지만 DRY 원칙에서 말하는 중복은 프로젝트에 여러개의 중복된 코드가 DRY 원칙에 위배한다 말하는 것은 아니다. 코드 자체는 DRY 원칙의 위배 대상에 포함되지 않는다. 개발에서 이야기 할 수있는 중복 코드 논리의 중복 기능적(의미론적) 중복 코드 실행의 중복 코드 논리의 중복 public void authenticate(String username, String password) { if (!isValidUserName(username)) { // InvalidUsernameException 발생 } if (!isV..

개인공부 2023.10.25

[ 개인 공부 ] 코드의 디커플링에 관하여

코드의 디커플링 소프트웨어 설계와 개발 과정에서 코드의 복잡성은 가독성과 유지보수성 과 연관이 있기 때문에 우리는 코드의 복잡성을 제어해야한다. 그리고 코드의 복잡성을 제어하는 가장 효과적인 방법은 디커플링이다. 디커플링을 통해 응집도가 높고 결합도가 낮은 코드를 만들 수 있다. 높은 응집도와 낮은 결합도 높은 응집도와 낮은 결합도는 클래스 간의 세분화된 관계 설계를 이끌어 낼 뿐만아니라 세분화된 시스템, 아키텍처, 모듈의 설계를 이끌어내는 일반적인 사상이다. 코딩 규칙에 비하여 더 높은 수준에서 코드의 가독성과 유지보수성을 향상 시킬 수 있다. 높은 응집도 와 낮은 결합도 의 특성을 활용한다면, 다른 모듈이나 클래스 코드에 대해 너무 많이 이해할 필요 없이 모듈이나 클래스에 집중할 수 있다. 의존성 이..

[ 개인 공부 ]단위테스트에 관하여

단위 테스트, UnitTest 대부분의 개발자는 지속적인 리팩터링 의 필요성을 인지하고 있으나, 다른 사람이 만든 코드를 리팩터링 하다 발생하는 문제 에 대한 고민 때문에 능동적으로 리팩터링 하는 경우는 많지 않다. 이러한 문제(고민)을 해결 할 수 있는 방법은 크게 다음과 같다. 설계 원칙과 디자인 패턴에 익숙할 뿐만아니라 비즈니스와 코드에 대한 이해도를 높인다. 단위 테스트 를 작성(혹은 분석)한다. 단위 테스트는 코드의 정확성을 테스트하기 위해 작성한(된)다. 테스트 대상은 클래스 또는 함수로 제한되며, 테스트 대상이 예쌍대로 실행되는지 테스트한다. 예상되거나 예상치 못한 상황에서 코드가 올바르게 실행될 수 있도록 가능한 모든 정상 및 비정상 상황을 포괄하는 테스트 케이스를 생각하고 설계해야한다. ..

개인공부 2023.10.23