
📚 도커란 ? 애플리케이션을 패키징 할 수 있는 툴 이다. 도커는 흔히 아는 물건을 담는 컨테이너에 물건 대신 애플리케이션, 애플리케이션 구동에 필요한 모든 것(시스템 툴, Dependencies) 을 하나로 패키징하여 담는다. 이제 우리는 이 컨테이너를 통해

MVC패턴 (Model-View-Controller Pattern) > “화면을 그리는 것(View)”과 “비즈니스 규칙(Model)”을 “흐름 제어(Controller)”로 느슨하게 분리해 관심사 분리(Separation of Concerns) 를 달성하는 아키텍

알고리즘의 풀이 방법은 여러 가지가 있을 수 있다. 하지만 우리는 언제나 즉 가장 실행 속도가 빠른 최적의 코드를 짜기를 원한다. 실제로 백준이나 프로그래머스와 같은 알고리즘 문제 풀이 사이트에서도 효율성에 대한 채점이 따로 이루어지기도 한다. 따라서 알고리즘을 짤

Array(배열) >같은 타입의 변수들로 이루어진 선형 자료구조 논리적 순서(인덱스)와 물리적 순서(메모리 주소)가 같다. Element (요소) : 배열을 구성하는 각각의 값 Index(인덱스) : 배열에서 위치를 가리키는 숫자. 요소에 대한 유일무이한 식별자

스택 (Stack) >LIFO (Last In First Out) 구조 : 마지막(최근)에 넣은 것을 먼저 뺀다. 순차적으로 데이터 추가, 삭제하기 때문에 ArrayList와 같은 배열 구조가 적합 스택의 구현 사용되는 주요 메서드 | 메서드 | 설명 | | --- | --- | | boolean empty() | 스택이 비었는지 T/F | | Obj...

그래프 > 노드와 노드를 연결하는 엣지로 이루어진 비선형구조의 자료구조 > 노드(Node) : 데이터, 정점 엣지(Edge) : 노드들을 잇는 간선 그래프의 종류 무방향 그래프 : 두 노드를 연결하는 간선에 방향이 없는 그래프 방향그래프 : 간선에 방향성이 존

