Language & Framework35 AI 시대, 더욱 중요해진 클린 코드 - 백기선의 리팩토링 강의 후기 8년차 백엔드 엔지니어로서 AI 시대를 맞이하며 느끼는 것이 있다. 많은 개발자들이 "이제 AI가 코드를 다 짜주니까 코드 품질은 중요하지 않다"고 생각하는데, 오히려 반대다. AI도 결국 사람과 같이 사고하고, 좋은 이름과 명확한 구조가 있어야 맥락 파악이 쉽기 때문이다.그런 차에 백기선님의 리팩토링 강의를 듣게 되었는데, 정말 시의적절한 강의였다.왜 지금 리팩토링이 더 중요한가?네이버, 아마존, 마이크로소프트를 거친 백기선님의 실무 경험이 고스란히 녹아있는 이 강의에서 가장 인상 깊었던 부분은, 리팩토링이 단순히 코드를 예쁘게 만드는 게 아니라는 점이었다.예를 들어, 강의에서 나온 이런 메시지 체인을 보자:this.member.getCredit().getLevel().getDescription()이런.. 2025. 8. 18. GC 알고리즘별 Minor GC와 Survivor 영역의 동작 비교 정리 이 문서는 G1GC의 Minor GC 동작 원리, Survivor 영역의 역할, 그리고 다른 GC 알고리즘에서의 Survivor 처리 방식을 비교하며 정리한 내용입니다. 각 GC 방식의 힙 구조, GC 트리거 조건, STW 여부 등을 상세히 설명하고, 어떤 상황에서 Survivor가 사용되는지를 중심으로 핵심 내용을 요약합니다.1. G1GC의 Minor GC힙 구조G1GC는 힙을 Region 단위로 나눔Young Generation은 여러 개의 Eden + Survivor Region으로 구성됨Minor GC 트리거Eden 영역이 가득 차면 Minor GC 발생Survivor가 가득 차는 건 트리거 요인은 아님 (대신 promotion failure 발생 가능)Minor GC 시 동작Eden에 있는 살아.. 2025. 5. 17. 객체 Churn(Object Churn)이란? 객체 Churn(Object Churn)이란?객체 churn은 JVM 메모리 영역에서 객체가 빠르게 생성되고 빠르게 소멸하는 활동을 의미합니다. 쉽게 말해, 단명 객체(short-lived objects)가 빈번히 생성되고 가비지 컬렉션 대상이 되는 상황을 말합니다. 예시for (int i = 0; i 이런 패턴에서는 엄청난 수의 객체가 Young Generation에서 짧은 시간에 생성되고 사라지며, 이로 인해 GC가 자주 발생합니다.객체 Churn이 높은 애플리케이션 예REST API 서버에서 요청마다 새로운 DTO, Map, JSON 객체 생성고속 로그 수집 시스템Kafka 메시지 처리, 실시간 스트림 처리Web framework에서 request/response 객체 반복 생성왜 중요할까?객체 c.. 2025. 5. 17. Java GC의 역사와 진화: STW에서 동시 수집으로 1. 자바 GC의 발전 흐름Java의 GC(Garbage Collection)는 프로그램 내에서 사용되지 않는 객체를 자동으로 정리해주는 메모리 관리 메커니즘이다. 초기 GC는 단순하지만 응답 지연이 길었고, 이후 다양한 GC 알고리즘들이 등장하면서 처리량(Throughput), 지연시간(Latency), 오버헤드(Overhead)의 균형을 지향하게 되었다.발전 흐름 요약Java의 GC는 초창기부터 Young / Old 세대를 구분하는 Generational GC 구조를 갖고 있었으며, Serial GC와 Parallel GC에서도 이 구조는 동일하게 적용되었다. 이후 응답 지연(latency)을 줄이기 위한 병행 수집(concurrent collection) 전략이 CMS부터 도입되었고, G1에서는 r.. 2025. 5. 17. 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. Dependency Injection 의존성 주입 학부 시절을 시작으로 Spring Framework을 정말 긴 시간을 써왔고, 기본적인 이해는 있다고 생각해왔다. 그런데 우연한 계기로 DI에 대해서 질문을 받았는데, 스프링의 IOC 컨테이너에 대해 설명하고 있는 내 자신을 발견했다. 간단히 다른 하나의 객체가 다른 객체에 의존성을 제공한다의 정도로 이해하는 것이 아니라. 명확한 정의와 의존성을 주입 해주는 이유, 그리고 이를 통해 얻을 수 있는 것과 잃을 수 있는것, 마지막으로 구현 방법에 대해 체계적으로 정리하는 시간을 가지려 한다. 의존성 주입, 제대로 알아보자! 의존성이란? 의존성 주입에 대해 공부하기 앞서 의존성에 대해 이해할 필요가 있다. 의존성은 결합도(coupling)와 관련성이 높은데, 그 이유가 의존성이 높으면 결합도가 높다고 표현하기.. 2021. 10. 22. Spring Cloud API Gateway를 활용한 따닥 방지 보호되어 있는 글 입니다. 2021. 10. 20. 이전 1 2 3 4 다음