본문 바로가기

개발

아파치 카프카(Apache Kafka) 실시간 데이터 스트리밍을 처리하고 관리하는 분산형 데이터 스트리밍 플랫폼주요 개념토픽(Topic):데이터가 저장되는 논리적 채널데이터를 카테고리별로 분류, 각 토픽은 여러 파티션으로 나뉨파티션(Partition):각 파티션은 데이터를 저장파티션 내부에서 각 메시지는 offset(고유 번호)으로 구분병렬 처리 가능프로듀서(Producer):데이터를 카프카 토픽에 보내는 클라이언트특정 토픽에 데이터를 게시(publish)컨슈머(Consumer):카프카 토픽에서 데이터를 읽는 클라이언트특정 토픽을 구독(subscribe)브로커(Broker):카프카 클러스터를 구성하는 서버각 브로커는 토픽의 파티션을 저장하고, 데이터의 생산과 소비를 관리클러스터(Cluster):여러 브로커로 구성된 카프카의 인프라고가용성과 확.. 더보기
CI/CD 소프트웨어 개발에서 코드 변경 사항을 자동으로 테스트, 빌드, 배포하는 프로세스지속적 통합(Continuous Integration, CI):코드 변경 사항을 빈번하게 병합하는 것을 용이하게 하는 개발자용 자동화 프로세스자동으로 애플리케이션을 빌드자동화된 테스트(일반적으로 단위 테스트와 통합 테스트)를 실행테스트 완료된 코드만이 레포지토리에 올라가므로 코드 퀄리티 유지 가능지속적 배포(Continuous Deployment/Delivery, CD):검증된 코드를 자동으로 프로덕션 환경에 배포지속적 배포(Continuous Deployment)자동으로 프로덕션 환경에 배포까지 완료되는 것을 의미지속적 제공(Continuous Delivery)코드 변경 사항이 언제든지 배포 가능한 상태로 유지주요 CI/CD.. 더보기
쿠버네티스(Kubernetes, k8s) 오픈 소스 컨테이너 오케스트레이션 플랫폼컨테이너화된 애플리케이션의 배포, 확장 및 운영을 자동화주요 개념클러스터(Cluster):컨테이너화된 애플리케이션을 실행하는 노드의 집합컨트롤 플레인 및 하나 이상의 노드를 포함노드(Node):클러스터 내의 단일 머신(가상 또는 물리적)마스터 노드는 클러스터를 관리하고 작업자 노드는 애플리케이션을 실행파드(Pod):쿠버네티스에서 배포 가능한 가장 작은 단위로, 하나 이상의 컨테이너 그룹같은 네트워크 네임스페이스를 공유, 동일한 호스트에서 실행됩니다.포드는 노드에서 실행하도록 예약되고 오케스트레이션됨컨트롤러 플레인(Controller Plane):클러스터에 관한 전반적인 결정(스케줄링, 이벤트)을 수행kubelet컨트롤러 플레인과 통신하는 매우 작은 애플리케이션클러스.. 더보기
도커(Docker) 컨테이너화 기술을 사용하여 애플리케이션과 그 종속성을 컨테이너에 패키징하는 오픈소스 가상화 플랫폼다양한 환경에서 애플리케이션이 일관되게 실행되도록 보장주요 개념Image:컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿운영 체제, 애플리케이션 코드, 런타임, 라이브러리, 환경 변수를 포함Dockerfile에 작성된 명령어 기반으로 구축Container:이미지가 실제로 메모리에 로드되어 실행되는 상태각 컨테이너는 서로 및 호스트 시스템으로부터 격리(독립된 파일 시스템, 네트워킹, 및 독립된 프로세스 공간)Docker Demon:도커 플랫폼의 백그라운드에서 실행되는 프로세스Docker Api 요청수신이미지,컨테이너, 네트워크, 볼륨와 같은 도커 객체 및 도커 서비스 관리Docker Client:도커 호스트와.. 더보기
소스 코드 관리 전략(모노레포 vs 멀티레포) 모노레포모든 프로젝트 코드를 하나의 저장소에 저장하는 전략장점:코드 재사용이 용이하며, 의존성 관리가 단순화거대한 코드베이스에서의 버전 관리 및 리팩토링이 용이모든 프로젝트가 동일한 도구 및 스크립트를 공유단점:대규모 팀에서는 빌드 시간과 저장소 크기가 문제가 될 수 있음보안 문제나 권한 관리가 복잡해질 수 있음멀티레포각 프로젝트 또는 서비스가 자체 저장소를 가지는 전략장점:각 팀이 자신의 리포지토리를 독립적으로 관리 가능권한 부여와 보안 관리가 간편빌드 및 배포 프로세스가 더 빠르고 가벼움단점:코드 재사용이 어려울 수 있으며, 동일한 코드나 라이브러리를 여러 리포지토리에 중복해서 관리해야 할 수 있음의존성과 버전 관리가 복잡해질 수 있음 더보기
아키텍처(모놀리식 vs. MSA) 모놀리식 아키텍처(Monolithic Architecture)하나의 애플리케이션이 모든 기능을 포함하여 운영장점:개발 초기에는 구축과 테스팅이 간단디버깅과 테스트가 상대적으로 용이하며, 배포 프로세스가 단순단점:애플리케이션의 규모가 커질수록 복잡도와 관리 어려움이 증가확장성의 제한(전체 애플리케이션을 스케일해야 하기 때문에 비효율적일 수 있음)기술 스택의 유연성 제한마이크로서비스 아키텍처 (MSA)애플리케이션을 작은, 독립적인 서비스로 분할하여 각 서비스가 하나의 기능을 담당장점:서비스 별로 독립적인 확장 및 개발이 가능다양한 기술 스택을 사용할 수 있으며, 각 팀이 최적의 기술을 선택 가능장애 격리가 용이하여 하나의 컴포넌트에 문제가 생겨도 전체 시스템에 영향을 미치지 않음단점:서비스 간 통신에 대한 .. 더보기
프로그래밍 패러다임 절차지향 프로그래밍 (Procedural Programming)프로그램을 일련의 절차나 루틴의 순차적인 실행으로 보는 방식이 패러다임은 명령을 실행하고 데이터를 저장하는데 초점을 맞춤객체지향 프로그래밍 (Object-Oriented Programming, OOP)데이터와 이 데이터를 처리하는 메소드를 하나의 단위, 즉 객체로 캡슐화특징 4가지추상화: 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것캡슐화: 데이터와 함수를 객체 내부에 포함시켜 외부로부터 숨김상속: 하나의 클래스가 다른 클래스의 속성과 행동을 상속다형성: 같은 인터페이스나 메소드 호출이 서로 다른 동작을 할 수 있게 함오버로딩(Overloading): 같은 이름의 함수를 매개변수를 다르게 하여 기능을 재정의.. 더보기
TDD 코드를 작성하기 전에 테스트를 먼저 작성하고, 이 테스트가 통과되도록 코드를 개발하는 방법TDD의 기본 사이클테스트 작성: 실패하는 테스트 케이스를 먼저 작성, 추가하고자 하는 새 기능이나 수정할 버그를 명확하게 표현코드 작성: 테스트를 통과하기 위한 최소한의 코드를 작성, 효율성보다는 테스트 통과에 집중리팩토링: 코드를 개선하고 최적화, 이 과정에서 코드의 가독성을 높이고 유지보수를 용이하게 만듦프론트엔드 개발에서의 TDD 적용1. 유닛 테스트 (Unit Test)작은 단위의 코드, 함수나 컴포넌트 하나하나를 독립적으로 테스트각 유닛이 예상대로 동작하는지, 예외 처리가 적절한지, 반환 값이 정확한지 등을 검사Jest, RTL 등 사용2. 통합 테스트 (Integration Test)다양한 모듈이나 컴포.. 더보기