전체 글(224)
-
Spring Bean의 개념과 생명주기, 그리고 메모리 효율성
Spring Bean이란 Spring IoC(Inversion of Control) 컨테이너가 관리하는 자바 객체를 의미한다.일반적인 자바 프로그래밍에서는 개발자가 new 키워드를 사용하여 직접 객체를 생성하고 관리해야 했으나, Spring 프레임워크에서는 이 역할을 프레임워크에게 넘기게 된다. 이렇게 컨테이너에 의해 생성되고 관리되는 객체가 바로 Bean이다.1. 주요 특징Spring Bean은 단순한 객체 이상의 의미를 가지며 다음과 같은 핵심적인 특징을 지닌다.IoC (제어의 역전): 객체의 생성, 생명주기 관리, 의존성 설정(DI)을 개발자가 직접 하지 않고 프레임워크가 대신 담당한다.POJO (Plain Old Java Object): 특정 클래스를 상속받거나 복잡한 인터페이스를 구현할 필요 없..
2025.12.18 -
분산 트랜잭션
면접에서 분산 트랜잭션과 2PC에 대해 답해야 하는 상황이 있었다. 당시에는 대략적으로 알고 있는 개념들을 이야기하며 넘길 수 있었지만, 제대로 학습할 겸 내용을 정리하고자 한다.마이크로 서비스 아키텍쳐(MSA), 분산 데이터베이스 환경이 보편화되면서, 여러 시스템에 걸쳐 무결성을 보장하는 것은 매우 중요한 부분이 되었다. 이러한 무결성을 보장하는 분산 트랜잭션과 이를 구현하는 대표적인 2PC, Saga 패턴, 그리고 이벤트 기반 트랜잭션에 대한 개념을 찾아보았다.1. 분산 트랜잭션(Distributed Transaction)물리적으로 서로 다른 네트워크, 컴퓨터(노드)에 분산된 데이터베이스들 사이에서 하나의 작업 단위(트랜잭션)를 처리하는 것을 말한다.목표는 단일 DB에서는 DBMS가 알아서 보장하던 ..
2025.12.17 -
[Java] Lambda Expression
1. 익명 내부 클래스자바는 객체 지향 언어이기에 코드 작성 도중 인터페이스(IF)를 즉석에서 구현해서 쓰고 싶어도 억지로 클래스 껍데기를 만들어서 써야 했음. 이게 바로 익명 내부 클래스임.자바는 함수 단독으로 존재할 수 없는 언어이기에, 모든 함수는 반드시 클래스 안에 있는 메서드여야만 했음// Runnable: "실행할 수 있는 기능"을 가진 인터페이스Thread t = new Thread(new Runnable() { @Override public void run() { System.out.println("이 코드 한 줄 실행하려고..."); } });시스템에서 System.out.println(”..”)을 실행하기 위해 인터페이스를 구현한 이름 없는 클..
2025.12.13 -
클린코드
개발을 진행하다 보면, 그리고 면접을 진행하다 보면 협업을 위해 클린코드 개념을 물어보는 경우가 종종 있었다. 이때 손 코딩을 통해 클린 코드로 잘못된 부분을 찾는 경우도 존재했기에 이러한 상황을 대비해서 다시 한번 클린 코드에 대해 정리하고자 한다. 클린코드란?소프트웨어 개발 분야에서 매우 중요하게 다뤄지는 개념이며 목적은 아래와 같다.이해하기 쉽고, 수정하기 쉬운 코드컴퓨터가 이해할 수 있는 코드를 짜는 것은 누구나 할 수 있지만, 사람(동료 개발자 혹은 미래의 나)이 이해할 수 있는 코드를 짜는 것이 바로 클린 코드의 핵심이다.개발을 하다 보면 코드를 작성하는 시간보다 코드를 읽고 파악하는 시간이 압도적으로 많다. 그렇기에 클린코드는 이러한 읽는 시간을 단축하는데 도움이 되는 지침서의 역할이다.가독..
2025.12.13 -
자바 심화 및 자료구조
자바 문법을 배울 때 우리는 단순히 "이렇게 쓰면 된다"라고 넘어가곤 한다. 하지만 실제 운영 환경에서 HashMap의 데이터가 조회되지 않거나, 문자열 연산 때문에 성능이 저하되는 경험을 하고 나면 "도대체 내부에서 무슨 일이 일어나는가?"에 대한 의문이 생긴다.이번 글에서는 자바의 Object 클래스부터 컬렉션 프레임워크까지, 코드 이면에 숨겨진 메모리 동작과 원리를 파헤쳐 보려고 한다.1. Object 클래스: equals와 hashCode의 불편한 진실모든 자바 클래스의 조상은 java.lang.Object이다. 즉 모든 객체는 Object가 가진 기능을 사용할 수 있다.equals()기본 동작 : == 연산자와 동일하게 주소값을 비교한다오버라이딩 이유 : 객체의 주소가 달라도 내용물(필드값)이 ..
2025.12.11 -
자바 메모리 구조와 OOP: 설계도에서 실체까지
자바를 이용해 공부를 하면서 기존에는 단순히 문법(Syntax) 위주로 코드를 작성했다면, 이제는 클래스와 객체가 메모리상에서 실제로 어떻게 움직이는지 연결해 보려고 한다. 자바 프로그램이 실행될 때의 메모리 영역(Method Area, Heap, Stack)을 비교하고 학습해 보았다.1. 클래스와 객체: 설계도와 제품의 관계우리가 자바 코드를 짤 때 가장 먼저 마주하는 것은 Class와 new 키워드다. 이 둘의 관계를 build.gradle의 의존성 추가하듯 살펴보자. 코드상의 정의 (설계도)// 1. 설계도 (Method Area에 저장됨)public class Car { String color; void drive() { ... }} 실행 시점의 정의 (실제품)public void ..
2025.12.10