| En

VS Code 키보드 단축키

Visual Studio Code(VS Code)는 Microsoft가 개발한 무료 오픈소스 코드 편집기다. Windows, macOS, Linux에서 비슷한 사용 경험을 제공하고, 가벼운 실행 속도와 풍부한 확장 프로그램으로 널리 쓰인다. VS Code의 생산성을 높이려면 단축키를 익혀 키보드 중심으로 작업하는 습관이 중요하다. 이 글에서는 VS Code의 핵심 단축키를 카테고리별로 정리하고 활용법을 소개한다. VS Code 개요 Visual Studio Code란? VS Code는 Microsoft가 개발한 무료 오픈소스 코드 편집기로, TypeScript와 JavaScript로 작성되었으며 Electron 프레임워크를 기반으로 한다. IntelliSense, 내장 Git, 디버깅, 터미널, 풍부한 확장 프로그램을 지원하여 IDE에 가까운 기능을 제공한다. ...

2024년 6월 21일 · 4 분 · 829 단어 · In-Jun

플로이드-워셜 알고리즘

플로이드-워셜(Floyd-Warshall) 알고리즘은 그래프의 모든 정점 쌍(All-Pairs) 사이의 최단 경로를 찾는 동적 프로그래밍 기반 알고리즘이다. 다익스트라나 벨만-포드 알고리즘과 달리 한 번의 실행으로 모든 쌍의 최단 경로를 동시에 계산할 수 있으며, 1962년 Robert Floyd와 Stephen Warshall이 각각 독립적으로 발표했다. 시간 복잡도는 O(V³)이며, 음수 가중치 간선을 처리할 수 있고 음수 사이클의 존재 여부도 탐지할 수 있어 네트워크 지름 계산, 추이적 폐쇄 연산, 데이터베이스 쿼리 최적화 등 다양한 분야에서 활용된다. 플로이드-워셜 알고리즘의 역사 플로이드-워셜 알고리즘이란? ...

2024년 6월 17일 · 10 분 · 2083 단어 · In-Jun

벨만-포드 알고리즘

벨만-포드(Bellman-Ford) 알고리즘은 가중치가 있는 그래프에서 단일 시작점으로부터 다른 모든 정점까지의 최단 경로를 찾는 알고리즘이다. 1950년대에 Richard Bellman과 Lester Ford Jr.가 독립적으로 발견했으며, 다익스트라 알고리즘과 달리 음수 가중치를 가진 간선을 처리할 수 있다. 또한 그래프 내에 음수 사이클이 존재하는지 탐지할 수 있다는 점이 큰 특징이다. 이 알고리즘은 동적 프로그래밍(Dynamic Programming) 접근법을 바탕으로 O(VE)의 시간 복잡도로 동작하며, 네트워크 라우팅 프로토콜, 금융 시장의 차익 거래 탐지, 최소 비용 흐름 문제 등 다양한 실제 응용 분야에서 활용되고 있다. ...

2024년 6월 17일 · 10 분 · 1998 단어 · In-Jun

다익스트라 최단 경로 알고리즘

다익스트라(Dijkstra) 알고리즘은 가중치가 있는 그래프에서 시작 정점으로부터 다른 모든 정점까지의 최단 경로를 찾는 대표적인 알고리즘으로, 1956년 네덜란드의 컴퓨터 과학자 Edsger Wybe Dijkstra가 발명하여 현재까지 네트워크 라우팅, GPS 내비게이션, 게임 AI 등 수많은 분야에서 핵심적으로 활용되고 있다. 탐욕 알고리즘(Greedy Algorithm) 접근 방식을 사용하여 매 단계에서 최적의 선택을 하며, 우선순위 큐를 활용한 구현으로 O(E log V)의 효율적인 시간 복잡도를 달성하여 대규모 그래프에서도 실용적으로 사용할 수 있다. 다익스트라 알고리즘의 역사 다익스트라 알고리즘이란? 가중치가 있는 그래프에서 하나의 시작 정점으로부터 다른 모든 정점까지의 최단 경로를 찾는 알고리즘으로, 모든 간선의 가중치가 0 이상이어야 한다는 제약 조건을 가진다. ...

