헥사고날 아키텍처를 확장성이 좋고 결합도가 낮아 MSA 아키텍처를 구성하는데 있어서 적합한 아키텍처라고 할 수 있습니다! 헥사고날 아키텍처는 Ports and Adapter 패턴이라고도 하며 Layered Architecture의 문제를 보완하기 위해 생겨난 아키텍처 입니다. Layered Architecture의 문제 경직성 계층형 아키텍처는 코드 변경이 일어났을때 다른 계층으로 쉽게 전파될 수 있습니다. 예를 들어 데이터베이스 스키마가 바뀌었을때 비즈니스 로직, 데이터 엑세스 계층 등 다른 계층까지 전파될 수 있어 유지보수를 어렵게 만듭니다. 높은 결합도 계층형 아키텍처에서는 상위 계층이 하위 계층에 강하게 의존하게 됩니다. 이로 인해 변경이 어려워지고, 테스트를 어렵게 합니다. Presentatio..
Apache Kafka Apache Kafka는 분산 이벤트 스트리밍 플래솜으로 많은 양의 데이터를 실시간으로 처리하고, 저장하고, 분석할 수 있도록 설계되었습니다. Kafka는 LinkedIn에서 개발되어 2011년에 오픈 소스로 공개되었고, 이후로 많은 기업이 데이터 파이프라인을 구축하는데 널리 사용되었습니다. 데이터 파이프라인이란..? 데이터를 한 위치에서 다른 위치로 이동시키는 과정을 의미한다. 이 과정은 데이터 수집, 변환, 로딩하는 일련의 단계를 포함할 수 있으며 이러한 단계는 종종 ETL( Extract, Transform, Load)라는 용어로 부릅니다. Kafka의 주요 기능 Subscribe/Publish 메시징 모델 프로듀서는 메시지를 생성하여 토픽에 발행(Publish)하고 컨슈머는..
데이터 쿼리 패턴 MSA 소프트웨어 아키텍처를 설계하면서 생긴 "데이터 쿼리"의 어려움을 해결하기 위한 패턴 API Aggregation 패턴 필요한 데이터를 얻어오기 위해서, 분리된 서비스들 각각에 각 도메인에 대한 데이터를 요청 후 필요에 맞게 Aggregation(조합) 한다. CQRS 패턴 Command(Write, Update, Delete) 작업과, Query(Read) 작업의 Endpoint를 분리하고 Command 에서 발생된 데이터의 변경을 이벤트 발행을 통해 원하는 포맷대로 Query를 위한 전용 데이터 구조를 만들어 이곳에서 복잡한 Query를 담당합니다. 가시성 (Visibility, Observability) MSA 소프트웨어 아키텍처를 설계하면서 생긴 로깅, 모니터링의 어려움(..
글을 보시기 전에 질문에 대답해보시고 글을 읽어보시는걸 추천합니다! TCP, UDP TCP와 UDP는 OSI 7 계층 중에서 전송 계층에서 사용되는 프로토콜 입니다. 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층이고 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당합니다. TCP(Transmission Control Protocol) - 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜 입니다. - TCP는 데이터의 전달을 보장합니다. 즉 패킷이 손실되거나 순서가 바뀐다면 TCP는 이를 해결합니다. 따라서 TCP는 오류 없는 데이터 전송을 보장합니다. - 이와 같은 특성으로 TCP는 웹 브라우징, 이메일 전송, 파일 다운로드와 같이 신뢰성이 필요한 에..
면접 단골 문제라고 합니다. 면접관 입장에서는 한 질문으로 많은 답변을 들을 수 있기 때문에 대부분의 면접자리에서 나오는 문제입니다. OSI 7 계층과 연관지어 설명하라는 질문도 나온다고 합니다. URL 파싱과 HTTP Request Message 작성 ✏️ 사용자가 웹 브라우저에 URL을 입력하면, 브라우저는 그 URL을 파싱하고 그 정보를 바탕으로 HTTP Request Message를 생성합니다. HTTP Request Message DNS Lookup 👀 서버에 요청을 보내기 위해 브라우저는 https://www.google.com 이라는 도메인 이름은 IP 주소로 변환해야 합니다. 이를 위해 브라우저는 DNS Lookup 을 하게 됩니다. 이 과정에서 브라우저 -> hosts 파일 -> DNS ..
자가진단 해보기 전환에 대한 필요성, 그리고 가능 여부 판단 해보기 필요성 측면에서의 자가진단 개발, 배포 시 다른 팀의 소스 혹은 공통 모듈 등으로 인한 일정 조율/커뮤니케이션이 방해될 정도인가요? 느려지는 개발, 배포 과정으로 인해 필요한 비즈니스 개발이 지연된 적이 있나요? (Business Capabilities) 단 건의 배포로 인한 전체적인 영향도 파악이 어렵고, 실제로 이로 인해 놓친 부분으로 인해 장애가 빈번하게 발생하나요? 공통적으로 사용하는 모듈 수정 시, 영향도 파악과 커뮤니케이션에 대한 부담이 압박으로 다가오나요? 주요 서비스로 인한 빈번한 DB부하로 인해, 타 서비스에서 영향을 받은 적이 빈번한가요? 가능 여부 측면에 대한 자가진단 엔지니어링 조직에서 MSA 구조와 각 서비스의 통..
모놀리식 아키텍처와 SOA( Service Oriented Architecture ) - 처음 소프트웨어 아키텍처의 시작은 모놀리식 이다. - 그리고 여기서 오는 고통들과 제한적인 환경에서나마 해결하고자 했던 노력에서 나온 아키텍처가 SOA이다. MSA가 나오기 전의 아키텍처.. 모놀리식 - 하나의 어플리케이션이 하나의 서버에 배포 - 단일 코드베이스 - 싱글/멀티 모듈 방식으로 개발은 가능하지만, 근본적으로 하나의 프로세스 SOA - "서비스" 단위로 개발하고, 서비스 간 규격화된 프로토콜(인터페이스)를 사용하여 통신 - 대개 동일한 기술 스택들을 가지고 서비스들을 개발하며, 각 서비스들간이 재사용이 목적 - ESB(Enterprise Service Bus) 라는 개념을 통해, 요청에 대해 어떤 서비스..
모놀리스 아키텍처 ( Monolithic Architecture ) - 모든 종류의 서비스가 하나의 어플리케이션으로 구성되어 있는 아키텍처를 의미한다. 특징 - 하나의 주요 프로세스로 구성 - 모든 서비스가 하나의 DB endpoint를 사용 - 단 한줄만 코드 수정이 되더라도, 모든 어플리케이션의 재배포가 필요 - 싱글 혹은 멀티 모듈로 구성할 수 는 있지만 CI의 단위가 달라질 뿐, CD(배포) 의 범위는 여전히 전체이다. 모놀리스 아키텍처가 일반적이었던 이유 Easy 개발하고 빌드하고 나온 결과를 서버에서 실행시키기만 하면 됐기에 쉽다! No time, No Human Resource 고려할것이 그리 많지 않고 서버 리소스의 효율적인 활용이 가능하다 IDC, Server/DB is very Expe..
프로젝트 시작 대덕소프트웨어마이스터고등학교에 입학하고, 전공동아리를 들어가 1학년 신입생들과 함께 프로젝트를 진행하도록 하였다. 최대한 학교와 관련해서 프로젝트를 진행하려고 노력했는데, 우리 학교 급식실에 있는 급식 건의가 생각났다. 그래서 우리는 급식 건의를 좀 더 쉽게 할 수 있도록 하는 앱을 개발하고자 하였지만 더 나아가 음식을 주제로 급식 리뷰, 급식 건의, 배달파티, 급식 조회 등 기능을 생각해 내었고 프로젝트를 시작하게 됐다. 개요는 나의 전공인 백엔드를 기준으로 작성할거다 - 프로젝트 명칭 : 먹젠 - 개발인원 : 5명 ( BE 2, Flutter 1, IOS 1, Design 1 ) - 개발기간 : 4월 11일 ~ 진행중 - 주요기능 - 사용자 - Spring Security, Jwt, 사..