본문 바로가기

Spring Framework/스프링7

스프링 CORS 해결 방법 + CORS 동작 방식과 의미 안녕하세요, 스코리아입니다.오늘은 CORS가 무엇이고 어떻게 동작하는지 알아본 뒤, 스프링 서버에서 발생하는 CORS 문제의 해결 방안에 대해서 소개해드리겠습니다. 지긋지긋한 CORS 오류Frontend(ex: React)와 Backend(ex: Spring) 서버를 분리하여 작업하다 보면, 한 번쯤은 마주쳤을 'No Access-Control-Allow-Origin' CORS 문제입니다. 처음 CORS 문제를 발견하였을 때, 해결하기 위해 정말 다양하고 기가 막힌(?) 방법을 시도하였던 기억이 있습니다.  CORS 에러는 Frontend와 Backend 서버의 Origin(도메인)이 달라 발생합니다. 아래에서 자세히 살펴보겠습니다. CORS란 무엇인가?CORS란, Cross-Origin Resource.. 2024. 5. 31.
스프링 reCAPTCHA v2 사용하기 [Kotlin] 안녕하세요, 스코리아입니다. 오늘은 스프링에서 Google의 reCAPTCHA v2 서비스를 사용하는 방법에 대해서 알아보겠습니다. 언어는 코틀린(Kotlin)으로 진행하겠습니다. 구글 reCAPTCHA 소개 (v2, v3) :: reCAPTCHA v2 :: - "로봇이 아닙니다" 체크 박스로 잘 알려져 있습니다. 이 체크 박스를 통해 구글 리캡챠는 사용자가 로봇인지 인간인지 판별합니다. - 이미지 도전 과제가 존재합니다. 사용자가 의심스러운 경우, 교통수단이나 가로등 등을 식별하도록 요구하는 도전과제를 보여주고, 사용자가 풀면 인간임을 확인합니다. - 다양한 서비스에서 대중적으로 v2가 사용 중입니다. :: reCAPTCHA v3 :: - v2보다 진화된 형태로 알려져 있습니다. - 웹사이트 상호작용 .. 2024. 1. 30.
스프링 API 예외처리 방법 : @RestControllerAdvice [Kotlin] 안녕하세요, 스코리아입니다. 오늘은 스프링의 @RestControllerAdvice 어노테이션을 이용해서 API 예외처리 하는 방법에 대해서 알아보겠습니다. 언어는 코틀린(Kotlin)으로 진행하겠습니다. @RestControllerAdvice 예외처리가 필요한 이유? 만약 비즈니스 계층에서 팀원들이 각각 예외처리를 하고 있는 프로젝트라면, 발생시키는 에러 메시지, 규격, 규율 등이 달라 응답이 정규화되지 않을 것입니다. 하지만 이러한 예외처리 로직을 비즈니스 로직과 분리하여 @RestControllerAdvice 어노테이션이 적힌 클래스 한 곳에서 예외처리를 담당한다면, 일관된 형식의 응답을 제공할 수 있어, 코드의 가독성과 유지 보수성을 높이는데 도움이 될 것입니다. 즉 요약하자면, @RestCont.. 2024. 1. 8.
(2) JWT Access, Refresh 토큰 + Redis : 스프링 코드 구현 [Kotlin] 안녕하세요, 스코리아입니다. 오늘은 저번 시간에 이어서 스프링에서 JWT(Access, Refresh 토큰)을 Redis와 함께 사용하는 코드를 구현해 보겠습니다. 언어는 코틀린(Kotlin)으로 진행하겠습니다. 이전 포스팅에서 JWT가 무엇이고 Refresh 토큰을 사용해야 하는 이유, Refresh 토큰의 보안문제와 해결방안, Redis 활용 장점에 대해서 설명드렸으니, 꼭 읽어보시기 바랍니다! [이전 내용] (1) JWT Access, Refresh 토큰 + Redis : 소개 및 보안 : 바로가기 프로젝트 구현 흐름 스프링으로 코드를 구현하기 전에 어떤 식으로 구현해 볼지 Flow에 대해서 먼저 설명해 드리겠습니다. Access 토큰의 유효기간은 30분, Refresh 토큰의 유효기간은 1달(30.. 2023. 12. 30.
(1) JWT Access, Refresh 토큰 + Redis : 소개 및 보안 안녕하세요, 스코리아입니다. 오늘은 JWT(Access, Refresh 토큰)에 관해 자세히 소개해드릴 예정이며, Redis를 사용하였을 때의 장점과 Refresh 토큰에 관련된 보안 문제점 및 해결방안도 전해드리겠습니다. 다음 포스팅에는 스프링 코드와 함께 설명을 이어나가겠습니다. 세션 기반 인증 vs 토큰 기반 인증 사용자가 인증된 사용자인지 구분하기 위해서 대표적으로 세션 기반 인증, 토큰 기반 인증 방법이 존재합니다. 각각 장단점이 존재하므로 자신의 프로젝트의 상황에 맞게 선택하는 것이 좋겠습니다. 보통 토큰 기반 인증 방법은 무상태성, 확장성, 무결성의 이유로 사용됩니다. - 무상태성 : 사용자의 인증 정보가 담겨 있는 토큰을 클라이언트에 저장하기 때문에 서버에 별도의 저장소가 없어, 완전한 무.. 2023. 12. 25.
스프링에서 Redis 캐시 사용하기 (@Cacheable, @CacheEvict) [Kotlin] 안녕하세요, 스코리아입니다. 오늘은 스프링 3.1.0 환경에서 Redis 캐시를 사용해 보고, DB(Disk)로 불러올 때와 속도 비교를 해보겠습니다. 언어는 코틀린(Kotlin)으로 진행하겠습니다. Redis는 NoSql로서, 인메모리 DB이기 때문에 Disk(하드)에서 불러오는 DB보다 훨씬 속도가 빠릅니다. 그렇기 때문에 Redis로 캐시 작업을 하기에 용이합니다. 하지만 Redis에 많은 데이터가 누적이 된다면 메모리 부족 현상이 순시 간에 나타날 수 있습니다. 그렇기 때문에 TTL(time-to-live)이라 부르는 '만료시간'을 설정하여 일정 시간이 지나면 자동으로 삭제되게끔 설정할 수 있습니다. Redis 설치 (Mac) Redis를 아직 설치하지 않으셨다면, 터미널에 아래 명령어를 쳐서 간.. 2023. 12. 20.
[오류해결] Spring Boot: org.hibernate.mapping.BasicValue cannot be cast to 안녕하세요, 스코리아입니다. 도메인 Entitiy를 수정한 직후, 스프링 부트에서 발생한 오류와 해결 방법에 대해서 소개해보겠습니다. 오류에 관해서 구글에 검색해도 많은 내용이 없어서 제가 해결한 방법을 공유드리고자 합니다. 문제상황 저는 Entitiy 도메인 객체를 일부 수정한 뒤, 스프링 부트 3.1.0에서 스프링 부트를 실행시킬 때 아래와 같은 에러가 표시되었습니다. Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: class org.hibernate.ma.. 2023. 11. 4.