반응형

Spring 29

[DDD] Value Object의 동일성과 동등성 완벽 이해하기alue 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

[스프링부트] 멀티인증 AuthenticationManager + Stackoverflow feat. UserDetailsService 무한재귀오류 해결

나는 REST-API용 로그인을 구축해놓은 상태에서 어드민 페이지를 추가로 만들어야 하는 상황이였다.보통 admin과 rest-api용 서버는 따로 나누지만 나같은경우 서버비용 절약 및 규모가 작은 프로젝트였기에 한곳에서 진행하려 하였다.문제는 스프링부트에서 jwt+security로 rest-api용 (회원로그인) 기능을 구현해 놓은 상태에서 추가로 form-login 어드민을 시큐리티로 기능을 같이 넣어야 되는 상황이 온것이다. 그렇기에 userDetailsService를 2개를 구축해야 하는 상황이였다. ( userDetailsService를 구체화하여 로그인을 커스텀함) 어드민로그인같은경우 admin테이블에서 조회를 해야했으며 일반 로그인은 user테이블에서 조회를했어야했다. 에초에 작용해야하는 m..

Spring 2024.08.07

[swagger Failed to fetch 오류] 운영서버 URL scheme must be "http" or "https" for CORS request

회사에서 spring boot와 open-api swagger를 사용하고 있다.이번에 새로운 프로젝트에 1.6.8 버전의 open-api를 추가했는데 api 실행 시 아래와 같은 오류가 발생했다.로컬에서는 정상 작동하는데 aws에 올린 서버에서 문제가 되었다. (local - http / aws 서버 - https)Failed to fetch.Possible Reasons:CORSNetwork FailureURL scheme must be "http" or "https" for CORS request.swagger cors 오류확인해보니 요청 URL이 http 다. 내가 실행한서버는 https인데아래를 보면 서버 url과 swagger 요청 url 이 다른걸 확인할 수 있다swagger 요청 url이 h..

Spring 2024.08.05
반응형