전체 글 318

[Linux] 스왑 공간

스왑 공간은 리눅스 시스템에서 물리적 메모리(RAM)가 부족할 때, 디스크의 일부를 임시 메모리로 사용하는 공간이다. 시스템의 RAM이 가득 차면 사용하지 않는 데이터나 프로그램의 일부를 스왑 공간으로 옮겨 RAM을 확보하게 된다. 이 과정을 스왑아웃(swap out)이라고 하며, 스왑 공간에서 다시 RAM으로 데이터를 가져오는 과정은 스왑인(swap in)이라고 한다.스왑은 크게 두 가지 형태로 존재할 수 있다:스왑 파티션: 디스크의 일부를 스왑 전용 파티션으로 할당한 것.스왑 파일: 일반 파일 시스템에서 파일로 존재하는 스왑 공간. 스왑 공간의 역할메모리 부족 시 도움: RAM이 부족해지면 스왑 공간을 활용하여 시스템의 안정성을 유지할 수 있다.대용량 작업 지원: 스왑 공간을 활용하면 대규모 데이터 ..

CS 2024.08.26

[K8s] 설치 시 스왑 비활성화의 필요성

Kubernetes는 컨테이너 관리와 리소스 할당을 엄격하게 제어하는 시스템이다. 스왑이 활성화된 경우, Kubernetes의 메모리 관리 로직이 예상대로 작동하지 않을 수 있으며, 이는 시스템 불안정성으로 이어질 수 있다.스왑 비활성화 이유메모리 관리 일관성: Kubernetes는 노드의 물리적 메모리만을 기준으로 리소스를 할당하며, 스왑 메모리를 포함하지 않는다. 스왑이 활성화된 경우 메모리 부족 상황을 정확히 감지하지 못할 수 있다.안정성: 스왑 사용으로 인해 컨테이너의 메모리 사용량이 증가하면, Kubernetes가 이를 적절히 관리하지 못할 수 있으며, 이는 전체 클러스터의 안정성에 부정적인 영향을 미칠 수 있다.스왑 비활성화 방법Kubernetes 설치 전에 스왑을 비활성화하려면 다음 명령어를..

DevOps/K8S 2024.08.26

[Git] Merge 전략

Git에서 브랜치를 병합할 때 사용할 수 있는 다양한 병합 전략들이 있다. 각 전략은 특정 상황에 맞게 사용되며, 프로젝트의 커밋 히스토리를 관리하는 데 중요한 역할을 한다. Fast-Forward Merge병합할 브랜치가 다른 브랜치에서 파생된 이후 해당 브랜치에 새로운 커밋이 없을 때 사용된다. 이 경우, 병합 브랜치는 대상 브랜치의 최상위 커밋 위에 그대로 이어지게 된다.사용 방법:git merge --ff-only 기본적으로 git merge 로도 Fast-Forward 병합이 수행된다. --ff-only 옵션을 추가하면 Fast-Forward 병합이 불가능한 경우 병합이 거부된다.언제 사용해야 하는가?독립적인 작업이 없을 때: main 브랜치에서 새로운 커밋이 없고, feature 브랜치에서만 ..

DevOps 2024.08.25

[NuxtJS] nuxt.config.js

ssr (Server-Side Rendering)Nuxt.js 애플리케이션이 페이지를 렌더링 하는 방식을 제어한다. 서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR) 중에서 선택할 수 있다. ssr: true: 서버 사이드 렌더링을 활성화하여 페이지를 서버에서 렌더링 한다. 이 경우, 사용자가 페이지를 요청할 때 서버가 HTML을 생성하여 클라이언트에 전송한다. 이 방식은 초기 로딩 속도가 빠르고 SEO(검색 엔진 최적화)와 페이지 로딩 성능이 향상될 수 있다. Nuxt.js의 기본값이다. ssr: false: 클라이언트 사이드 렌더링만 수행하여 서버에서 렌더링하지 않는다. 이 경우, 페이지는 클라이언트 브라우저에서 JavaScript를 통해 렌더링 된다. 초기 페이지 로딩 시 HTML이 ..

Javascript/NuxtJS 2024.08.25

[NuxtJS] Plugin

플러그인은 Nuxt.js 애플리케이션의 전역적으로 사용할 수 있는 기능을 확장하는 JavaScript 파일이다. 플러그인은 애플리케이션 초기화 시 실행되며, Vue 컴포넌트, Vue 인스턴스, Vuex 스토어 등에서 공통적으로 사용할 수 있는 메서드나 서비스를 정의한다. 플러그인 정의플러그인은 plugins 디렉토리 또는 nuxt.config.js에서 설정된 다른 경로에 저장된다. 플러그인의 정의는 기본적으로 다음과 같은 형식으로 이루어진다:// plugins/my-plugin.jsexport default (context, inject) => { // context는 Nuxt.js의 컨텍스트 객체이다. // inject 함수는 전역으로 사용할 수 있는 메서드를 등록한다. inject('myMeth..

Javascript/NuxtJS 2024.08.25

