// 최상단에 jquery를 추가해주자
GC 동작 방식 및 원리 (2)
·
카테고리 없음
GC — Stop-the-World, Card Table, 그리고 알고리즘의 진화지난 글에서는 JVM의 어떤 객체가 GC 대상이 되는지(3가지 가설, GC Root)를 다뤘다. 이번 글에서는 그 GC가 실제로 어떤 과정으로 동작하는지, 속도가 느려지는 원인인 STW는 무엇인지, 그리고 GC가 어떻게 발전해왔는지를 다룬다. 핵심 질문은 하나다.GC의 역사는 곧 Stop-the-World를 줄여온 역사다. 어떻게 줄여왔는가?1 Stop-the-World — GC 속도 저하의 원인GC가 살아있는 객체를 판별하려면 GC Root에서 참조 그래프를 탐색(Mark)해야 한다. 문제는 탐색하는 동안 애플리케이션 스레드가 참조를 바꿔버리면 판정이 틀어진다는 것이다. // GC가 A를 Mark하는 중에...A.ref =..
@Component가 Spring Boot에 등록되는 과정
·
Spring
@Component는 어떻게 Spring Bean으로 등록될까@Component(혹은 @Service, @Repository 등)를 붙이면 Spring이 알아서 객체를 만들어 관리해 준다. 이 "알아서"의 내부 과정을 SpringApplication.run()부터 싱글톤 캐시에 올라가기까지 단계별로 따라가 본다.본격적으로 들어가기 전에 Bean이 무엇인지부터 짚고 시작하자.1. Bean이란?Spring에서는 객체를 직접 new 해서 쓰지 않는다. MemberService memberService = new MemberService();이런 코드를 개발자 대신 Spring이 수행하고, 생명주기까지 관리한다. 이렇게 Spring 컨테이너가 생성·관리하는 객체를 Bean이라고 부른다. 2. 등록 과정의 시..
GC 동작 방식 및 원리 (1)
·
Java
GC — 세대 가설과 GC RootGC가 객체의 생사를 판별하는 근거와, 실무에서 자주 마주치는 GC Root발 메모리 누수 패턴을 코드와 함께 파헤친다.C와 C++에서는 메모리 할당과 해제를 개발자가 직접 관리해야 한다. Java는 이 과정을 자동화한 GC(Garbage Collector)를 제공한다.GC 알고리즘(G1, ZGC 등)과 Stop-the-World, Card Table, Write Barrier 등 세부 동작은 다음 글에서 다룬다. 이 글에서는 GC가 세대를 나누는 근거와 GC Root, 그리고 GC Root로 인한 메모리 누수 패턴까지만 짚는다.1 GC를 뒷받침하는 3가지 가설GC는 아래 3가지 가설을 근거로 동작 방식을 설계한다.가설내용근거가 되는 설계약한 세대 가설(Weak Gene..
JVM 정리 — Java 코드가 실행되기까지
·
Java
JVM — Java 코드가 실행되기까지Class Loader → Runtime Data Area → Execution Engine 전체 흐름을 코드와 함께 깊이 파헤친다.Java 코드는 어떻게 실행될까?main()을 실행하는 순간 JVM 안에서는 수십 가지 일이 동시에 벌어진다.이 글에서는 Class Loader → Runtime Data Area → Execution Engine → GC로 이어지는 JVM 실행 흐름 전체를 코드와 함께 깊이 다룬다.GC는 분량상 별도 글에서 다룬다. 이 글에서는 구조와 기본 동작만 짚는다.Java 실행 흐름 개요.java 파일 └─► javac (컴파일러) └─► 플랫폼 독립적인 .class (바이트코드) └─► JVM ..
Deboard 블로그 프로젝트 좋아요 동시성 및 데드락 문제 해결과정
·
카테고리 없음
좋아요 동시성 문제 — 데드락에서 Race Condition까지toggleLike 구현 후 동시성 테스트를 작성하는 과정에서 단계적으로 발견한 두 가지 문제와 해결 과정을 정리한다.P — 문제 발견 과정toggleLike 구조좋아요 토글은 직관적으로 이렇게 동작한다.1. (userId, postId)로 좋아요 레코드 조회2. 있으면 → likeCount 감소 + 레코드 삭제3. 없으면 → likeCount 증가 + 레코드 삽입조회와 삽입이 별도 쿼리로 나뉘어 있어 두 요청이 동시에 진입하면 정합성이 깨질 수 있다고 판단했다.동시성 테스트 작성CountDownLatch로 100개 스레드를 동시에 출발시키는 테스트를 작성했다.CountDownLatch startLatch = new CountDownLatch..
브라우저에 url을 입력 후 과정
·
CS지식
1. 먼저 리다이렉트가 있다면 리다이렉트를 진행하고 없다면 그대로 해당 요청에 대한 과정이 진행됨.2. 캐싱 브라우저 캐시, os 캐시를 확인3. 없다면 DNS 서버에 "www.naver.com의 IP 주소가 뭐야?"라고 물어봄 -> 도메인을 ip 주소로 맵핑4. DNS 서버로부터 223.130.195.200 같은 실제 IP 주소를 받아와.5. TCP/IP 연결 -> IP 주소를 알았으니 이제 서버와 연결 통로를 만들어야 해. 이때 신뢰성 있는 연결을 위해 3-Way Handshake 과정을 거쳐.클라이언트 -> 서버: 연결하자! (SYN)서버 -> 클라이언트: 그래, 연결하자! 나도 준비됐어. (SYN+ACK)클라이언트 -> 서버: 확인했어. 이제 데이터 보낼게! (ACK)6. Http 요청 메시지 전..