마이크로서비스 아키텍처(Microservices Architecture)개념애플리케이션을 여러 개의 작은 독립적인 서비스로 분리하여 개발하는 방법론 각 서비스는 특정 기능이나 비즈니스 도메인을 담당, 독립적으로 배포되고 운영됨서로 다른 기술 스택을 사용할 수 있음API를 통해 통신함특징독립적인 배포 및 개발 작은 단위의 서비스다양한 기술 스택 사용 가능자율적인 팀복잡한 관리 필요확장성 : 특정 서비스에만 확장을 적용할 수 있어 자원 활용이 효율적임 모놀리식 아키텍처(Monolithic Architecture)개념하나의 거대한 애플리케이션으로 모든 기능을 통합하여 개발하는 방법론모든 기능이 하나의 코드 베이스에서 실행됨하나의 배포 단위로 운영전통적인 애플리케이션 개발 방식으로 많이 사용함특징단일 코드베이..
CS
Array vs Linked List 1. Array 데이터가 메모리 공간에 연속적으로 저장되어 있는 자료구조 index를 통해 랜덤 access 가능 ⇒ 탐색 : O(1) 컴파일 타임에 배열의 크기가 고정됨 따라서 런타임에 크기를 변경 불가 (⇒ vector, array list) 삽입, 삭제 : O(N) 배열의 값들을 모두 이동시켜야 하기 때문에 읽기 전용에 유용 스택에 저장 2. Linked List 여러개의 노드들이 순차적으로 연결된 자료 구조 노드 데이터 다음 노드를 가르키는 포인터 메모리 공간에 연속적으로 할당되어 있지 않음 탐색 : O(N) 삽입, 삭제 : O(1) 자료의 삽입 삭제가 빈번하게 일어나는 것에 유용 힙에 저장 Stack vs Queue 1. Stack LIFO 후입선출 성질을 ..
링크드 리스트 링크드 리스트란 노드를 연결해서 만드는 리스트 헤드 : 리스트의 첫 번째 노드 테일 : 리스트의 마지막 노드 노드 : 리스트 내의 각 요소 데이터 다음 노드에 대한 포인터 링크드 리스트의 주요 연산 노드 생성 / 소멸 노드 추가 노드 탐색 노드 삭제 노드 삽입 장점과 단점 장점 새로운 노드의 추가, 삽입, 삭제가 쉽고 빠름 O(1) 단점 특정한 노드를 찾는데 걸리는 시간이 배열보다 느림. 최악의 경우 N번 탐색 O(N) 포인터 때문에 각 노드마다 4byte의 메모리가 추가로 발생 더블 링크드 리스트(양방향 링크드 리스트) 양방향 탐색이 가능한 리스트 다음 노드를 가르키는 포인터 외에 이전 노드를 가르키는 포인터도 가지고 있음 환형 링크드 리스트(원형 링크드 리스트) 헤드와 테일이 연결되어 ..
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) 파일의 레코드를 임의의 순..