2025/05 8

HTTP/1.1과 HTTP/2 의 차이

HTTP/1.1과 HTTP/2는 웹 브라우저와 서버 간의 통신 프로토콜입니다. HTTP/2는 HTTP/1.1의 단점을 보완하여 성능을 크게 개선한 차세대 프로토콜입니다. 두 프로토콜의 차이점을 아래와 같이 정리할 수 있습니다.📌 주요 차이점 정리항목HTTP/1.1HTTP/2요청 방식요청마다 TCP 연결이 필요하거나 keep-alive로 제한하나의 연결로 여러 요청 동시 처리 (Multiplexing)헤더 처리매 요청마다 동일한 헤더를 반복 전송헤더를 압축하여 전송 (HPACK)성능동시 요청 처리에 제한이 많음 → 느림병렬 처리 가능 → 빠름서버 Push없음필요 시 서버가 클라이언트에게 리소스를 먼저 Push 가능우선순위없음리소스 요청에 우선순위 설정 가능지원 브라우저/환경현재도 널리 사용됨대부분 브라우..

IT 2025.05.19

Row Lock vs Table Lock의 개념 비교

교착 상태(Deadlock)의 원인 중 하나인 "Lock 경합"의 핵심 원리와 관련이 있습니다. 특히 rowlock과 tablelock의 차이를 이해하면 왜 락을 오래 잡고 있으면 위험한지 명확히 알 수 있습니다.✅ 1. Row Lock vs Table Lock의 개념 비교대상1개의 행 (ROW)테이블 전체범위선택된 레코드해당 테이블에 있는 모든 행동시성✅ 매우 높음 (다른 행 접근 가능)❌ 낮음 (전체 잠금)사용 시점WHERE 조건이 정확하고 인덱스 존재조건이 넓거나, 인덱스 없거나, 대량 DML 시 자동 확장성능가장 좋음느림, 병렬성 저하 🔍 예시-- Row Lock 발생UPDATE TB_ITEM SET QTY = QTY - 1 WHERE ITEM_ID = 123;ITEM_ID에 인덱스가 있다면 해..

DataBase 2025.05.14

G1 GC 관리 항목별 Default 값 및 권장 설정

📋 G1 GC 관리 항목별 Default 값 및 권장 설정 (CPU 2core / Memory 4GB)항목JVM 옵션Default 값설명2Core/4GB 권장값💡 최대 멈춤 시간 목표-XX:MaxGCPauseMillis200msGC 한 번당 최대 멈춤 시간 목표 (Soft 목표)그대로 사용 (200ms)💡 초기/최대 힙 크기-Xms, -Xmx초기: 시스템 결정최대: 1/4 메모리 정도전체 JVM 힙 크기-Xms512m -Xmx1024m💡 G1 Region 크기-XX:G1HeapRegionSize자동: 1MB ~ 32MB(기본은 1MB)힙을 나누는 단위 (2^n 크기, 보통 2048개 Region 구성됨)기본값 사용 (1MB)💡 Mixed GC 트리거 비율-XX:InitiatingHeapOccup..

Java 2025.05.14

G1 GC 영역 (Eden, Survivor, Old Gen)

🧠 G1 GC의 주요 영역 설명G1 GC는 아래의 세 가지 주요 영역으로 힙 메모리를 구성합니다:1. 🟦 Eden 영역 (Eden Space)객체가 처음 생성되는 공간Young GC 대상이며, 대부분의 객체는 이곳에서 생성되자마자 사라집니다 (short-lived objects)가득 차면 → Young GC 발생살아남은 객체는 Survivor로 이동2. 🟨 Survivor 영역Eden에서 살아남은 객체들이 일시적으로 이동하는 공간Survivor 공간도 여러 Region으로 구성됨객체가 특정 횟수(tenuring threshold)만큼 GC에서 살아남으면 → Old 영역으로 이동3. 🟥 Old 영역 (Tenured / Old Gen)장시간 생존한 객체들이 위치하는 공간Young GC로는 수거되지 않..

Java 2025.05.14

트랜잭션이 적용되지 않고 AutoCommit 상태일 때 발생할 수 있는 문제점

🧨 상황: 트랜잭션 미적용 → AutoCommit 상태Spring에서 @Transactional이 제대로 작동하지 않으면,JDBC 커넥션은 기본적으로 AutoCommit = true 상태로 동작합니다.즉, 각 SQL이 실행될 때마다 즉시 커밋되며 롤백이 불가능한 상태입니다.⚠️ 발생 가능한 문제점 4가지1. 데이터 불일치 / 부분 저장 문제❌ 예시 상황java // 예: 고객 주문 저장 로직insertOrder(); // 주문 마스터insertOrderItems(); // 주문 상세updateStock(); // 재고 차감insertOrder()는 성공했고, insertOrderItems()에서 오류 발생 →첫 insert는 이미 커밋되었기 때문에 롤백이 불가능→ 주문은 존..

Java 2025.05.14

@Transactional 어디에 위치시켜야하나?

✅ @Transactional을 인터페이스에 선언해도 "동작은 합니다" — 하지만 매우 제한적입니다.📌 자세한 설명1. Spring의 트랜잭션 처리 방식Spring AOP(Aspect-Oriented Programming) 기반 트랜잭션 처리에서는 **프록시 객체(proxy)**가 핵심입니다.@Transactional은 프록시 객체가 호출을 감싸서 트랜잭션을 적용합니다.이 프록시는 구현체(구현 클래스)에 적용된 애노테이션을 기준으로 동작합니다.📌 인터페이스에 붙인 @Transactional은 기본적으로 무시되며, 구현체 클래스에 붙여야 정상 적용됩니다. 2. ✅ 왜 인터페이스에 붙여도 "동작하는 것처럼 보일 때"가 있나?Spring Data JPA의 @Repository 인터페이스 메서드에 붙인 @T..

Java 2025.05.14

Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html"

Nuxt 3 프로젝트를 **정적 SPA(Static Single Page Application)**로 빌드하고, 백엔드(API 서버)와 연동하려는 상황이군요. 아래에 전체 흐름과 반드시 필요한 설정, 그리고 MIME 오류 방지 + 백엔드 API 호출 연동 방법을 체계적으로 정리✅ 1. Nuxt 3 정적 SPA 빌드 방법npx nuxi generate결과: .output/public/ 또는 dist/ 경로 안에index.html/_nuxt/*.js, .css 등 정적 자산 생성됨👉 이 구조는 npx serve .output/public로 즉시 실행 테스트 가능✅ 2. 디플로이 구조 개요역할구성정적 SPANuxt에서 빌드한 index.html, /_nuxt/*.jsAPI 서버별도 백엔드 서버 (예: Spr..

Warning 2025.05.08

A listener indicated an asynchronous response by returning true

이 오류 메시지:Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received은 브라우저 확장 프로그램(특히 Chrome Extension)과 관련된 메시지이며, 당신의 코드나 Nuxt 앱 자체의 문제는 아닙니다.🔍 원인 설명이 오류는 보통:크롬 확장 프로그램(예: AdBlock, React DevTools, Vue DevTools, Grammarly 등)이브라우저의 content script나 background script에서메시지 응답을 비동기로 처리하겠다고 하고는, 실제 응답을 주지..

Warning 2025.05.08