목록전체 글 (54)
백엔드 개발자

1. 가비지 컬렉션(GC)이란?GC의 개념가비지 컬렉션(Garbage Collection, GC)이란 프로그램 실행 중 필요 없어진 객체를 자동으로 정리하는 메모리 관리 기법이다. Java에서는 JVM(Java Virtual Machine)이 자동으로 GC를 수행하여 개발자가 직접 메모리를 해제할 필요 없이 효율적으로 메모리를 관리할 수 있다.GC의 역할메모리 누수 방지: 사용되지 않는 객체를 자동으로 제거하여 메모리 부족을 방지한다.개발 생산성 향상: 개발자가 직접 메모리 관리를 하지 않아도 된다.안전성 증가: 잘못된 메모리 접근(예: 해제된 객체 접근)으로 인한 오류를 방지한다.GC의 대상이 되는 JVM 영역JVM의 메모리는 여러 영역으로 나뉘며, GC는 Heap 영역을 대상으로 동작한다.Heap 영..

구조 패턴(Structural Patterns)은 객체나 클래스를 조합하여 더 큰 구조를 만드는 데 초점을 둔다.그래서 유지보수성과 확장성을 고려하여 코드의 결합도를 낮추고 재사용성을 높이는 역할을 한다.1. 어댑터 패턴(Adapter Pattern)어댑터 패턴은 서로 다른 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중간에 변환기를 두는 패턴이다.즉, 기존 코드의 변경 없이 새로운 기능을 추가할 때 유용하다.구현 방법기존 인터페이스와 호환되지 않는 클래스를 새 인터페이스에 맞게 변환하는 역할을 한다.인터페이스 기반의 어댑터 또는 객체 기반의 어댑터를 사용할 수 있다.특징코드 변경 없이 다른 클래스와 연동 가능.기존 시스템을 수정하지 않고 확장 가능.클래스 어댑터(상속 사용)와 객체 어댑터(위임 ..
디자인 패턴은 효율적이고 유지보수하기 쉬운 코드 구조를 만들기 위한 설계 원칙.그중에서도 행동(Behavioral) 패턴은 객체 간의 상호작용 및 책임 분배를 최적화하는 패턴들로, 객체 간 결합도를 줄이고 유연성을 높이는 데 중요한 역할을 한다.1. 옵저버 패턴 (Observer Pattern)→ 주체(Subject)의 상태 변화가 있을 때, 이를 감지하고 자동으로 알림을 받는 패턴✅ 개념한 객체(Subject)의 상태가 변하면 등록된 옵저버(Observer)들에게 자동으로 알림을 보냄이벤트 기반 시스템에서 많이 활용됨MVC(Model-View-Controller) 패턴에서 View가 Model의 변경 사항을 감지할 때 사용됨✅ 구현 방법 (Java 코드)import java.util.ArrayList;..
생성패턴이란?생성패턴은 객체의 생성 과정을 추상화하여 객체 생성의 유연성과 재사용성을 높이는 데 도움을 주는 디자인 패턴이다.잘 알려진 다섯가지 패턴(싱글톤 패턴, 팩터리 메서드 패턴, 추상 팩토리 패턴, 빌더 패턴, 프로토타입 패턴)에 대해 간단히 살펴보자.1. 싱글톤 패턴 (Singleton Pattern)특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴.구현 방법:public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance ..
도커는 컨테이너 기반 가상화를 제공한다. 가상화란 무엇인가?가상화는 물리적인 하드웨어를 논리적으로 분리하여 여러 운영 체제나 애플리케이션을 독립적으로 실행할 수 있도록 하는 기술이다.하이퍼바이저 기반 가상화하드웨어 위에 하이퍼바이저(예: VMware, Hyper-V)를 설치해 각 가상 머신(VM)이 독립된 운영 체제를 실행할 수 있도록 한다.장점: 각 VM이 완전한 운영 체제를 포함해 높은 격리성과 호환성을 제공한다.단점: 무겁고, 많은 리소스를 소모한다.OS 수준 가상화 (컨테이너)호스트 운영 체제 위에서 컨테이너를 실행하며, 커널을 공유하지만 애플리케이션과 라이브러리는 독립적으로 실행된다.장점: 경량화되어 빠르게 시작되고, 리소스 소모가 적다.단점: 같은 운영 체제 커널을 사용하므로 호환성은 제한적이..

그래프 최단 거리 알고리즘벨만 포드 알고리즘은 그래프 최단 거리를 구하는 알고리즘 중 하나이다.대표적으로 다익스트라 알고리즘은 모든 간선의 가중치가 양수일 때만 가능하다.다익스트라다익스트라가 어떻게 동작하는지 간단하게 살펴보자.이런 그래프가 있다고 가정한다. A에서 E까지의 최단거리를 구할 것이다.A에서 가능한 경로 중 가장 빠른 경로를 선택하여 이동할 것이다. A에서 B로 가는 경로가 선택되어 A에서 B까지의 경로는 최단 거리가 3인 것을 알 수 있다.이후 B에서 갈 수 있는 경로를 큐에 넣고 다시 탐색을 반복할 것이다. 이렇게 각 최단거리를 구하다 보면 E까지의 최단거리가 11이라는 것을 알 수 있다.그런데 이 방법은 모든 가중치가 양수일 때만 가능하다. 그림처럼 D에서 B로 가는 경로는 -100이기..

데이터베이스 인덱스란?인덱스는 책의 목차처럼 테이블에 저장된 데이터에 빠르게 접근하기 위해 사용되는 구조이다.인덱스에 사용되는 키를 기준으로, 데이터를 정렬된 방식으로 저장하여 데이터의 검색 속도를 크게 향상한다.그 대신 데이터를 추가, 수정, 삭제할 때 정렬 과정과, 추가적인 저장 공간을 차지하기 때문에 오버헤드를 유발할 수 있다.클러스터드 인덱스와 논클러스터드 인덱스인덱스는 클러스터드 인덱스와 논클러스터드 인덱스로 나뉜다.클러스터드 인덱스는 테이블의 데이터 자체가 인덱스에 의해 정렬이 된다. 물리적인 데이터 정렬을 의미하기 때문에 하나만 존재한다.논클러스터드 인덱스는 인덱스를 위한 별도의 테이블이 생성된다.클러스터드 인덱스 (Clustered Index):물리적 데이터 정렬: 테이블의 데이터 자체가 ..

TCP/IP란 무엇인가?TCP/IP는 인터넷과 네트워크의 기본이 되는 통신 규약(Protocol)의 모음이다.네트워크에서 애플리케이션 간의 데이터 전송, IP 주소간의 통신 등 다양한 규칙이 필요한데 이런 규칙들을 모아놓은 것이다.TCP/IP는 서로 다른 기기 간에 신뢰성 있고 효율적으로 전송될 수 있도록 설계된 구조로, 계층적 설계(layered architecture)를 기반으로 동작한다. 이를 통해 TCP/IP는 다양한 하드웨어와 소프트웨어 환경에서도 통합적으로 작동할 수 있다.Layered 계층 구조란?Layered 계층 구조는 네트워크를 여러 독립적인 계층으로 나누어 각각의 계층이 특정 기능을 담당하도록 설계된 모델이다. 각 계층은 상위 계층이나 하위 계층과 상호작용하지만, 자신의 역할에만 집중..