TIL(Today I Learned) 53

TIL - Kotest 테스트 코드 작성하기

테스트 수행 전 다음과 같이 의존성을 추가한다.val kotestVersion = "5.5.5"val mockkVersion = "1.13.8"dependencies { testImplementation("io.kotest:kotest-runner-junit5:$kotestVersion") testImplementation("io.kotest:kotest-assertions-core:$kotestVersion") testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.3") testImplementation("io.mockk:mockk:$mockkVersion")} IntelliJ Plugins에 Kotest도 설..

TIL - 서버에서 보낸 쿠키가 브라우저에 저장되지 않는 문제

서버에서 헤더에 AccessToken과 Refresh Token을 담아 프런트로 응답을 보냈을 때 다음과 같이 Response Headers에 Set-Cookie를 보면 정상적으로 응답에 Cookie가 포함된 것을 볼 수 있다. 하지만 브라우저에는 해당 Cookie들이 저장되지 않는 문제가 있었다.Client와 Server 모두 HTTPS를 적용하면 쿠키가 저장되지 않는 문제를 해결할 수 있다는 글을 보고 HTTPS를 적용했다. HTTPS를 적용하기 위해 mkcert 설치를 위한 Scoop 설치(Windows의 경우)Set-ExecutionPolicy RemoteSigned -scope CurrentUserirm get.scoop.sh | iex 다음 명령어를 입력해 mkcert를 설치한다.scoop b..

TIL - React에서 useState를 사용할 때 호출이 여러 번 발생

React에서 Server로 요청을 보내는데 같은 요청이 여러 번 발생하는 문제가 생겼다.strictmode는 개발 시작 단계에 제거한 상태라 이 문제는 아니었다.  useEffect를 사용해 특정 변수의 값이 변경되면 정해진 코드를 수행하도록 작성했는데 이 부분이 문제였다.  useEffect(() => { console.log("authCode 변경됨"); console.log("tokenState: ", tokenState) // ... setTokenState(true); }); }, [authCode]); useEffect(() => { console.log("tokenState 변경됨") console.log("tokenState: ", tokenSta..

Spring AOP(Aspect-Oriented Programming)

AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)공통적인 기능이나 관심사를 분리하여 모듈화하고, 필요한 시점에 핵심 로직에 삽입하여 실행하는 프로그래밍 패러다임핵심 로직: 핵심 비즈니스 로직부가적인 관점: 핵심 로직을 실행하기 위한 DB 연결(+ @Transaction), 로깅, 보안, 파일 입출력 등시스템 전반에 필요한 기능들을 모듈화 시키고 비즈니스 로직을 가지는 객체와 결합하는 방식Cross-Concern(횡단 관심사): 보안이나 로깅과 같이 시스템 여러 부분에서 필요한 공통적인 기능AOP는 횡단 관심사를 분리하고, 이를 결합하는 기능이 필요한데 스프링은 이러한 기능을 프레임워크에서 지원Spring AOP는 Proxy객체를 생성(Proxy 기반으로 AOP를 쓸 수 있..

TIL - React, Spring Boot로 카카오 소셜 로그인 구현 STEP 3

STEP 3 사용자 로그인 처리https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#req-user-infoReactSTEP 2에서 발급받은 토큰을 서버로 보내는 코드를 작성한다.export const getJwtToken = async (accessToken) => { const jwtToken = fetch(`http://localhost:8080/members/signup/kakao?accessToken=${accessToken}`) .then(res => res.json()) .catch((err) => console.log(err));} 리다이렉트 페이지에 다음 코드를 추가한다.인가 코드를 받아서 authCode가 변경되면 토큰을..

TIL - Redis Key값에 특수 문자(이상한 문자)가 같이 들어가는 경우

Spring Boot에서 Redis를 이용해 이메일 인증을 구현하던 중 key 값에 이상한 문자가 같이 들어가는 문제가 발생했다.이메일 주소를 key 값으로 인증 번호를 value로 담아서 Redis에 저장했는데 저장된 값을 확인해 보니 메일주소 앞에 이상한 기호들이 포함되어 있었다.DB에 직접 데이터를 입력했을 때는 특수 기호 없이 정상적으로 들어가는 것을 확인했다. key 값에 특수 기호가 있어도 호출 할 수 있을까 시도해봤는데 value 값이 null이었다."(큰 따옴표)를 제거하면 ERR wrong number of arguments for 'get' command 에러 메시지가 출력된다.-- value : GET "�� t kkk@kkk.com"-- ERR wrong number of arg..

TIL - React, Spring Boot로 카카오 소셜 로그인 구현 STEP 2

STEP 2. 토큰 받기https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-tokenReact토큰을 받기 위해서는 GET 요청이 아닌 POST 요청으로 보내야 한다.Client Secret : 토큰 발급 시, 보안을 강화하기 위해 사용(REST API인 경우에 해당)STEP 1에서 정의한 key 파일에 아래 코드를 추가한다.export const CLIENT_SECRET = "카카오 로그인 -> 보안 탭에서 발급 받은 키";export const ACCESS_TOKEN_URI = "https://kauth.kakao.com/oauth/token"; 토큰 요청을 위한 POST 요청 코드를 작성한다.import { AUTH_CODE..

TIL - Redis: java.net.UnknownHostException

Redis를 사용해 이메일 주소(key)와 인증 번호(value)를 담으려고 설정 후 서버를 실행했다.메일 전송까지는 정상적으로 동작했고 Redis Server에 데이터를 담으려 할 때 다음과 같은 에러가 발생했다.java.net.UnknownHostException: 알려진 호스트가 없습니다 (default) 다음은 Redis Server에서의 Username과 password가 기본 값일 때의 화면이다.  위 화면 이미지 그대로 RedisConfig 설정에서 hostName을 "default"로 했더니 발생하는 에러였다.@Configurationclass RedisConfig { // ... @Bean fun redisConnectionFactory(): LettuceConnectio..

TIL - RedisPassword

Redis 사용을 위한 설정 중 다음과 같은 문제가 발생했다. 비밀번호가 String이면 안되고 RedisPassword 타입이어야 한다.처음에는 단순히 String 타입의 password를 타입 캐스트 연산자를 사용해 다음과 같이 RedisPassword로 변경을 시도했다.redisStandaloneConfiguration.password = password as RedisPassword 그리고 다음과 같이 ClassCastException이 발생했다.org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisConnectionFactory' defined in class path resource..

TIL - React, Spring Boot로 카카오 소셜 로그인 구현 STEP 1

NewsFeed 프로젝트에 사용할 카카오 소셜 로그인을 구현하면서 각 STEP 별 어떻게 구현했는지에 대한 기록이다.카카오 REST API 문서를 보면 STEP 1부터 3까지 어떻게 요청하고 응답받는지 자세하게 나와있다.사전에 Kakao Developers에 애플리케이션 등록을 해야 한다.STEP 1. 인가 코드 받기https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-codeReact인가 코드를 받기 위해 필요한 필수 쿼리 파라미터들을 정의한다.https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-code-requestexport const AUTH_CO..