반응형

Spring 31

카프카(Kafka) 기본 개념 정리 – 컨슈머와 리스너는 어떻게 다를까?

목차1. 카프카(kafka)란 무엇인가?2. 초보 개발자가 가장 많이 헷갈리는 질문3. 컨슈머와 리스너의 진짜 역할4. 실제 동작 구조를 하나의 흐름으로 정리해보면5. 헷갈리는 개념들을 한 번 더 정리하면6. 카프카를 처음 도입하는 팀이라면카프카(Kafka) 기본 개념 정리 – 컨슈머와 리스너는 어떻게 다를까?최근에 회사 프로젝트에서 카프카(Kafka)를 도입하면서 가장 많이 부딪힌 부분이 바로 “컨슈머(Consumer)와 리스너(Listener)가 뭐가 다른가?”였다.설계 문서를 보면 둘 다 메시지를 받고 처리하는 것처럼 보이는데, 실제로는 서로 완전히 다른 역할을 담당한다.초보 개발자들이 가장 헷갈려 하는 부분이기도 해서, 처음 접하는 사람 기준으로 정리해본다. 1. 카프카(Kafka)란 무엇인가? ..

Spring 2025.12.05

[Spring Boot] JUnit5 + Mockito 단위 테스트 기초 정리

목차0. 서론1. 단위 테스트에서 우리가 하고 싶은 일2. 아주 쉬운 예제로 시작해 보기3. Mockito 기본 세팅4. @Test, @DisplayName, @Nested – 테스트 구조 잡기5. Mockito 기본 동작 – when/thenReturn, verify, verifyNoInteractions6. 정리: 테스트 코드 작성 흐름7. 마무리 0. 서론@Mock, @InjectMocks, @ExtendWith, @Nested, @DisplayName까지 한 번에요즘 스프링 개발을 하다 보면 “테스트 코드도 같이 작성해 주세요”라는 말을 자주 듣는다.문제는 제대로 배워본 적이 없어서, 처음 테스트 코드를 보면 주술처럼 느껴진다는 점이다. @ExtendWith(MockitoExtension.cla..

Spring 2025.11.27

[DDD] Value Object의 동일성과 동등성 완벽 이해하기 Value Object의 동일성과 동등성 완벽 이해하기

DDD(도메인 주도 설계)에서 Value Object(VO) 는 도메인 모델을 설계할 때 꼭 등장하는 개념입니다.하지만 많은 개발자들이 “VO가 뭐야?” 혹은 “동등성으로 비교한다는 게 무슨 뜻이야?”라는 부분에서 헷갈려하죠.오늘은 이 개념을 실제 코드와 함께 명확히 정리해보겠습니다. Value Object란?Value Object(VO) 는 고유한 ID가 없고,그 값 자체로 동일성을 판단하는 객체입니다.즉, 값이 같다면 다른 객체여도 “같은 것으로 본다”는 의미예요.대표적인 예로는 Money(금액), Address(주소), Email(이메일) 같은 객체가 있습니다. 동일성과 동등성의 차이자바에서는 객체를 비교할 때 두 가지 기준이 있습니다.구분의미자바 비교 방식동일성 (Identity)메모리 상에..

Spring 2025.10.22

[DDD] 자바에서의 참조 공유와 (Value Object, Entity) 정리

들어가며DDD(Domain-Driven Design)를 공부하다 보면 “밸류(Value Object)는 불변 객체여야 한다”는 말을 자주 듣습니다.그런데 막상 자바 코드로 보면 “왜 불변이어야 하지?”, “참조 공유가 왜 문제지?” 같은 의문이 생기죠.이 글에서는자바의 참조 구조(Stack, Heap)참조 공유 문제의 원리불변 객체로 해결하는 이유DDD에서 밸류(Value Object)와 엔티티(Entity)의 차이를 실제 예제 코드와 함께 명확히 정리해보겠습니다. // 금액class Money { private int value; public Money(int value) { if (value 자바의 메모리 구조: Stack과 Heap자바는 데이터를 저장할 때 두 가지 영역을 ..

Spring 2025.10.17

Spring Security 기반 CSRF 공격 실습 및 방어 방법 정리

유튜브 영상도 촬영하였습니다. 아래 영상을 참고하면서 블로그글을 참고해주세요. CSRF (Cross-Site Request Forgery)란? CSRF (Cross-Site Request Forgery) 사이트 간 요청 위조는 웹 애플리케이션의 취약점을 악용하는 공격 방식 중 하나로, 사용자가 의도하지 않은 요청을 수행하게 만드는 공격입니다. CSRF 공격의 목적은 사용자가 웹 애플리케이션에서 인증된 세션을 가지고 있는 상태에서, 공격자가 의도한 행동을 사용자로 하여금 실행하게 하는 것입니다. 이는 사용자가 현재 로그인한 세션을 이용하여 악의적인 요청이 서버에 전달되도록 하여, 사용자의 의도와 무관하게 데이터 변경, 거래 발생 등의 작업이 수행되게 만듭니다. CSRF(Cross-Site Requ..

Spring 2025.05.04

[QueryDSL 오류]Springboot 3.0이상에서 QueryDslConfig Cannot resolve constructor 'JPAQueryFactory(EntityManager)'

발생 상황Springboot 3.0 에서 QueryDSL을 위해 build.gradle과 queryDsl configuration을 다음과 같이 설정했을 때 `JPAQueryFactory` 생성자를 찾을 수 없는 에러가 발생합니다.dependencies { implementation "com.querydsl:querydsl-jpa:5.0.0" annotationProcessor( "javax.persistence:javax.persistence-api", "javax.annotation:javax.annotation-api", "com.querydsl:querydsl-apt:5.0.0:jpa" )}import com.querydsl...

Spring 2025.02.21

[JPA] queryDSL 구조를 알아보자. (repository, repositoryCustom, repositoryImpl)

jpa 공식 같은 repository, repositoryCustom, repositoryImpl 구조repository, repositoryCustom, repositoryImpl 구조 해당 포스팅에서는 하나의 Repository를 통해 JpaRepository의 기능과 Querydsl의 기능을 사용하는 CustomRepository를 모두 사용할 수 있는, 일종의 공식처럼 쓰이는 'repository, repositoryCustom, repositoryImpl 구조'에 대해서 살펴보겠습니다. repository 상속 구조repository 상속 구조해당 구조를 코드로 보면 아래와 같은데요.크게 JpaRepository를 extends 하는 Repository 인터페이스에 CustomRepository..

Spring 2025.02.21

[JPA] 현업에서 복잡한 쿼리를 사용할때 JPQL,Native Query,MyBatis,QueryDSL 무엇을 써야할까?

1. JPA + JPQL 사용 (현재 코드 방식)장점JPA의 객체 매핑을 그대로 활용 가능 → 유지보수가 쉬움.JPQL이므로 DBMS 독립적 → 다른 DB로 변경 시 대응이 쉬움.DTO 변환을 자동으로 해줌 (new DTO()).단점복잡한 SQL을 JPQL로 작성하기 어려움 → 특히, CASE, GROUP BY, SUM(), UNION, JOIN이 많을 때 불편.특정 DB 함수 (DATE_FORMAT, IFNULL) 등은 JPQL에서 지원이 제한적.언제 쓰면 좋을까?복잡한 SQL이 필요 없고, 유지보수성과 JPA의 장점을 활용하고 싶을 때. 2. Native Query 사용 (JPQL 대신)장점SQL 최적화 가능 → 실행 계획 튜닝, INDEX 최적화, DBMS별 최적 SQL 작성 가능.복잡한 JOIN,..

Spring 2025.02.21

[스프링] 다형성 SOLID , DI, IoC 란? - 스프링 프레임워크 강의 1강

▶ 다형성이란? 자바에서 **다형성(Polymorphism)**은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 하나의 객체가 여러 가지 형태를 가질 수 있는 능력을 의미합니다. 다형성은 코드의 재사용성과 유연성을 높이는 데 기여하며, 크게 두 가지로 구분됩니다: **컴파일 시간 다형성(Compile-time Polymorphism)**과 런타임 다형성(Runtime Polymorphism). 각각의 의미와 예시는 다음과 같습니다.1. 컴파일 시간 다형성 (Compile-time Polymorphism)이 유형의 다형성은 **오버로딩(Overloading)**을 통해 구현됩니다. 동일한 메서드 이름을 사용하되, 매개변수의 타입이나 개수를 다르게 정의함으로써 다형성을 실현합니다. 컴파일 시점에 어떤 메서..

Spring 2024.10.08

[스프링부트] WebConfig사용안하고 파일다운로드 API로 변경하였더니 계속 200 OK나오는 현상 (304가 왜 안나오는것일까?)

나는 기존에 webConfig에서 설정하여 정적 리소스를 직접 가져오게 하였다가 S3 스토리지(NCP Object 스토리지로) 변경작업을 해야했기에 파일 다운로드형식의 api로 변경하였음. 변경한 소스는 아래와 같다.  // ETag와 Last-Modified 값 가져오기String eTag = s3Object.getObjectMetadata().getETag();long lastModified = s3Object.getObjectMetadata().getLastModified().getTime();return ResponseEntity.ok() .contentType(MediaType.APPLICATION_OCTET_STREAM) .header(HttpHeaders.CONTEN..

Spring 2024.08.22
반응형