분류 전체보기 65

Heap Pollution

Java에서 제네릭은 컴파일 시점에 타입 안정성을 보장하여 런타임 오류를 줄이는 도구이다.그렇지만, 잘못된 제네릭 사용은 Heap Pollution 문제를 일으킬 수 있다.Heap Pollution이란?컴파일 타임에는 문제가 없어 보이지만, 런타임 시점에서 타입 안정성이 무너져 예상치 못한 타입이 힙에 저장되는 현상을 의미한다.특히 컴파일러가 타입 오류를 검출하지 못하기 때문에, 디버깅이 어려운 버그로 이어질 수 있다. 주로 다음의 경우에 문제가 발생한다.raw type 사용 - 제네릭 타입을 명시하지 않고 원시 타입을 사용하는 경우가변인자와 제네릭의 조합 - 제네릭 타입의 가변인자를 사용하는 경우Raw Type으로 인한 Heap Pollution현재 list 변수의 타입을 지정할 때, List의 타입을..

Java 2025.07.15

JVM의 내부 구조와 메모리 구조에 대해

Java 코드가 실행 되는 과정Java 코드는 일반적으로 IDE를 통해 .java 확장자의 파일로 작성된다.그러나 JVM은 이 파일을 직접 실행하지 않고, 먼저 컴파일 과정을 거쳐 .class 확장자의 바이트코드(Bytecode) 파일로 변환한다.이 바이트코드는 JVM이 이해할 수 있는 중간 코드로, 플랫폼에 독립적으로 실행될 수 있는 장점이 있다.예를 들어 Person.java 파일이 있다면, 컴파일을 거쳐 Person.class라는 바이트코드 파일이 생성되고, 이는 JVM 위에서 실행된다.JVM의 내부 구조JVM은 크게 세가지 영역으로 구분할 수 있다.클래스 로더실행 엔진런타임 데이터 영역이 외에도 바이트 코드 검증기, Java 네이티브 인터페이스(JNI), 가비지 컬렉터 등이 내부 구성 요소로 포합..

Java 2025.07.06

언체크 예외는 왜 존재할까?

Java로 개발을 하다보면 다음과 같은 말을 자주 듣게 된다.체크 예외는 호출하는 쪽에서 반드시 처리하거나 throws로 다시던져야 하지만, 언체크 예외는 굳이 처리하지 않아도 된다.그런데 근본적으로 언체크 예외는 왜 존재할까? 체크 예외와 언체크 예외 Java에서의 예외는 크게 두가지로 나뉘며 각 특징은 다음과 같다.예외 종류상속 구조컴파일 타입 검사예시체크 예외Exception필수IOException ..언체크 예외RuntimeException없음NullPointerException .. 왜 RuntimeException은 체크 예외가 아닐까?James Gosling은 예외 설계에 있어 다음과 같은 기준을 제시했다.복구 가능한 예외만 체크 예외로 강제하고, 프로그래머의 실수로 발생하는 예외는 컴파일..

Java 2025.07.01

Primitive Type vs Reference Type

타입의 정의와 분류언어 차원 Primitive Type : byte, short, int, long, float, double, char, booleanReference Type : 모든 클래스, 인터페이스, 배열, enum ... JVM 차원 JVM은 Primitive Type을 명확하게 별도의 명령어 세트로 분리함int의 경우 iadd , istore, iload 등으로 처리되며, 객체 참조는 aload, putfield, invokevirtual 등으로 처리됨Reference Type은 Heap영역의 객체 주소를 조작하는 방식이며, primitive type은 명령어 수준에서 값을 다룸 메모리 모델과 저장 위치 항목Primitive TypeReference Type변수 저장 위치 (지역 변수)Sta..

Java 2025.06.18

Spring Boot 애플리케이션 실행 흐름과 Bean 등록 원리에 대하여

Spring Boot는 간편한 설정과 강력한 자동화 기능 덕분에 많은 개발자들에게 사랑받고 있습니다.하지만 막상 내부 구조를 깊이 들여다보면, 매우 정교하고 세부적인 단계들을 거치고 있음을 알 수 있습니다.이 번 글에서는 SpringBoot가 애플리케이션 실행 시 내부적으로 어떤 흐름으로 동작되는지, 그리고 Bean이 어떤 기준으로 등록되는지에 대해 정리해 보고자 합니다. 이번 글에서 다루는 전체적인 목차는 다음과 같습니다.Spring Boot의 시작점과 전체 흐름ComponentScan의 원리와 범위Bean 후보로 등록되는 주요 애노테이션Bean 등록의 조건과 우선순위AutoConfiguration의 작동 원리Spring Boot 애플리케이션의 시작점대부분의 Spring Boot 애플리케이션은 아래의 ..

Spring 2025.05.24

복잡한 프로젝트, Gradle로 일관되게 관리하는 멀티 모듈 설계법