트리 계층적인 구조를 표현할 때 사용할 수 있는 비선형 자료구조 나무를 거꾸로 뒤집은 모습과 유사해 트리라 부르게 됨 > **트리의 용어 ** 노드 : 데이터를 저장하는 기본 단위. 그래프의 정점 루트 노드(root node) : 부모가 없는 최상위 노드 단말 노드(
힙 > 완전 이진 트리 기반의 자료구조 > ‘더미’라는 뜻처럼 데이터들이 느슨하게 정렬된 상태로 쌓여있는 형태 특징 항상 최댓값 또는 최솟값을 빠르게 찾을 수 있다. 이진 탐색 트리와는 달리 중복 값을 허용한다. 종류 힙은 부모-자식 노드의 대소관계에 따라 두 가지로 나눌 수 있다. 최대 힙 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같...
해시 > 임의의 길이의 데이터를 입력으로 받아 고정된 길이의 데이터(해시 값 또는 해시 코드)로 매핑하는 과정 > > > 이 변환을 수행하는 함수 = 해시 함수 > 핵심 원리 매핑 키(Key)를 특정 인덱스로 변환하는 과정 고유성 목표 이상적으로는 서로 다른 입력 값에 대해 항상 다른 해시 값이 나오도록 설계되지만, 실제로는 충돌(...
REST (Respresentational State Transfer) 웹 API를 구축하는 방법에 대한 일련의 규칙 및 지침 요청과 응답에 관해 지정해 놓은 다양한 형식들 중 하나 즉, HTTP Method(POST, GET, PUT, DELETE, PATCH)를 통해 자원을 처리(CRUD)하도록 설계된 아키텍쳐를 말함 >CURD Operation ...
정렬 알고리즘은 과거부터 현재까지 컴퓨터 과학자들에 의해 계속해서 연구되어지고 있다. 그 과정에서 수많은 정렬 알고리즘이 생겨났고, 그 중 가장 자주 쓰이고 알려져 있는 알고리즘에는 버블 정렬(거품 정렬), 삽입 정렬, 선택 정렬, 퀵 정렬, 병합 정렬 등이 있다.

BFS (Breadth First Search 너비 우선 탐색) >그래프와 가까운 노드부터 탐색하는 알고리즘 루트 노드와 같은 거리에 있는 노드를 우선으로 방문하며 탐색한다. 최단경로 혹은 임의의 경로를 찾고자 할 때 사용 큐를 이용하여 구현 탐색 방식 > 시작

동적계획법, Dynamic Programming (DP) > 복잡한 문제를 더 작은 하위 문제로 분해하여 해결하는 알고리즘 설계 기법 > 중복되는 부분 문제가 발생했을 때, 한 번만 계산하고 그 결과를 저장(메모이제이션)하여 동일한 부분 문제가 다시 발생했을 때 저장된 결과를 불러와 재활용하는 것. 이런 측면에서 기억해서 풀기 라고 불리기도 함. 특...

그리디 알고리즘 > 매 선택에서 현재 당장 최적인 답을 선택하여 최종 답에 도달하는 알고리즘 > 하지만 그리디 알고리즘은 전체에서 최적값을 언제나 구할 수는 없다는 문제점을 가진다. 예를 들어 다음과 같은 트리를 탐색할 때, 보통 가장 큰 수를 찾기 위해서는 제일 큰 수인 99에 도달하기 위해 3 → 99의 경로를 선택할 것이다. 하지만 그리디 ...
그동안 나는 코드를 짤 때 당장 동작하는 기능을 만들기에 급급해 코드 퀄리티, 협업을 위한 코드와 같은 부분에는 신경쓰지 못했다. 하지만 부트캠프에서 여러 팀원들과 협업을 하게 된 만큼 좋은 코드 작성법에 대해 알아보고 프로젝트에서 최대한 활용해보고자 한다 ! 좋은 코드란 무엇일까? 보통은 가독성이 좋아 이해하기 쉽고, 변경이 쉬우며, 재사용하기 쉽고...

디자인 패턴이란? > 객체 지향 프로그래밍(OOP)의 기본 원칙을 바탕으로, 소프트웨어 설계에서 반복적으로 발생하는 문제들을 해결하기 위한 검증된 해법을 정리한 것 > 객체 지향 프로그래밍(OOP)의 특징 추상화 복잡한 시스템에서 핵심적인 속성이나 기능만을 추출하여 간결하게 표현하는 것 불필요한 세부사항을 제거하고 본질적인 기능에 집중한다. 캡슐...
ACID 트랜잭션의 안정성과 신뢰성의 보장을 위해 데이터베이스에서 요구하는 4가지 핵심 속성 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)의 약자이다. 1. 원자성 (Atomicity) 트랜잭션 내의 모든 연산이 완전히 성공하거나, 하나라도 실패하면 전체가 실패(취소)하여 데이터...

Redis(Remote Dictionary Server) > 고성능의 인메모리 데이터 구조 저장소 > 디스크 기반 DB와는 달리 모든 데이터를 메인 메모리(RAM)에 저장해 매우 빠른 읽기/쓰기 속도를 제공하며, 주로 캐싱, 세션 관리, 메시지 브로커 등으로 활용되는 NoSQL 시스템이다. 특징 인메모리 초고속 성능: 데이터를 메모리에 저장하고 ...
백트래킹 해를 찾는 과정에서 가능성이 없는 경우를 조기에 배제(pruning) 하여 탐색 공간을 줄이는 알고리즘이다. 완전탐색(Brute-force)과 유사하지만, 단순히 모든 경우를 탐색하지 않고 유망하지 않은 경로를 미리 차단한다는 점에서 효율적이다. 즉, ‘현재 선택이 전체 해답으로 이어질 가능성이 있는가’를 판단하면서 탐색을 진행한다. 대표적으...
여러 트랜잭션이 동시에 동일한 데이터에 접근할 때, 데이터 무결성과 일관성을 보장하기 위한 동시성 제어 메커니즘데이터베이스나 애플리케이션에서 트랜잭션 간 충돌을 방지하기 위해 사용된다.데이터베이스는 동시에 여러 클라이언트의 요청을 처리한다.만약 두 트랜잭션이 같은 데이
웹 서비스의 요청 처리 방식은 기본적으로 동기와 비동기로 나뉜다. 비동기는 성능과 확장성에서 이점을 주지만, 복잡성도 함께 증가한다. 따라서 비동기 도입은 명확한 기준 아래 선택해야 한다. 이번 포스팅에서는 비동기의 개념과 도입 시점에 대해 정리해보려고 한다. 동기 방
Soft Delete vs Hard Delete — 어떤 삭제 방식을 선택해야 할까?데이터베이스에서 “삭제”는 단순히 데이터를 지우는 기능이 아니다.사용자 요구, 서비스 정책, 법적 규정, 데이터 복구 가능성 등 여러 요소들이 맞물리는 중요한 설계 포인트다.대표적인 삭
웹 서비스에서 API를 설계할 때 가장 중요한 개념 중 하나가 멱등성(Idempotency)이다.특히 결제, 주문, 포인트 지급, 재고 감소 같은 '금전·수량' 관련 로직에서는 필수적이다.같은 요청을 여러 번 보내더라도 결과가 한 번 실행된 것과 동일한 특성을 의미한다

서비스를 중단하지 않고 새로운 버전의 애플리케이션을 배포하는 방식즉, 서비스가 계속 운영되는 상태에서 새로운 버전을 배포하여 사용자가 서비스를 이용하는 동안 다운\*타임이 발생하지 않도록 하는 배포 전략이다.\*이를 위해 보통 여러 대의 서버 또는 여러 인스턴스 환경을