전체 글(229)
-
스프링에서 받을 데이터는 '명시적'이어야 한다.
🎯 백엔드에서는 받을 정보에 대한 '명시'가 반드시 필요하다.핵심 원리Spring은 "있는 것만" 받아준다.// 이것만 받겠다고 명시public class OrderItemRequestDto { private Long productId; // ← 이것만 받음 private int quantity; // ← 이것만 받음}// 클라이언트가 더 많이 보내도...{ "productId": 1, // ✅ 받음 (명시됨) "quantity": 2, // ✅ 받음 (명시됨) "color": "red", // ❌ 무시됨 (명시 안됨) "discount": 1000 // ❌ 무시됨 (명시 안됨)}일종의 허가된 데이터의 형식이라고 볼 수도 있는데 명..
2025.06.13 -
스프링 빈의 종류 : 스코프
스프링에서 빈의 종류는 스코프(Scope)로 결정된다. 빈의 스코프는 "하나의 빈(객체)이 언제 생성되어 어디까지 공유되고, 언제 사라지는가"를 정의하는 규칙이다. 크게 두 그룹으로 나눌 수 있다.핵심 스코프웹 환경 전용 스코프핵심 스코프 (Core Scopes)웹 환경이 아니어도 스프링을 사용하는 곳이라면 어디서든 사용할 수 있는 기본적인 스코프다.싱글톤 (Singleton)설명: 스프링 컨테이너(IoC Container) 안에서 단 하나의 인스턴스만 생성되어 애플리케이션 전반에 걸쳐 공유된다.특징: 기본값(Default)으로 설정된 스코프다. 별도로 스코프를 지정하지 않으면 모든 빈은 싱글톤으로 만들어진다. 메모리 효율이 좋고 상태를 공유하지 않는(Stateless) 서비스나 DAO(Data Acce..
2025.06.10 -
인스턴스 생명 주기와 애너테이션 : 한눈에 보기 - 콜백
인스턴스(빈)의 생명 주기에 따라 어떤 애너테이션을 사용하는가?초기화 시점 (객체 생성 및 준비 완료 후): @PostConstruct소멸 시점 (객체 사라지기 직전): @PreDestroy이 두 가지가 인스턴스의 '탄생'과 '죽음' 시점에 직접 관여하는 핵심 애노테이션이다.📜 1단계 : "이 클래스를 스프링이 관리해줘!" - 빈 등록가장 먼저 스프링에게 "이 클래스는 평범한 클래스가 아니야. 네가 직접 관리하고 책임져야 할 소중한 '빈(Bean)'이야!"라고 알려줘야 한다.주요 애너테이션@Component: 가장 기본적인 빈 등록 애노테이션.@Service: 비즈니스 로직을 담당하는 서비스 계층에 사용. (@Component 포함)@Repository: 데이터 접근(DB 등)을 담당하는 영속 계층에 ..
2025.06.09 -
스프링 프레임워크의 동작 방식
메서드 호출 방식의 차이 (자바 vs 스프링)질문 : 순수 자바의 instance.method()와 스프링의 메서드 호출은 어떻게 다른가?정리 : 메서드를 호출하는 코드(instance.method()) 자체는 동일하다. 근본적인 차이는 인스턴스를 누가 만들고 관리하느냐에 있다. 자바는 개발자가 직접 new로 만들지만, 스프링은 프레임워크가 대신 만들어 주입(Inject)해준다.주입의 본질 (IoC/DI)질문 : new를 안 쓰는 게 핵심 차이인가?정리: 그렇다. 개발자가 객체를 직접 생성하고 제어하는 대신, 그 제어권을 스프링 프레임워크에게 넘기는 것, 이것이 바로 제어의 역전(IoC: Inversion of Control)이다. 그리고 필요한 객체를 외부(스프링 컨테이너)에서 넣어주는 행위가 의존성 ..
2025.06.09 -
CSS 네임스페이스와 BEM 방법론
CSS 네임스페이스(Namespace)와 BEM(Block, Element, Modifier) 방법론은 복잡한 웹 프로젝트에서 CSS의 유지보수성(maintainability)과 확장성(scalability)을 높이고 스타일 충돌을 방지하기 위해 사용되는 중요한 전략들이다.CSS 네임스페이스 (CSS Namespacing) ✨CSS 네임스페이스는 CSS 규칙 간의 이름 충돌(naming collision)을 피하기 위한 전략이다. 특히 여러 개발자가 협업하거나, 외부 라이브러리/위젯 코드를 프로젝트에 통합할 때 발생할 수 있는 전역적인 스타일 오염 문제를 방지하는 데 중점을 둔다.🎯 목적스타일 충돌 방지 : 전역 스코프(global scope)에서 발생하는 CSS 클래스 이름, ID 이름 충돌을 최소화..
2025.06.06 -
보안 정책 : SOP와 CORS
우리가 웹 서핑을 하다 보면 무조건 신뢰할 수 있는 사이트만 들어가는 것은 아니다. 잘 알려진 사이트 말고 한 번도 들어본 적 없는 사이트에 들어갈 수도 있고, 보이스피싱 용도로 URL만 비슷하게 만든 사이트에 접근하게 될 수도 있다.그런데 만약에 내가 구글에 로그인한 상태에서 피싱 사이트에 들어갔는데 해당 사이트에서 내 구글 로그인 정보에 마음대로 접근할 수 있다면 나의 개인정보가 유출되어 막대한 피해를 일으킬 수도 있다. 때문에 브라우저에서는 기본적으로 SOP라는 보안 정책을 사용한다. 그렇다면 SOP란 무엇인가?동일 출처 정책(Same-Origin Policy)동일 출처 정책이란 특정 출처(출처 A : 구글)에서 로드된 문서나 스크립트가 다른 출처(출처 B : 티스토리)의 리소스와 상호작용하는 것을..
2025.06.05 -
[3편] 좋은 DI 설계: 스프링의 빈 탐색 원리와 OCP
의존성 주입 동작 원리 : 스프링은 어떻게 빈(Bean)을 찾는가?객체와 타입 : Java에서는 클래스(Class)가 곧 타입(Type)이다. public class ItemRepository는 ItemRepository라는 새로운 타입을 정의하는 것이다.주입 대상 : DI는 클래스 내부의 특정 요소가 아닌, 클래스 설계도로 만들어진 객체(Object) 전체를 주입한다. 주입된 객체의 public 메서드를 통해 내부 기능에 접근한다.주입 원칙: 스프링은 기본적으로 타입(Type)을 보고 주입할 Bean을 찾는다.만약 해당 타입의 Bean이 여러 개라면(DiscountPolicy 예시), @Primary 어노테이션이 붙은 Bean을 우선적으로 선택하거나, @Qualifier를 통해 특정 이름의 Bean을 ..
2025.06.03 -
[2편] 스프링 DI의 3가지 방식 : 생성자 주입을 써야만 하는 이유
의존성 주입의 3가지 방식과 권장 사항그렇다면 실제로 스프링에는 의존성 주입을 어떻게 할까? 크게 3가지 주입 방식이 있다.주입 방식특징권장 여부생성자 주입객체 생성 시점에 모든 의존성을 주입. final 키워드 사용 가능, 불변성 보장.*️⃣ 강력 권장 (표준)수정자(Setter) 주입Setter 메서드를 통해 주입. 선택적인 의존성이나 변경 가능성이 있을 때 사용.△ 제한적 사용필드 주입필드에 @Autowired를 직접 선언. 코드가 간결하지만 테스트가 어렵고 여러 단점이 있음.❌ 비권장의존성 주입을 위한 전제조건 : @Autowired와 스프링 빈위에서 의존성 주입의 3가지 방식을 살펴봤는데, 실제로 이것이 동작하려면 두 가지 핵심 전제조건이 필요하다.스프링 빈(Bean) 등록: "부품 상자에 부품..
2025.06.03 -
[1편] 의존성 주입(DI)과 제어의 역전(IoC), 왜 필요할까?
의존성 주입이란 무엇인가?의존성 주입(Dependency Injection, DI)이란 객체가 사용할 다른 객체(의존성)를 직접 만들지 않고, 외부(스프링 IoC 컨테이너)에서 주입받는 디자인 패턴이다. 디자인 패턴이라고 말했지만 사용자가 직접 구현해야하는 것이 아니라 스프링이라는 프레임워크가 기본적으로 채택하여 자동으로 적용되는 사항 중 하나다. 마치 자바라는 언어가 객체 지향의 패러다임을 사용하고 자바스크립트는 함수형 패러다임을 사용하듯 스프링이라는 프레임워크 자체에 적용되는 일종의 문법적 요소라고 볼 수 있다.목적 : 객체 간의 결합도(Coupling)를 낮추고, 각 객체가 자기 책임에만 집중하도록 응집도(Cohesion)를 높이기 위해 사용한다. 이를 통해 유연하고, 확장 가능하며, 테스트하기 쉬..
2025.06.02 -
데이터베이스 분리 및 확장 전략 총정리
데이터베이스를 분리하고 분산하는 궁극적인 목표는 성능, 확장성, 가용성, 그리고 관리 용이성을 확보하여 대규모 서비스를 안정적으로 운영하는 것이다.수직 확장 (Vertical Scaling / Scale Up)개념: 기존에 사용하던 단일 DB 서버의 CPU, RAM, 저장 공간(SSD) 등 하드웨어 자원을 단순히 늘리는 것. 더 좋은 성능의 서버로 교체하는 것과 같다.분리 여부: 데이터베이스 자체를 '분리'하는 것은 아니다.주된 목적: 가장 쉽고 빠르게 단일 서버의 성능을 향상시킨다.장점: 구현이 간단한다.단점: 물리적인 한계가 명확하며, 비용이 기하급수적으로 증가하고, 단일 장애 지점(SPOF)이 될 수 있다.복제 (Replication / Read Replicas)개념: 마스터(Master) DB 서..
2025.06.02