문제유레카 서버 설정을 위해 따로 EurekaServerConfig라고 하는 클래스를 만들어 실행했지만, 중복되는 빈객체로 실행이 되지 않았다. 상황@EnableEurekaServer@SpringBootApplicationpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }}강의 예제에는 애플리케이션 클래스 위에 붙여주었지만, 나는 애플리케이션에 덕지덕지 @Enable- 어노테이션을 붙이는 걸 좋아하지는 않아서 따로 ~Config 클래스를 만들어주기로 했다. @SpringBootApplicationpubl..
Spring
상황 개인적으로 하는 프로젝트에서 AOP를 썼었다. Refresh token을 쓰고 있었고, 이를 레디스에 저장하고 있었다. 토큰 속에는 닉네임을 subject 로 가지고 있었다. 문제는 닉네임을 수정하면 리프레쉬 토큰에는 변경이 되지 않아서 로그인이 안 되는 것. 그래서 레디스 속 리프레쉬 토큰을 변경해주어야 했고, 변경된 리프레쉬 토큰을 응답 쿠키에 담아주어야 했다. 또 유저 삭제 시에도 리프레쉬 토큰을 레디스에서 삭제하고, 응답 쿠키도 삭제해야했다. 이를 AOP로 구현한 코드는 아래와 같다. 간략하게 설명하면,@Pointcut 으로 각각 닉네임 수정 시점, 유저 삭제 시점 을 지정해주었고,@Around 로 수정 직후, 삭제 직후에 리프레쉬 토큰 처리를 해주었다. @Slf4j(topic = "..
나는 질문(Question) 1 : N 답변(Answer) 로 구성을 하고, 하나의 질문을 조회할 때는 그 질문에 대한 답변을 가져오기로 했다.근데 가져온 데이터가 중복이 된 것.{ "status": "OK", "code": 0, "message": "정상 처리 되었습니다", "data": [ { "id": 1, "content": "질문01", "views": 7, "createdAt": "2024-06-20T11:59:45", "modifiedAt": "2024-06-24T18:44:59.361887" }, { "id": 1,..
닉네임을 변경하는 API에서, 요청하는 DTO의 검증을 달고 있었다. public record UserUpdateNicknameReq( @NotBlank(message = "닉네임은 빈 값이면 안 됩니다.") @Size(min = 1, max = 35, message = "닉네임은 1자 이상, 35자 이하여야 합니다.") @Pattern(regexp = "^[a-zA-Z0-9가-힣]$", message = "닉네임은 한글 및 숫자와 영어만 가능합니다.") String nickname) {}원래 DTO는 @Pattern(regexp = "^[a-zA-Z0-9가-힣]$ 였는데, 닉넴을 monkey→1 로 바꾸는 건 됐는데, 1→monkey로 바꾸니 변경이 안 됐다. 다른 블로그를 보니 ..
HardDelete 와 SoftDelete 가 있다. HardDelete는 삭제 요청이 오면 DB에서 바로 삭제를 한다. SoftDelete는 삭제 요청이 오면 바로 삭제 처리를 하지 않고, 삭제 플래그를 표시해두어 DB에는 남겨둔다. 많은 SoftDelete 구현 방법이 있지만, 나는 datetime을 nullable로 두어 null이 아닌, 날짜가 기입되면 삭제처리를 한 것으로 두어 삭제 시간을 알 수 있도록 했다. 나중에 배치로 일주일의 간격을 두고 실제로 삭제할 예정이다. @Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseEntity { @Column(name = "..
자바에서 JWT를 다루는 라이브러리 중 JJWT 가 있다.https://github.com/jwtk/jjwt?tab=readme-ov-file#jws-example GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and AndroidJava JWT: JSON Web Token for Java and Android. Contribute to jwtk/jjwt development by creating an account on GitHub.github.com 기존 프로젝트에서 0.11.5 버전을 쓰고 있었는데, 이번에 개인 프로젝트에서 0.12.5 버전으로 올리면서 바뀐 부분을 다뤄보려고 한다. 우선 Key 부분이 SecretKey와 PublicKey 로 나..
package ex.ops;import static org.assertj.core.api.Assertions.assertThat;import java.util.List;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.connection.RedisListCommands...
레디스에서 유일하게 키와 값이 1:1로 매칭되는 string 타입에 대한 몇몇 명령어에 대해서, Spring Data Redis 에서 제공하는 메서드와 이름이 달라서 이에 대해 테스트 코드를 작성해보았다. set, get 은 그대로, set NX 은 setIfAbsent, set XX 은 setIfPresent, incr 은 increment, mset, mget 은 multiSet, multiGet 으로 매칭이 된다. @DisplayName("String 타입 테스트")@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class StringTypeTest { @Autowired private ..