전체 글

· cs 공부
**테스트 주도 개발(Test-Driven Development, TDD)**는 소프트웨어를 개발하는 방법 중 하나로, 개발자가 코드를 작성하기 전에 테스트를 먼저 작성하고, 그 후에 해당 테스트를 통과시키는 코드를 작성하는 접근 방식입니다. TDD는 주기적인 테스트 실행을 통해 안정적이고 견고한 소프트웨어를 개발하는 데 도움을 줍니다. TDD 주기는 일반적으로 "Red-Green-Refactor"라고 알려져 있습니다. Red (빨간 단계): 새로운 기능이나 변경사항을 수용하는 테스트를 작성합니다. 이 시점에서 해당 테스트는 실패해야 합니다. 왜냐하면 아직 구현되지 않은 코드이기 때문입니다. Green (초록 단계): 테스트가 실패한 상태에서, 해당 테스트를 통과시키는 최소한의 코드를 작성합니다. 목표는..
· cs 공부
도메인 주도 설계(Domain-Driven Design, DDD)은 소프트웨어 개발에서 비즈니스 도메인을 중심으로 설계하는 개발 방법론입니다. 핵심은 비즈니스 도메인의 복잡성을 이해하고 이를 모델링하여 소프트웨어를 개발하는 것으로, 도메인 모델을 중심으로 개발하고 비즈니스 요구사항을 명확히 이해하며 해결합니다. Q: DDD에서 '도메인 모델'이란 무엇인가요? A: 도메인 모델은 비즈니스 도메인을 표현하고 해석하기 위한 개념적 모델입니다. 업무 규칙, 개체(Entity), 값 객체(Value Object), 서비스(Service) 등을 포함하며, 소프트웨어에서 도메인을 구현하는 핵심입니다. Q: 도메인 주도 설계 원칙 이란? A. DDD의 원칙 유비쿼터스 언어 (Ubiquitous Language): 모든..
· cs 공부
프레임워크는 개발에 필요한 구조와 규칙을 정의해 제어를 역전시켜 개발자는 프레임워크에 따라 동작하는 코드를 작성합니다. 반면, 라이브러리는 개발자가 필요에 따라 호출하여 사용하며, 제어는 개발자에게 남아 있습니다. 1. 프레임워크 (Framework) 프레임워크는 애플리케이션의 구조를 제어하기 위한 미리 정의된 규칙과 구조를 제공하는 도구 모음입니다. 개발자는 프레임워크가 정의한 규칙을 따라 코드를 작성하고, 프레임워크가 제공하는 기능을 활용하여 개발합니다. 일반적으로 프레임워크는 제어 역전(Inversion of Control)이라는 개념을 사용하여 개발자가 아닌 프레임워크가 애플리케이션의 흐름을 제어합니다. 예시) express, nest , spring , Django 등 2. 라이브러리 (Libr..
· cs 공부
동기와 비동기의 주된 차이는 작업의 진행 방식에 있습니다. 동기는 순차적이고 블록킹되는 방식으로 작업을 처리하며, 비동기는 비블록킹되고 병렬적으로 작업을 처리합니다. 동기는 주로 의존성이 높은 상황에서 사용되고, 비동기는 의존성이 낮거나 병렬 처리가 필요한 상황에서 사용됩니다. 1. 동기 (Synchronous): 동기적인 작업은 순차적으로 진행됩니다. 한 작업이 시작되면 해당 작업이 완료될 때까지 다음 작업이 기다립니다. 작업 간에 의존성이 있고, 순서가 중요한 경우 주로 사용 동기 코드는 간단하고 직관적일 수 있지만, 여러 작업이 순차적으로 실행되므로 전체 시스템의 성능이 저하 2. 비동기 (Asynchronous): 비동기적인 작업은 한 작업이 시작되더라도 다음 작업이 기다리지 않고 계속 진행 작업..
· cs 공부
물리 계층 (Physical Layer): 목적: 하드웨어와 전기적인 신호를 다룸. 예시: 케이블, 허브 데이터 링크 계층 (Data Link Layer): 목적: 프레임 단위로 데이터 전송과 오류 검출 및 수정, 주소 지정 및 흐름 제어 수행. 예시: 이더넷 등 네트워크 계층 (Network Layer): 목적: 패킷의 경로 설정, 라우팅 수행. 예시: IP(Internet Protocol) 등 전송 계층 (Transport Layer): 목적: 데이터 전송 관리, 에러 복구 및 흐름 제어 수행. 예시: TCP(Transmission Control Protocol), UDP(User Datagram Protocol) 등 세션 계층 (Session Layer): 목적: 통신 중의 오류 복구, 데이터 표현..
· cs 공부
객체 지향 프로그래밍(OOP) 은 소프트웨어를 객체 단위로 나누고 이 객체들 간의 상호 작용을 통해 프로그램을 설계하는 프로그래밍 패러다임입니다. OOP의 특징 1. 캡슐화(Encapsulation) 데이터와 메서드를 하나의 단위로 묶어 캡슐화함으로써 객체의 내부 구현을 숨깁니다. 객체는 자체적으로 데이터를 관리하고 외부에서는 접근이 제한 2. 상속(Inheritance) 부모 클래스의 특징을 자식 클래스가 물려받아 재사용할 수 있게 해주는 개념입니다. 코드의 재사용성을 높이고 구조를 단순화 3. 다형성(Polymorphism) 동일한 메서드나 인터페이스를 서로 다른 방식으로 구현할 수 있는 능력을 의미합니다. 이는 코드의 유연성을 향상시키고 객체 간의 교환이 용이 객체지향 프로그래밍의 다섯 가지 원칙(..
· cs 공부
대용량 트래픽을 처리하기 위해서는 여러 전략을 활용합니다. 첫째로, 로드 밸런싱을 도입하여 트래픽을 여러 서버로 분산시킵니다. 둘째로, 캐싱을 활용하여 정적인 자원에 대한 요청을 즉각적으로 응답할 수 있도록 합니다. 셋째로, 비동기 처리를 도입하여 비동기 작업을 병렬로 처리하여 응답 시간을 최소화합니다. 꼬리질문 1.로드 밸런서를 선택할 때 어떤 요소를 고려하나요 답변: 로드 밸런서를 선택할 때는 서비스의 특성에 맞는 로드 밸런서를 선택해야 합니다. L4 로드 밸런서는 TCP/UDP 레벨에서 동작하며, L7 로드 밸런서는 HTTP 레벨에서 동작합니다. 서비스의 요구사항과 트래픽 특성을 고려하여 선택합니다. 2.캐싱이 무엇인가요? 답변: 캐싱은 이전에 얻은 결과를 저장하고 재사용하는 메커니즘입니다. 데이터..
· cs 공부
DI (Dependency Injection): DI는 의존성 주입으로, 소프트웨어 컴포넌트 간의 의존 관계를 외부에서 주입하는 디자인 패턴입니다. 객체가 자신이 필요로 하는 의존 객체를 직접 생성하는 것이 아니라, 외부에서 주입받아 사용하는 방식입니다. 이를 통해 모듈 간의 결합도를 낮추고 유연성을 높일 수 있습니다. IoC (Inversion of Control): IoC는 제어의 역전으로, 프로그램의 흐름 제어가 개발자가 아닌 프레임워크나 컨테이너에게 넘어가는 디자인 원칙입니다. 일반적으로 객체의 생명 주기와 의존성 관리를 프레임워크가 담당하게 됩니다. DI는 IoC의 한 형태로 볼 수 있습니다. 꼬리질문 1. 의존성 주입을 왜 사용하나요? 답변: 1. 의존성 주입을 사용하면 코드의 유연성과 재사용..
늘곰's
늘곰's 개발일지