분류 전체보기
-
mysql 스레딩 구조데이터베이스 2025. 12. 14. 20:45
1.개요mysql 프로세스가 어떻게 실행되는지를 정리해보았다. 2.mysql 프로세스 동작myslq 서버는 프로세스 기반이 아니라 스레드 기반으로 작동되며 크게 포그라운 스레드, 백그라운드 스레드로 구분할 수 있다. mysql 서버에서 실행 중인 스레드의 목록은 다음과 같이 performance_schema 데이터베이스의 threads 테이블을 통해 확인할 수 있다.멀티 프로세스 기반 (크롬 브라우저)탭별로 새로운 프로세스로 동작함(각 프로세스는 멀티 스레드로 동작)멀티 스레드 기반 (was, mysql 서버)하나의 메인 프로세스가 실행되며, 이 프로세스 내에서 수많은 클라이언트 요청을 처리하기 위해 스레드 풀을 운영하며 여러 개의 워커 스레드를 관리합니다. 3.포그라운드 스레드(클라이언트 스레드)포그라..
-
자바 - 와일드카드java 2025. 12. 14. 15:55
1.개요제네릭과 와일드카드 차이에 대해 이해하는게 쉽지않았다. 따라서 두개의 차이가 뭔지를 정리해보았다. 2.제네릭, 와일드카드서적을 보면 제네릭도 다형성을 활용해 다양한 타입을 받을 수 있고 와일드카드도 마찬가지라고 나와있다.처음 제네릭과 와일드카드를 접했을때 똑같은건데 도데체 차이가 뭔지, 왜 자바진영에서는 똑같은걸 두개나 만들어논건지 많이 헷갈렸다. 하지만 이것만 이해하면 된다. 제네릭은 다형성을 활용해 다양한 타입을 받을 수 있는 제네릭 타입의 변수, 제네릭 매개변수를 사용하는 메서드를만드는것이다. 그리고 와일드 카드는 이미 제네릭으로 만들어진 매개변수를 사용하기 쉽게 변경할 수 있는 도구일 뿐이다.다시한번 말하지만 와일드카드는 제네릭 타입이나 제네릭 메서드를 정의할 때 사용하는게 아니다. 3.제..
-
자바 - 제네릭java 2025. 12. 14. 13:10
1.개요제네릭을 처음 접했을때 이해하는데 많이 시간이 소요됐다. 내가 어떻게 이해했는지를 공유하기 위해 해당 문서를 작성하게되었다. 2.제네릭이 필요한 근본적인 이유 Box 클래스가 존재한다.package org.src.study;public class Box { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; }} Box 에 String 이라는 타입의 값을 담았다.package org.src.study;public class StudyMain { public static void..
-
캐시cs 2025. 12. 13. 14:27
1.개요캐시(Cache)라는 동일한 개념이 컴퓨터 시스템의 여러 계층(CPU, 데이터베이스, 웹 애플리케이션)에서 어떻게 적용되고 작동하는지 비교하여 설명해 드리겠습니다. 2.캐시의 공통 원칙세 가지 유형의 캐시 모두 속도 차이가 나는 두 계층 사이에서 자주 사용되는 데이터의 사본을 더 빠른 쪽에 임시 저장하여 접근 속도를 향상시키고 느린 접근 횟수를 줄이는 목적을 가집니다. 3.계층별 캐시1)CPU 캐시가장 빠르고 낮은 계층에 위치한 캐시입니다. 목적CPU의 처리 속도와 메인 메모리(RAM)의 접근 속도 차이를 줄입니다. 위치CPU 칩 내부 (L1, L2) 또는 근처 (L3)의 매우 빠른 SRAM에 위치합니다. 저장 데이터CPU가 곧 필요로 할 데이터(명령어, 값)를 메인 메모리에서 가져와 저장합니다...
-
레거시 스프링의 설정방식과 구조가 스프링부트에서는 어떻게 보완되었을까?spring boot 2025. 5. 17. 16:08
개요Spring Boot 도입 후 발생할 수 있는 구조적, 설정적 차이를 사전에 공유함으로써 개발 환경 변화에 대한 혼란을 최소화하고, 향후 유지보수 및 신규 개발 시 참고 자료로 활용하기 위함입니다. 목차1.스프링, 스프링부트란?2.스프링부트는 스프링의 어떤점들을 보완하였을까? 1)컴포넌트 스캔 2)웹 애플리케이션 구성 3)웹 애플리케이션 실행 4)스프링 외부 라이브러리 클래스 빈 선언 5)IOC 컨테이너 관리 6)라이브러리 버전 관리 7)스프링프레임워크 구동을 위한 필수 라이브러리들3.스프링부트 실행순서4.스프링부트에서 추가된 핵심기능 1)엑츄에이터 1.스프링, 스프링부트란?1)스프링자바 기반의 오픈 소스 애플리케이션 프레임워크2)스프링부트스프링을 쉽게 사용할 수 있게 해주는 도구이다..
-
mysql x락 s락 .. 그래도 도데체 뭐가 걸리는건데?데이터베이스 2025. 3. 19. 20:23
1.개요본 문서는 많은 기술 블로그에서 잘못 전파되고 있는 MySQL InnoDB의 잠금(Lock) 정보를 직접 실험을 통해 팩트 체크하고, 비인덱스 스캔 및 Join Update 시 발생하는 정확한 잠금 유형과 범위를 분석합니다. 2.팩트 체크 항목2-1.PK/Index가 아닌 칼럼으로 UPDATE 진행 시 잠금 직접 테스트한 결과pk,인덱스가 아닌 칼럼으로 업데이트 진행 시 업데이트 할 행을 찾기 위해 순회한 레코드에 X락이 걸린다. 타 블로그 내용다른 블로그들 보면 순회한 레코드에는 S락을 걸고 실제 수정할 레코드에는 X락을 건다고 한다. 팩트 체크 과정1)member 테이블 생성후 아래 데이터를 생성 2)A커넥션에서 오토 커밋 해제 후 아래 쿼리 실행id = 3 레코드가 수정됨UPDATE memb..
-
자바 컴파일,런타임과정java 2024. 12. 21. 12:56
1.개요많은 블로그나 자료에서 컴파일과정에 대해 잘못 설명하고있어 이를 바로 잡기 위해 작성하게 됐습니다. 2.타 블로그 및 자료에서 설명하는 컴파일 과정개발자가 자바 소스코드(.java)를 작성합니다.자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다.컴파일된 바이트 코드를 JVM의 클래스로더(Class Loader)에게 전달합니다.클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime ..
-
깃은 줄바꿈시 해당 라인에 /n 가 포함된다.깃 2024. 10. 27. 16:09
1.개요같은 파일을 수정하더라도 서로 다른 라인만 수정한다면 Git Merge 시 충돌이 발생하지 않을 것이라는 일반적인 개발 관행과 기대를 바탕으로 작업을 진행했으나, 예상치 못한 충돌이 발생한 사례와 그 기술적 원인을 분석한 내용입니다. 2.시나리오Main 브랜치, Sonata 브랜치(Main 의 Peature 브랜치), Grandeur 브랜치(Main 의 Peature 브랜치)가 존재하고 Sonata.js파일이 존재함const engineStart = () => { console.log('부르릉');}; A 개발자가 Sonata 브랜치로 Sonata.js 파일의 2번째줄을 수정 후 커밋/푸시const engineStart = () => { console.log('부르릉~~~~~!');};..