2024년 6월 17일 · 8 분 · 1694 단어 · In-Jun

CI/CD 지속적 통합 Continuous Delivery와 Continuous Deployment

CI/CD는 Continuous Integration(지속적 통합)과 Continuous Delivery/Deployment(지속적 제공/배포)의 약자다. 소프트웨어 개발 과정에서 코드 변경 사항을 자동으로 빌드, 테스트, 배포하는 일련의 자동화된 프로세스를 뜻하며, 현대 소프트웨어 개발에서 DevOps 문화의 핵심 요소로 자리 잡았다. 이를 통해 개발자는 코드를 더 자주, 더 안전하게 통합하고 배포할 수 있고, 소프트웨어 릴리스 주기를 단축하면서 버그를 조기에 발견해 제품 품질을 높일 수 있다. CI/CD의 역사와 유래 CI/CD는 1990년대 소프트웨어 개발 방법론의 혁신 속에서 탄생했으며, Extreme Programming(XP)의 핵심 실천 방법 중 하나로 시작되어 현재까지 지속적으로 발전해왔다. ...

2024년 6월 10일 · 10 분 · 2002 단어 · In-Jun

네트워크 소켓

소켓(Socket)은 네트워크 통신의 종단점(endpoint)을 추상화한 소프트웨어 인터페이스다. 1983년 UC Berkeley의 4.2BSD 유닉스 운영체제에서 처음 등장했으며, 오늘날까지 인터넷 통신의 근간을 이루는 핵심 기술로 자리 잡고 있다. 소켓은 IP 주소와 포트 번호의 조합으로 네트워크상의 고유한 통신 지점을 식별하고, 프로세스 간 데이터 교환을 위한 표준화된 API를 제공한다. 소켓의 역사와 발전 Berkeley Sockets의 탄생 Berkeley Sockets(BSD Sockets)은 1982년 BSD UNIX 4.1에서 처음 소개되었으며, 1986년 BSD UNIX 4.3에서 개정된 버전이 현재까지 널리 사용되고 있다. 처음에는 사실상(de facto) 표준이었으나, 이후 POSIX 사양의 공식 구성 요소로 채택되어 거의 모든 운영체제에서 동일한 인터페이스로 네트워크 프로그래밍을 할 수 있게 되었다. ...

2024년 6월 8일 · 6 분 · 1122 단어 · In-Jun

JPA 1차 캐시와 2차 캐시

Hibernate 캐시 아키텍처의 역사와 개념 Hibernate는 2001년 Gavin King이 처음 개발할 때부터 성능 최적화를 위한 캐싱 메커니즘을 핵심 기능으로 설계했으며, 이후 Hibernate의 캐시 아키텍처는 1차 캐시(First-Level Cache)와 2차 캐시(Second-Level Cache)라는 두 단계의 계층 구조로 발전하여 데이터베이스 접근을 최소화하고 애플리케이션 성능을 극대화하는 방향으로 진화해왔다. 1차 캐시는 Session(현재의 EntityManager)과 함께 Hibernate 초기 버전부터 존재한 필수 기능으로, 영속성 컨텍스트 자체가 1차 캐시 역할을 하며 트랜잭션 내에서 엔티티의 동일성을 보장하고 변경 감지(Dirty Checking)의 기반이 된다. ...

2024년 6월 8일 · 7 분 · 1369 단어 · In-Jun

JPA 영속성 컨텍스트

