'Development' 카테고리의 글 목록 (3 Page)
본문 바로가기

Development

(155)
[Diary][Spring] Spring Data Cassandra에서 @CreatedDate가 안 되는 문제 해결 (Spring Data는 이 데이터가 새 데이터인지 모른다.) Spring Data Cassandra을 사용하면서, @EnableCassandraAuditing를 적용해도 @CreatedDate 필드에 값이 들어가지 않고 null이 저장되는 문제가 발생했습니다. 이 글에서는 문제 상황 및 원인을 분석하고 해결합니다.문제 상황: @EnableCassandraAuditing를 적용해도 null이 들어간다.감사 레코드를 삽입하기 위해 다음과 같이 BaseEntity를 구현했다.이를 Cassandra DB 테이블에 매핑할 클래스에 상속받았다.이후 Auditing을 활성화하기 위해 @EnableCassandraAuditing을 적용했다.또한 @CreatedBy, @LastModifiedBy를 사용하기 위해 getCurrentAuditor를 임시로 구현했다.테스트를 위해 @I..
[TIL] Spring Data Cassandra와 Spring Data JPA의 차이? (NoSQL과 RDBMS의 차이) *chatGPT4o 의 답변입니다.Q. does spring data cassandra has concept of transactional? what's difference in spring data jpa?Spring Data Cassandra는 Spring Data JPA와 같은 방식으로 트랜잭션을 지원하지 않습니다. 두 기술에서 트랜잭션이 다르게 작동하는 이유와 차이점을 설명하겠습니다.1. Spring Data JPA에서의 트랜잭션 지원Spring Data JPA(관계형 데이터베이스를 기반으로 하는)는 @Transactional 애노테이션을 사용하여 트랜잭션을 완전히 지원합니다. 이는 관계형 데이터베이스가 기본적으로 ACID(Atomicity, Consistency, Isolation, Durabi..
[Diary][Spring] Spring에서 Module에 BaseEntity를 추가하면, @EntityListeners(AuditingEntityListener.class)가 잘 되나? 문제 상황createdAt, updatedAt과 같은 감사 로그는 공통적으로 사용되는 필드가 많기 때문에 BaseEntity를 자주 사용한다.그런데 이를 모듈에 추가하고, 메인 프로젝트에서 이 모듈로 추가한 BaseEntitiy를 상속하면 잘 될까?그리고 위와 같이, BaseEntity를 사용하기 위한 엔티티 및 설정을 추가해주었다.처음엔 안 될거라고 생각했다.왜냐하면 우선 Component Scan의 대해 생각해보았다.Component Scan 범위는 @SpringbootApplication 에서 기본적으로 이 어노테이션이 적용된 클래스를 포함한 하위 패키지인데,추가한 모듈은 범위 밖에 있기 때문에 Bean 을 못 찾고, 마찬가지로 JPA Audit 관련 기능도 BaseEntity를 찾지 못하겠지? 란..
[PS] 백준 18870 좌표 압축 java 풀이 18870번: 좌표 압축 (acmicpc.net)초기 문제 접근일단 문제 이해부터가 어려워서 질문 게시판을 찾아보니,그냥 이 배열 중 자기보다 낮은 원소의 개수를 출력하는 것 이었음근데 최대 N이 1,000,000 이니까 이중 for 문 쓰면 무조건 터질 것 같음정렬하고 하나하나 비교하나..?조금 찾아보니 이진 탐색을 사용하면 된다고 나와있음GPT의 문제 접근하지만 단순히 Map 사용으로 문제를 해결할 수 있었음각 순위를 표시할 rank = 0을 선언함정렬한 배열을 첫 번째 인덱스부터 순회함Map 안에 현재 순회하는 값이 없다면 새로 삽입 후 rank++결과적으로 숫자 별로 순위가 Map에 저장이 됨코드import java.io.BufferedReader;import java.io.IOException;..
[Diary][Spring] Spring Cloud Gateway에 인가의 책임을 부여해볼까? 프로젝트를 진행하면서 게이트웨이를 구현하는 역할을 담당하였습니다. 저희 팀은 JWT 인증 및 엔드포인트 별 권한 검증을 게이트웨이에서 구현하기로 결정했습니다.그러다가 제가 생각했던 문제점과 문제 해결을 위해 시도한 방법, 그리고 그 방법의 문제점을 소개하고자 합니다. 문제 상황: Spring Cloud Gateway의 재시동 문제엔드포인트 별 권한 검증을 Gateway에서 하기로 했다. 따라서 Reactive Spring Security를 사용해서 필터 체인에 구현했다.하지만, 각 서비스별 인가 정책이 바뀐다면 이를 반영하기 위해 Gateway의 코드를 수정하고, 재시동해야 하는 문제가 있다. 이러한 문제는 모든 엔드포인트의 라우팅을 담당하는 Gateway에 있어 좋지 않다고 판단했다.이에 무중단으로 정..
[PS] 백준 가장 긴 바이토닉 부분 수열 java 풀이 11054번: 가장 긴 바이토닉 부분 수열 (acmicpc.net)처음 문제 접근DP 같이 생겼다.현재 값이 바이토닉 수열을 만족하면 dp = Math.max(dp[i - 1], dp[i]) + 1그런데 올라갔다가 내려오고, 다시 올라가려 하면 0부터 시작해야 하는데.. 이걸 어떻게..처음 대략 이렇게 코드를 짬 for (int i = 1; i arr[i]) { dp[i] = Math.max(dp[i - 1], dp[i]) + 1; } }문제 정답해결법은 올라갈 때와 내려갈 때를 따로 분리해서 DP 테이블을 만든다.근데 이게 왜 되는건지 몰랐는데, 123421 에서 가장 긴 부분은 1234 = 4이고 감소하는 부분은 421 3 이니까 결과적으로 답은 7 - 1(겹치는 부분인 4를 빼기 위함..
[Diary][Spring] Spring Webflux의 WebFilter는 자동으로 등록됩니다. (Security Filter Chain에 등록하면 발생할 수 있는 문제) 이 글에서는 WebFilter를 구현하면서 겪었던 잘못된 사용에 대해 다루고자 합니다.문제 상황Spring Cloud Gateway에 JWT 인증 필터를 구현하였다.위와 같이 @Value 값을 주입받기 위해, WebFilter를 구현하고 @Component 어노테이션을 붙여서 Bean에 등록했다.그리고 Security FilterChain에 구현한 Filter를 추가했다. 필터 우선순위도 넣어줬다.자연스러운 흐름이겠지만, 이것은 잘못된 사용이다. 왜냐하면, 디버그 모드로 찍어보면 필터를 두 번 검사하게 될 것이다.문제 원인https://docs.spring.io/spring-boot/reference/web/reactive.html#web.reactive.webflux.web-filters 문서를 참고해..
[TIL][Spring] Spring Webflux의 Spring Security (@EnableWebFluxSecurity), ReactiveSecurityContextHolder *GPT4o 가 답변한 문서입니다.Spring WebFlux와 함께 사용하는 Spring Security, @EnableWebFluxSecurity, 그리고 ReactiveSecurityContextHolder는 리액티브(Non-blocking) 환경에서 보안을 처리하기 위한 핵심 구성 요소입니다. 이들 개념을 깊이 이해하려면, Spring MVC에서의 동작 방식과 비교하며 설명하는 것이 중요합니다.1. Spring Security in WebFluxSpring WebFlux에서의 Spring Security는 기존의 Spring MVC와는 달리 논블로킹(non-blocking) 방식으로 동작하는 보안 시스템입니다. WebFlux는 리액티브 스트림과 Publisher(예: Mono, Flux)를 사용하여..