마이크로서비스 아키텍처(Microservices Architecture)개념애플리케이션을 여러 개의 작은 독립적인 서비스로 분리하여 개발하는 방법론 각 서비스는 특정 기능이나 비즈니스 도메인을 담당, 독립적으로 배포되고 운영됨서로 다른 기술 스택을 사용할 수 있음API를 통해 통신함특징독립적인 배포 및 개발 작은 단위의 서비스다양한 기술 스택 사용 가능자율적인 팀복잡한 관리 필요확장성 : 특정 서비스에만 확장을 적용할 수 있어 자원 활용이 효율적임 모놀리식 아키텍처(Monolithic Architecture)개념하나의 거대한 애플리케이션으로 모든 기능을 통합하여 개발하는 방법론모든 기능이 하나의 코드 베이스에서 실행됨하나의 배포 단위로 운영전통적인 애플리케이션 개발 방식으로 많이 사용함특징단일 코드베이..
CS
HTTP & HTTPSQ. HTTP/2를 설명하고 장점 두가지를 설명해주세요.Q. HTTP와 HTTPS의 차이점은 무엇인가요?TCP vs UDPQ. TCP와 UDP의 차이를 설명해주세요.Q. TCP의 Flow Control 방법에 대해 알려주세요. TCP HandShakeQ. 3-way handshake 과정에 대해 설명해주세요A. 3-way handshake는 TCP를 통한 데이터 전송 과정에서 신뢰성 있는 연결을 수립하는 절차입니다.1. 먼저, 클라이언트가 서버에게 연결을 요청하며 클라이언트의 SYN(시작 시퀀스 번호)를 보냅니다.2. 서버가 클라이언트의 연결 요청을 받고 클라이언트에 SYN-ACK(서버의 시작 시퀀스 번호 - 클라이언트 시작 시퀀스 번호 + 1) 패킷을 보내 요청..
메모리Q. 통상적인 메모리 구조 내의 4가지 구성에 대해 간단하게 설명해주세요A. 메모리는 code, data, heap, stack 영역으로 구성되어 있습니다. code 영역에는 코드 내부의 함수나 명령문 혹은 상수가 저장됩니다. data 영역에는 프로그램의 전역변수나 정적변수가 저장됩니다. heap 영역에는 사용자가 동적으로 생성하는 변수가 저장됩니다. 마지막으로 stack 영역에는 함수를 실행할 때 생성되는 매개변수나 지역변수가 저장됩니다. Q. BSS와 Data의 영역을 나누는 이유에 대해 간단하게 설명해주세요.A. Data 영역은 초기화 된 변수와 초기화 되지 않은 변수를 저장하는 BSS 로 나뉘어집니다. BSS 영역이 존재하는 이유는 초기화된 변수와 초기화 되지 않은 변수를 구분해 관..
1. 객체 지향 프로그래밍(OOP) 주어진 문제영역을 실세계 안에 존재하는 객체의 집합으로 보고, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들어 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 2. 객체 지향 설계 객체와 클래스 : 객체는 독립적으로 존재하는 실세계의 사물, 클래스는 유사한 객체들의 모임으로 각 객체는 특정 속성의 모임에 의해 기술됨. 객체를 묶는 작업을 분류화라고 함 캡슐화 : 정보 은닉을 통한 추상화, 독립성 향상을 얻을 수 있는 방법, 속성과 오퍼레이션을 함께 묶어 보호함. 모듈의 기능적 독립성은 단위 모듈의 처리 완전성을 높이고 타 모듈과의 처리 종속성을 최소화할 때 극대화됨 상속 : 클래스의 정의를 단순화, 기존에 정의되어 있는 클래스를 이용하여..

1. 애자일 방법론 소프트웨어 개발 및 프로젝트 관리에서 사용되는 접근 방식 중 하나로, 반복적이고 협업 중심의 개발 방법론. 작업 계획을 짧은 단위로 세우고 시제품을 만들어 나가는 사이클을 반복함으로써 고객의 요구 변화에 유연하고도 신속하게 대응하는 방법론이다. 계획 및 분석 : 고객과 사용자가 원하는 바를 파악하여 타당성을 조사하고 SW 기능과 제약조건을 정의하는 명세서 작성, 대상이 되는 문제 영역과 사용자가 원하는 task를 이해하는 단계 설계(디자인) : 기획의도에 맞는 설계 및 디자인 추가 및 수정하는 단계 개발(발전) : 설계단계에서 만들어진 설계서를 바탕으로 프로그램을 작성, 코딩, 디버깅, 단위/통합 테스트 수행 테스트 : 발생 가능한 실행 프로그램 오류를 발견, 수정하는 단계 검토(피드..

1. TDD란(Test Driven Development) 테스트 주도 개발. 반복 테스트를 이용한 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현 2. TDD 개발 주기 Write Failing Test : 실패하는 테스트 코드 먼저 작성 Make Test Pass : 테스트 코드를 성공하기 위한 실제 코드 작성 Refactor : 중복 코드 제거, 일반화 등의 리팩토링 수행 💡 실패하는 테스트 코드를 작성할 때 까지 실제 코드를 작성하지 않고, 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성함으로써 실제 코드에 대해 기대되는 바를 보다 명확하게 정의하여 불필요한 설계를 피할 수 있고 정확한 요구 사항에 집중 가능 3. TDD의 장점 보다 튼..
1. 클린코딩 💡 코드를 작성하는 의도와 목적이 명확하며 가독성이 높은 코드 특징 명확한 네이밍 오류, 중복 없음 의존성 최대한 감소 클래스 혹은 메소드가 한 가지 일만 처리해아함 규칙 Naming : 변수, 클래스, 메소드에 의도가 분명한 이름 사용 Comment : 주석은 반드시 달 이유가 있는 경우에만 작성 Aesthetics (꾸미기): 규칙적인 들여쓰기와 줄바꿈, 불규칙한 중복 코드 제거 Making Control flow easy to read (흐름제거 만들기) 비교 시 왼쪽에 변수, 오른쪽에 상수 조건문 내에는 긍정문 if/else 를 사용하며, 삼항 연산자는 매우 간단한 경우만 do/while 루프의 사용은 가급적 삼가 Function : 함수는 가급적 작게, 한번에 하나의 작업만 수행할..

1. 파일 & 파일 시스템 파일 논리적인 저장 단위 켬퓨터 시스템의 편리한 사용을 위해 정보 저장의 일관된 논리적 관점 제공 레코드 혹은 블록 단위로 비휘발성 보조기억장치에 저장 파일 시스템 구조 메타 영역 : 데이터 영역에 기록된 파일의 이름, 위치, 크기, 시간 정보, 삭제 유무 등 파일의 정보 데이터 영역 : 파일 데이터 운영체제와 모든 데이터, 프로그램의 저장과 접근을 위한 기법 제공 시스템 내의 모든 파일에 관한 정보를 제공하는 계층적 디렉터리 구조 파일 및 파일의 메타데이터, 디렉터리 정보 등 관리 2. Access Methods 순차 접근(Sequential Access) 가장 단순한 방법으로 파일의 정보가 레코드 순서대로 처리 직접 접근(Random Access) 파일의 레코드를 임의의 순..