영속성 컨텍스트의 개념과 역사 영속성 컨텍스트(Persistence Context)는 애플리케이션과 데이터베이스 사이에서 엔티티의 생명주기를 관리하고, 다양한 최적화 기능을 제공하는 JPA의 핵심 개념이다. 이 개념은 2001년 Gavin King이 Hibernate를 개발할 때 Session이라는 이름으로 처음 도입되었다. Hibernate의 Session은 데이터베이스 연결을 추상화하고, 엔티티 객체의 상태를 추적하며, 트랜잭션 안에서 일관된 데이터 뷰를 제공했다. 이후 2006년 JPA 1.0이 Hibernate의 개념을 표준화하면서 영속성 컨텍스트와 EntityManager라는 이름으로 정리되었다. 영속성 컨텍스트는 객체지향 애플리케이션에서 데이터베이스 작업의 복잡성을 줄이기 위해 등장했다. 개발자는 매번 데이터베이스에 직접 쿼리하는 대신, 영속성 컨텍스트라는 중간 계층을 통해 객체 중심으로 비즈니스 로직을 작성할 수 있다. 이 계층은 캐싱, 변경 추적, 지연 쓰기 같은 최적화를 자동으로 처리한다. 영속성 컨텍스트는 Martin Fowler가 정의한 Unit of Work 패턴과 Identity Map 패턴을 구현한 것으로, 비즈니스 트랜잭션 동안 변경된 객체를 추적했다가 트랜잭션 종료 시 한꺼번에 데이터베이스에 반영한다. 또한 동일한 식별자를 가진 엔티티에는 항상 같은 객체 인스턴스를 반환해 일관성을 보장한다. ...

2024년 6월 8일 · 5 분 · 1010 단어 · In-Jun

JPA Dirty Checking

Dirty Checking의 개념과 역사 Dirty Checking은 Hibernate의 핵심 기능 중 하나로, 영속성 컨텍스트가 관리하는 엔티티의 변경 사항을 자동으로 감지해 데이터베이스에 반영하는 메커니즘이다. 이 개념은 2001년 Gavin King이 Hibernate를 처음 개발할 때 도입한 투명한 영속성(Transparent Persistence)의 핵심 구현체이기도 하다. 개발자는 명시적인 UPDATE 문을 작성하지 않아도 객체의 상태만 바꾸면 데이터베이스를 자동으로 갱신할 수 있다. “Dirty"라는 용어는 데이터베이스 시스템에서 수정되었지만 아직 저장되지 않은 데이터를 가리키는 전통적인 표현이다. 즉, 메모리의 데이터가 디스크의 데이터와 일치하지 않는 상태를 뜻한다. Hibernate는 이 개념을 객체-관계 매핑에 적용해 엔티티 객체의 최초 로딩 상태와 현재 상태가 다른지를 감지한다. 이 기능은 2006년 JPA 1.0이 Hibernate의 개념을 표준화하면서 영속성 컨텍스트 명세의 일부로 포함되었고, 이후 모든 JPA 구현체가 지원해야 하는 기능이 되었다. ...

2024년 6월 8일 · 6 분 · 1130 단어 · In-Jun

JPA N+1 쿼리 문제

N+1 문제란 N+1 문제는 ORM(Object-Relational Mapping)에서 자주 발생하는 성능 문제 중 하나로, 연관된 엔티티를 조회할 때 연관된 엔티티의 수(N)만큼 추가로 쿼리가 실행되어 결과적으로 쿼리의 수가 N+1개가 되는 문제이다. 이러한 쿼리의 수가 많아지면 데이터베이스와의 통신이 늘어나고 네트워크 왕복 시간이 증가하며 데이터베이스 커넥션 풀이 고갈될 위험이 있어 성능이 크게 저하될 수 있다. N+1 문제의 역사와 배경 N+1 문제는 ORM 프레임워크가 등장하면서 함께 나타난 고질적인 성능 문제다. 특히 Hibernate와 JPA에서 지연 로딩(Lazy Loading) 전략을 사용할 때 자주 드러난다. ORM은 객체 지향적으로 데이터를 다루기 위해 연관된 엔티티를 필요할 때까지 미뤄서 로딩한다. 이 방식은 불필요한 데이터 로딩을 줄이고 초기 조회 속도를 높인다는 장점이 있다. 하지만 개발자가 연관 관계를 의식하지 못한 채 반복문 안에서 연관 엔티티에 접근하면, 각 엔티티마다 개별 쿼리가 실행되면서 N+1 문제가 발생한다. 이 때문에 N+1 문제는 Hibernate 초기 버전부터 지금까지 계속 주의해야 할 대표적인 성능 이슈로 꼽힌다. ...

2024년 6월 8일 · 6 분 · 1101 단어 · In-Jun
[email protected]