1. 올바른 자바/코틀린(Java/Kotlin) 애플리케이션 JVM 메모리 설정 가이드 [ 최소/최대 힙의 크기 ]개발한 애플리케이션을 배포할 때면 여러 가지 설정 및 옵션들을 제공해주어야 하는데, 대표적인 값이 바로 메모리 할당에 대한 부분이다. 자바에서 모든 객체는 힙 영역에 할당되며, 핵심은 힙 메모리의 크기이다. 힙 메모리의 크기를 너무 작게 잡으면 객체를 힙 메모리에 할당할 공간이 부족하여 OutOfMemoryError로 인해 애플리케이션이 비정상적으로 종료되거나 잦은 GC 발생으로 인해 애플리케이션 오버헤드가 증가하여 성능에 문제를 줄 수 있다. 반대로 힙 메모리를 지나치게 크게 잡으면 애프리케이션이 시작할 때 힙 초기화 시간이 길어져 시작 속도가 저하되거나 GC를 수행하는 시간이 길어져 응답..
이전 포스팅에서는 스프링이 제공하는 레디스 직렬화/역직렬화(Redis Serializer/Deserializer)이 갖는 한계점에 대해서 살펴보았다. 일반적인 현대의 애플리케이션에서는 CPU 사용량보다는 메모리 사용량이 높기 때문에, 압축 기능을 통해 CPU를 조금 더 사용하더라도 저장 공간의 사용량을 줄이는 것이 합리적이라고 볼 수 있다. 따라서 이번 포스팅에서는 Gzip 압축 기능이 적용된 레디스 직렬화/역직렬화(Redis Serializer/Deserializer)를 구현하고, 스프링에서의 설정을 고도화 해보도록 하자. 1. 스프링에서 레디스 설정 및 직렬화/역직렬화(Redis Serializer/Deserializer) 고도화하기스프링 프레임워크에서 레디스를 활용할 때, 크게 @Cacheable..
1. 자바 9에 개선 및 최적화된 String 내부 구조 (JEP254: Compact Strings)[ 자바 8까지의 String 클래스의 문제점 ]자바 8까지는 내부적으로 char형 배열을 사용하여 문자열을 다루고 있었다.public final class String implements java.io.Serializable, Comparable, CharSequence { private final char value[]; private int hash; // ...} 하지만 이러한 방식은 메모리 비효율적인 문제가 있었다. 왜냐하면 자바의 Char 타입과 String 타입은 유니코드를 통해 전 세계적으로 일관되게 텍스트 데이터를 표현하고자 그 당시에 주목받던 UTF-1..
0. 서문구글처럼 사업 성공과 구성원의 행복이라는 두 마리 토끼를 잡으려면 기업들은 어떻게 해야 할까?비결은 구성원들이 긍정적인 감정을 갖고 업무 추진을 위한 강력한 동기를 가지며 동료를 우호적으로 인식하는 환경, 즉 직장생활의 내면상태(inner work life)를 만족스럽게 유지할 수 있는 환경을 만들었기 때문이다.바람직한 직장생활의 내면상태를 유지하기 위해서는 우선 구글의 사명인 “전 세계의 정보를 조직화시켜 누구나 유용하게 사용할 수 있게 하자”처럼 의미 있는 목적이 있어야만 한다. 구성원이 일상적인 업무 추진 과정에서 실질적으로 진척을 보일 수 있도록 분명한 목표를 제시하고, 자율성을 보장하며, 필요한 자원을 제공해야 한다. 구성원이 경험하는 직장생활의 내면상태는 각자가 낸 아이디어가 존중받는..
매 년 회고 포스팅을 작성할때면 연말이 되었음을 실감하곤 합니다. 2024년은 다양한 경험들을 바탕으로 인간적인 성숙함을 많이 기를 수 있었던 한 해 였던 것 같습니다. 올 한 해를 돌이켜보면서 2025년 역시 어떻게 헤쳐나갈지 고민해보도록 하겠습니다. 1. 2024년 회고[ 2024년의 학습과 자기개발 ]2024년에는 다음과 같은 학습을 진행했다.1월: 자바 웹 프로그래밍 next step & 김영한의 실전 자바 기본편 & 책은 도끼다2월: 코틀린 쿡북 & 백명석의 클린 코더스 & 행복의 기원3월: 코틀린 인 액션4월: 이펙티브 코틀린5월: 구글 엔지니어는 이렇게 일한다 & 1만 시간의 재발견6월: 좋은 코드, 나쁜 코드 & 조영호님 DDD의 사실과 오해7월: 오브젝트8월: 프로그래머, 열정을 말하다..