본문 바로가기

분류 전체보기102

JVM 메모리 구조, PermGen → Metaspace 전환, Spring Bean Scope와 CGLIB의 연관성 이 문서에서는 JVM의 세대별 메모리 구조와 PermGen에서 Metaspace로의 전환 이유를 설명합니다. 또한 Spring의 Bean Scope와 CGLIB 프록시가 Metaspace 사용에 어떤 영향을 미치는지 실무 관점에서 다룹니다. 프록시 기반 AOP와 스코프 설정이 메모리 누수에 어떻게 연결되는지도 함께 살펴봅니다.1. JVM의 세대별 메모리 구조JVM은 힙 메모리를 다음과 같이 세대(Generation) 단위로 구분하여 가비지 컬렉션(GC) 성능을 최적화한다.1.1 Young Generation새롭게 생성된 객체가 저장되는 영역.Eden, Survivor(S0/S1) 영역으로 구성됨.대부분의 객체는 이 영역에서 생성되고 소멸되며, GC가 자주 발생하는 특징이 있음.1.2 Old (Tenu.. 2025. 5. 17.
JVM 메모리 구조 GeeksforGeek 사이트의 Java Memory Management란 글을 번역했습니다. 일부 내용을 의역했기 때문에 어색하거나 틀린 내용이 있으면 댓글에 남겨주시거나 위 링크에 접속해서 확인하세요. 번역 과정에서 일부 제가 강조하고 싶은 단어(몰랐던 단어)는 괄호로 표시 합니다. 번역이 힘들었던 부분은 아래에 원문을 별도로 기재합니다. JVM 메모리 구조: JVM을 프로그램이 실행되는 동안 사용되는 다양한 런타임 데이터 영역을 정의합니다. 몇몇 영역은 JVM에 의해 생성되는 반면 몇몇은 프로그램에서 사용되어지는 쓰레드에 의해 생성됩니다. 그러나 JVM에의해 생성된 메모리영역은 JVM이 종료될 때만 회수됩니다. 쓰레드의 데이터영역은 인스턴트화(instantiation)되는 동안 생성되고 쓰레드가 종.. 2022. 7. 29.
Spring Data JPA 2.4.15 Document Memo 여는 글 이 글은 Spring Data JPA 2.4.15 도큐먼트를 읽고 인상 깊었던 내용 일부만을 무자비한 의역 및 관련 개념을 정리하는 글 입니다. https://docs.spring.io/spring-data/jpa/docs/2.4.15/reference/html/#reference 4. Working with Spring Data Repositories 스프링 데이터 리포지토리 추상화의 목표는 데이터 액세스 레이어를 구현하는데 필요한 많은 보일러플레이트 코드를 막대하게 줄이는 것이다. 4.1. Core concepts 스프링 데이터 리포지토리 추상화의 중심이 되는 인터페이스는 Repository 입니다. 리포지토리는 관리 하기 위한 도메인 클래스와 아이디 타입을 가집니다. 이 인터페이스는 주로 .. 2022. 6. 14.
[최범균 Youtube] 마이크로서비스 5개 배포 원칙 소개 최근에 MSA에 대해서 관심이 생기면서 관련된 영상을 찾아보던 중 최범균님이 올리신 마빌딩 마이크로서비스 아키텍처 시리즈 영상에 대해 알게 되었습니다. 아래 영상을 먼저 보고 제 글을 읽어보시길 추천드립니다. 실행 격리 Isolated execution 부하/배포에 있어서 마이크로서비스 간에는 영향을 줘선 안된다. 만약 한 호스트(노드 혹은 서버)에서 여러 마이크로서비스 인스턴스를 실행할 경우 한 마이크로서비스의 부하가 급격히 증가 했을 때 다른 마이크로서비스의 성능이 저하될 수 있으며, 한 마이크로서비스의 배포를 위한 설정이 변경되면 다른 마이크로서비스의 배포에도 영향을 줄 수 있기 때문이다. 그러므로 격리된 환경에서 마이크로서비스를 실행해야 하며, 가상화 기술, 컨테이너, FaaS 등의 기술을 활용하.. 2022. 4. 10.
[최범균 Youtube] 완전 주관적인 실용주의 프로그래머 팁 10선 최범균님의 영상을 보고 저의 생각과 부연적인 의견을 더해 작성한 글입니다. 원본 영상을 보신 후에 읽어 보시길 추천드립니다. 팁1. 자신의 기예(craft)에 관심을 가져라 여기서 기예란 ‘컴퓨터에게 우리가 시키고 싶은 일을 하게 끔 만드는 것’을 의미한다. 좀더 자세하게 자신이 어떤 기예를 가지고 있고, 어떤 부분에 능숙하고 부족한지를 알아야 한다. 그래야만 실제 직면한 문제들에 대해 해결할 수 있고, 기예를 단련하기 위해 어떤 방향으로 나아가야 할지도 잡히기 때문이다. 이는 실용주의 프로그래머가 갖는 여러 특징 중 공통적이면서 기본적인 특징이다. 그 외에도 여러 특징이 있다. 새로운 것에 빨리 적응하는 것 새로운 기술이 나오거나, 새로운 환경이 등장 했을 때 이를 적극적으로 학습하고 적응하는 특징을 .. 2022. 4. 10.
[우아한Tech - 우아한테코톡] Event Loop 이벤트 루프는 Nginx, NodeJS, Netty, V8 Engine 등 많은 곳에서 쓰고 있는 메커니즘이다. 그 개념에 대해서 명확히 알지 못했던 차에 테코톡에서 좋은 영상을 찾아서 보고 간단히 정리해보려 한다. function process() { console.log("start"); setTimeout(()=>{ console.log("jordy"); }, 0); console.log("end"); } process(); 위 영상을 정확히 이해했는지 여부는 위 소스코드가 실행 됐을 때, 콘솔에 찍히는 순서를 맞출 수 있는지 여부로 확인할 수 있다. 결론적으로 start - end - jordy 의 순서로 출력된다. 왜 그런 것일까? 우선 브라우저의 구조를 이해한다면 더 이해가 쉽다. 다음 사진과.. 2022. 3. 28.
[우아콘2020] 배달의민족 MSA 여행기 [우아콘2020] 배달의민족 MSA 여행기 우아콘2020 때 김영한 님이 발표한 배달의민족 마이크로서비스 여행기를 보고 정리해보았다. 방문자 분들은 나의 블로그 글보단 영상을 보고 직접 정리해보는게 더 좋을것 같긴 한다. 최초에는.. MSSQL DB와 PHP, 프로시저가 범벅이된 서비스. 온프리미스로 구성되어 있어서 일부 서비스에 장애가 나도 다른 곳에도 그것이 전파가 된다. 자바 언어는 유스케이스가 많고 고스펙의 개발자를 수급하기가 쉬움. 2016년, 치킨 디도스 AWS이관이 불가한 결제를 제외하고는 치킨 이벤트에 필요한 프론트 서버와 주문 서버를 AWS로 옮기고 스케일링을 통해 많은 부하를 대응. 그림에 나오는 외부 PG는 타기업의 결제 서비스로 배달의 민족에서 부하를 모두 받아내고 이 요청을 다시 .. 2022. 3. 28.
[최범균 Youtube] 마이크로서비스 6개 핵심 개념 마이크로서비스 6개 핵심 개념 독립적 배포 크기 비즈니스 도메인을 중심으로 모델링 유연함 자신의 상태를 가짐 아키텍처와 조직을 맞춤 첫번째, 독립적 배포 저자의 의견에 따르면 6가지 중 하나만 골라야 한다면 독릭접 배포를 선택한다고 한다. 또한, 다른 마이크로서비스를 배포하지 않고, 마이크로서비스를 변경, 배포, 출시할 수 있다고 한다. 이를 위해서는 마이크로서비스 간 결합도를 낮춰야 하며, 서비스 간에 명시적이고 잘 정의되고 안정된 명세 계약이 필요하다고 한다. 두번째, 비즈니스 도메인을 중심으로 모델링 도메인 기준으로 서비스 경계를 정의한다. 즉, 한 마이크로서비스가 기능에 필요한 전체를 구현하며, 이를 통해 새 기능 출시가 쉬워진다. 또한 다른 방식으로 마이크로서비스를 재조합하기 쉬워진다. 한 기능.. 2022. 3. 27.
[우아콘2021] 도메인 원정대 [우아콘2021] 도메인 원정대 여는 글 우아콘2021에서 박재성님이 발표하신 도메인 원정대를 정독해 보았다. 이전에는 다소 모호하고 명확히 이해하지 못했던 도메인 주도 설계와 관련된 주요 개념들에 대해 제대로 이해하게 되는 계기가 된 것 같다. 전체적으로 주요 강연 내용을 담되, 강연자이신 박재성님께 질문 드린 내용과 개인적으로 관련해서 공부하며 알게된 사실을 담아보았다. 이 글의 출처인 도메인 원정대 영상 무엇이 문제인가? 물류 센터 관리자는 재고가 없을 때 품목을 주문할 수 있도록 재고 보고서를 인쇄할 수 있어야 한다. 위 글을 보면 단번에 재고 보고서 인쇄 기능을 구현하기 위해 poi 라이브러리를 공부하려 할지도 모르겠다. 하지만, 위 문제는 재고가 없을 때 자동으로 주문이 되도록 하는 것이 옳은.. 2022. 3. 24.