[NuxtJS] 전역 객체

$nuxtNuxt 애플리케이션의 루트 인스턴스에 대한 참조로, 애플리케이션의 전역 상태나 기능에 접근할 때 사용된다. Vue 컴포넌트 내에서 this.$nuxt를 통해 접근할 수 있다.refresh(): 현재 페이지를 강제로 리프레시하고 데이터를 다시 가져온다.navigateTo(path): 특정 경로로 프로그래밍적으로 이동한다. (Nuxt 3에서 도입된 기능)isOffline: 애플리케이션의 네트워크 연결 여부를 확인할 수 있다. $routerthis.$router는 Vue Router 인스턴스를 나타낸다. Vue 애플리케이션 내에서 라우팅 관련 작업을 관리하는 객체로, 라우트를 변경하거나 라우트 관련 정보를 처리할 때 사용된다. 이 객체를 통해 애플리케이션의 내비게이션을 조작할 수 있다.push(pa..

Javascript/NuxtJS 2024.08.25

[DB] DBCP (Database Connection Pooling)

데이터베이스 커넥션은 데이터베이스와의 연결을 효율적으로 관리하기 위해 TCP 연결을 사용한다. 데이터베이스 커넥션은 생성과 종료에 비용이 많이 들기 때문에, 커넥션 풀을 사용하여 이러한 비용을 줄인다. 커넥션 풀을 통해 미리 생성된 커넥션을 재사용함으로써 성능을 향상시키고 자원 소모를 줄인다.  각 커넥션의 설정은 클라이언트와 DB 서버 양쪽에서 모두 잘 이해하고 설정해야 한다. DB 서버 설정1. max_connections클라이언트와 DB 서버 간의 최대 동시 연결 수를 설정한다.max_connections 값이 4로 설정된 경우, 데이터베이스 서버는 동시에 최대 4개의 클라이언트 연결을 허용한다.DBCP의 최대 커넥션 수(maxTotal)가 DB 서버의 max_connections보다 크면, DB ..

Database 2024.08.17

[DB] MVCC (Multiversion Concurrency Control)

MVCC의 핵심은 데이터의 여러 버전을 유지하여 트랜잭션이 시작된 시점에 맞춰 데이터를 읽을 수 있도록 하는 것이다. 이를 통해 각 트랜잭션은 자신이 시작된 시점의 데이터 스냅샷을 사용하여 일관성 있는 읽기를 보장받게 되며, 읽기 작업과 쓰기 작업이 서로를 차단하지 않는 환경을 가능하게 한다. 즉, 한 트랜잭션이 데이터를 수정하는 동안 다른 트랜잭션이 그 데이터를 읽더라도 서로 간섭하지 않게 된다.이러한 MVCC의 동작은 데이터베이스 성능을 크게 향상시키는 장점이 있지만, 각 데이터에 대한 추가적인 버전 관리를 필요로 하므로 이를 효율적으로 처리하기 위한 메커니즘이 중요하다. 격리 수준과 MVCC의 적용트랜잭션의 격리 수준(Isolation Level)은 여러 트랜잭션이 동시에 실행될 때 데이터의 일관성..

Database 2024.08.17

[DB] Lock & 2PL

Write-Lock (Exclusive Lock)Write-Lock은 데이터베이스에서 특정 데이터 항목에 대해 쓰기 operation이 수행될 때, 해당 데이터 항목에 배타적 잠금을 거는 메커니즘이다.특징:배타적 잠금: 한 트랜잭션이 데이터를 수정하기 위해 write-lock을 획득하면, 다른 트랜잭션은 해당 데이터에 대해 읽기(read)나 쓰기(write) operation을 수행할 수 없다. 이는 데이터의 무결성을 유지하기 위한 중요한 메커니즘이다.경합 가능성: 여러 트랜잭션이 동일한 데이터에 대해 동시에 write-lock을 시도하면 경합이 발생하며, 이로 인해 데드락(교착 상태) 등이 발생할 수 있다.예시:T1 트랜잭션이 변수 x의 값을 20으로 변경하기 위해 write-lock을 획득한다.T2 ..

Database 2024.08.17

[JVM] JDBC 쿼리 및 메서드 실행 로깅

1. JDBC 쿼리 로그 활성화애플리케이션이 실행하는 SQL 쿼리와 그 실행 시간을 로그로 기록하려면, JVM 옵션에서 로그 레벨을 설정해야 한다. 아래는 이를 설정하는 방법이다:-Dlogging.level.jdbc.sqlonly=off # SQL 쿼리만 로깅하지 않음-Dlogging.level.jdbc.sqltiming=info # SQL 쿼리 실행 시간을 info 레벨로 로깅-Dlogging.level.jdbc.resultsettable=info # 쿼리 결과를 info 레벨로 로깅-Dlogging.level.jdbc.audit=off # JDBC audit 로그 비활성화-Dlogging.level.jdbc.resultset=info # JDBC 결과 셋을 로깅-..

JVM 2024.08.17
728x90