전체 글 96

TIL - Spring Security Filter

Spring Security 의존성을 추가하고 프로젝트를 실행하면 다음과 같이 여러 Filter들이 실행되는 것을 볼 수 있다.Will secure any request with [ org.springframework.security.web.session.DisableEncodeUrlFilter@36776c32, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7792d851, org.springframework.security.web.context.SecurityContextHolderFilter@2291d9a0, org.springframework.security.w..

TIL - Spring Security

Spring Security인증 , 권한 부여 및 일반적인 공격에 대한 보호를 제공하는 프레임워크인증(Authentication) : 사용자가 누구인지 확인하는 과정권한 부여(Authorization) : 인증된 사용자가 특정 자원에 접근할 수 있는지 결정하는 과정세션 관리(Session Management) : 사용자 세션을 관리하고, 동시 로그인을 제한할 수 있음CORS(Cross-Origin Resource Sharing) : 다른 도메인의 리소스를 안전하게 요청할 수 있도록 하는 매커니즘JWT(JSON Web Token) : 사용자의 인증 정보를 JSON 형식으로 표현한 토큰을 사용하여 상태를 유지하지 않는 인증방식을 제공Spring Security 인증 프로세스인증 필터가 요청을 가로챈다.인증 ..

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를 쓸 수 있..

[JavaScript] fetch

fetchHTTP 요청 전송 기능을 제공하는 클라이언트 사이드 Web APIHTTP 요청을 전송할 URL과 HTTP 요청 메서드/헤더/페이로드 등을 설정한 객체를 전달HTTP 응답을 나타내는 Response 객체를 래핑한 Promise 객체를 반환const promise = fetch(url [, optinos]);fetch 함수는 HTTP 응답을 나타내는 프로미스를 반환, 후속 처리 메서드 then을 통해 프로미스가 resolve한 Response 객체를 전달받을 수 있음Response 객체는 HTTP 응답을 나타내는 다양한 프로퍼티를 제공Reponse.prototype에는 Response 객체에 포함되어 있는 HTTP 응답 몸체를 위한 다양한 메서드를 제공response.text(): 응답을 읽고 텍..

JavaScript 2024.06.03

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..