멀티 모듈은 왜 필요한가?멀티 모듈 프로젝트란, 하나의 큰 프로젝트를 여러 개의 작은 모듈로 나누어 관리하는 방식입니다.멀티 모듈을 택할 경우 다음의 이점을 가져갈 수 있습니다.유지보수성의 향상명확한 의존성 관리코드의 재사용성 증가 이 외에도 다양한 이점이 존재하기에 프로젝트 진행시에 멀티 모듈 프로젝트를 택합니다.이번 글에서는 모듈은 무엇이고, 보다 효율적으로 모듈의 의존성들을 관리하는 방법을 알아보고자 합니다.모듈이란?소프트웨어 개발에서 모듈이란, 독립적인 기능 또는 역할을 수행하는 하나의 논리적 단위를 의미합니다.모듈은 시스템을 구성하는 작은 단위로서, 다음과 같은 특성을 지닙니다.독립성 : 모듈은 독립적으로 개발, 테스트, 배포가 가능합니다.명확한 책임 :각 모듈은 명확한 역할과 책임을 지니기에,..

Gradle 2025.05.05

2024년, 어느 신입 개발자의 회고록

2024년 많은 변화들이 존재했던 한 해였었다.어떤 일들이 있었는지 회고를 하며 돌아보는 시간을 가져보고자 한다. 취업, 그리고 첫 온보딩 개발자가 되고자, 1년 반이라는 시간 동안 공부한 끝에 그동안 원했던 자사 서비스를 운영하고 있는 회사에 취직할 수 있었다.그간 많은 공부를 해왔지만 녹록지 않은 취업시장 현실에 나는 단순히 개발을 취미로만 가져야 하는 직종인가 에 대한 고민이 많았던 찰나에 합격 소식이라 너무 기뻤다.  회사에 취직 후, 속한 부서의 코드, 그리고 노션 문서를 이리저리 찾아보았다.그간 진행한 토이 프로젝트와는 달리 복잡도가 높은 코드들이 많았고, 헥사고날 아키텍처, MSA, 코틀린 언어, 코루틴 등 그간 사용하지 않았던 기술들을 보며 순간 내가 잘 해낼 수 있을 까에 대한 걱정감도 ..

회고 2024.12.31

kafka 성능 개선기 (feat. 배치 리스너)

들어가며 최근 사용자들의 행동 로그를 활용해 추천 서비스 기업에 관련 데이터를 보내는 프로젝트를 진행했었다. 아직 어리둥절한 신입에게 다소 무서웠던 프로젝트였지만, 어찌저찌 잘 해결해나가고 있었다.해당 프로젝트를 진행하며 처음으로 kafka를 활용했었고, 현재 회사 내 다른 프로젝트에서 사용하고 있는 설정법을 보며 똑같이 설정을 했었다.서비스 기업에서 어느날 피드백이 왔었는데, 지금 데이터들이 20시간가량 밀려있다고 해서, 확인을 했었는데, 잘못된 kafka 사용으로 인해 lag가 14,500,000개 정도 쌓여있었다. 이를 해결하기 위해 했던 과정들을 기록하고자 한다. 문제 원인1. consumer와 producer의 차이 현재 회사의 로그 관련한 서비스 구조는 다음과 같다. 기존에 추천 서비스 기업을..

개발일지 2024.09.02

[Git] SubModule에 대해서

들어가기 앞서 최근에 프로젝트에 투입되어 Github에 있는 code를 다운로드하여 확인하는 도중 특정 module 하위에 아무런 코드가 존재하지 않아 컴파일 에러가 나 당황했던 적이 있습니다. 동료에게 물어보고 도움을 받을 때 간단한 코드 두줄만에 해결이 되었습니다. git submodule init git submodule update 그 당시 github에서 제공하는 submodule에 대해 몰랐었고, 이러한 부분들에 대해 정리를 해 보고자 합니다. SubModule이란 무엇인가? git의 공식 홈페이지에는 다음과 같이 정의되어 있습니다. 프로젝트를 수행하다 보면 다른 프로젝트를 함께 사용해야 하는 경우가 종종 있다. 함께 사용할 다른 프로젝트는 외부에서 개발한 라이브러리라던가 내부 여러 프로젝트에..

개발일지 2024.04.16

백엔드 개발자 취업 준비 회고록

들어가기 앞서 2023년 6월부터 12월까지 프로그래머스에서 진행한 클라우드 기반 백엔드 엔지니어링 데브코스 과정을 수료했습니다. 본격적으로 1월부터 3월까지 취업활동을 진행했습니다. 취업 준비를 하며 느꼈던 부분들에 대해 적어보고자 합니다. 무엇을 공부해야 하는가? 취업 준비를 위해 공부해야 하는 분야를 크게 나눠보면 다음과 같다고 생각합니다. 코딩테스트 / 사용하는 언어 및 프레임워크 / Computer Science (팀프로젝트 및 토이 프로젝트 내용은 생략하였습니다.) 코딩테스트 23년 초기에만 하더라도 코딩테스트가 어렵기도 하고 막막했습니다. 그래서 과제 전형 혹은 코딩테스트 전형이 포함되지 않은 채용 프로세스만 지원을 했었는데 다음의 문제들이 존재했습니다. 지원 폭이 되게 좁다 체계가 갖춰진 ..

회고 2024.04.12