[Spring] React에서 Set-Cookie가 보이지 않아요
·
Back-end/Spring
문제 상황현재 상황은 다음과 같다. FE : http://localhost:3000BE : https:// ~~ FE에서 BE에 로그인 요청을 보내는 과정인데 다음과 같은 에러가 발생했다. 즉, OAuth2 로그인 과정 자체에서 실패해버리는 것. 과정은 다음과 같다. 1. server_domain/oauth2/authorization/kakao 접속2. localhost:3000/api/auth/callback?code={code} 로 리디렉션3. 해당 임시 코드를 가지고 서버에 Token 발급 API 호출4. Response Body에 AT를, Set-cookie 헤더에 Refresh Token을 발급 쿠키 정책에서 문제가 생긴다. 쿠키를 응답에 추가하는 방식이 문제일 가능성Cookie refres..
[Redis] RedisReadOnlyException: READONLY You can't write against a read only replica.
·
Back-end
문제 상황팀원으로부터 로그인이 되지 않는다는 보고를 받게 되었다... 현재 로그인 로직이 어떻게 되어있냐면 소셜 로그인 진입소셜 로그인 성공 시 임시 코드를 발급하고 콜백 URL에 리디렉션 시켜준 뒤, redis에 만료기한을 1분으로 하여 저장클라이언트는 해당 code를 쿼리 파라미터에 넣어서 API를 호출함. 호출 시 서버에서 AT, RT를 발급하여 반환해주는 로직 그런데, cloudwatch의 로그를 보니까 다음과 같이 로그인은 성공하는데 Redis에서 에러가 발생한다. 즉, Redis에 값을 삽입할 때 나는 문제였다 해결 과정1. Redis Read Replica 설정 문제현재, docker redis image를 pull 받아와 컨테이너에서 돌아가고 있는 상황이다.따라서, redis-cli에..
[AWS] Docker Logs -f 로그를 CloudWatch에서 확인하기
·
Infra & Cloud/AWS
현재 문제 상황- ec2 내 spring application log를 참고하려면, 직접 EC2에 접속하여 docker logs -f {containerID} 명령어를 실행해야 함.[너무 번거로움] - CI CD할 때마다 컨테이너가 중지되어 log가 사라지는 문제 발생 그래서, 1. logback.xml 및 의존성 주입, aws iam access Key를 등록하여 spring application에서 cloudwatch로 로그를 전송하고자 함2. 하지만 이뤄지지 않았고, 구글링 결과 docker logs를 cloudwatch로 전송하여 해결하면 됨.3. 근데, 컨테이너가 중지될 때까지 로그가 쌓이는 문제가 생기니까, CI/CD가 이뤄지는 시점을 기준으로 로그 스트림을 나눌 필요가 있었음.4. 따라서,..
[Spring] filter vs AOP vs Interceptor
·
Back-end/Spring
로깅 및 API 호출 전 사용자 권한 필터 등 다양한 곳에서 로직이 호출되기 이전, 이후에 공통적으로 처리해야 할 기능들이 존재한다. 대표적인 예로 Logging, 인증, 인가, 인코딩 변환 등등이 있다. 공통적인 기능의 코드를 모든 모듈 및 페이지에서 작성하게 되면 코드의 중복이 발생하게 되고 MSA 기반에서는 각 모듈마다 다른 코드가 작성되어 관리가 힘들 수 있다. 이럴 때 filter, Interceptor, AOP를 사용할 수 있다. 🍎 Filter, Interceptor, AOP 차이 - 호출 시기 1. FilterFilter는 Spring이 실행 되기 전에 실행되며 WAS (Tomcat) 에서 처리를 해주게 된다. Request / Response 즉, HTTP 프로토콜로 들어오는 모든 요청..
[Apache Kafka] Kafka Producer의 데이터 멱등성 보장하기
·
Infra & Cloud
[Spring] kafka 파헤치기현재 캡스톤 프로젝트에는 사용자 개인의 마인드맵 CRUD 과정이 이루어지는 기능이 들어간다. 간단히 말하자면,1. 사용자가 마인드맵을 생성 (마인드맵의 Root Node 생성)2. 사용자가 마인드맵을 수sksmsfbrjs51.tistory.com  이전 포스트에서는, Kafka의 필요성과 Kafka가 어떤 구조로 이루어져있는지 분석해보았다. Kafka를 활용하여 지속적으로 마인드맵 데이터를 Producer에게 전송하여 이를 DB 및 Client에게 전송해줘야 하는 구조임을 알게 되었다. 하지만 여기서 걸리는 것이, 그럼 결국 Publisher에게 호출한 토픽이 같은 경우, 가장 마지막에 요청된 Topic으로 DB에 저장, 수정되거나 사용자에게 반환해줘야 하는게 아닌가? ..
[Apache Kafka] kafka 파헤치기
·
Infra & Cloud
현재 캡스톤 프로젝트에는 사용자 개인의 마인드맵 CRUD 과정이 이루어지는 기능이 들어간다. 간단히 말하자면,1. 사용자가 마인드맵을 생성 (마인드맵의 Root Node 생성)2. 사용자가 마인드맵을 수정 (마인드맵에서 노드를 생성하고 가지를 뻗어나가는 과정)  이때, 사용자의 지속적인 마인드맵 수정 작업이 이루어지는 로직을 기획하고 있었다.[x, y 좌표 배치 및 노드 데이터 변경] 현재는 데이터베이스에 직접 end-to-end 방식으로 API를 호출하는 방식으로 아키텍쳐를 구상한 상황이지만, 크게 4가지의 잠재적인 문제점을 내포했다.  1. 시스템 복잡도의 증가중앙화된 데이터 전송 영역이 없어, 데이터의 흐름을 파악하기 어렵고, 시스템 관리가 복잡함.시스템의 일부분에 문제가 발생하면, 연결된 모든 애..
[Spring] Docker-Compose를 활용한 CI / CD 구축
·
Back-end/Spring
현재 상황캡스톤 프로젝트를 진행하면서 다음과 같은 디렉터리 구조를 가지고 있는 상황이다. Repo- .github- frontend- backend- gpt... 현재 EC2 내에는 Spring Boot Jar file과 Docker Container에서 Redis Image를 pull 받아와야 하는 상황이다. 일일이 Docker 명령어를 입력하여 container image를 pull 받아오는 것보다 docker-compose를 통해 한 번에 Docker Container에서 이미지를 pull 받아오고자 해당 방법을 진행했다. DB는 RDS를 활용하여 구축했기에, Docker-compose에는 담지 않았다.하지만, EC2 내 로컬 DB를 활용한다면 docker-compose.yml에 DB 관련 코드를 ..
[Spring] com.auth0 vs jsonwebtoken.jjwt
·
Back-end/Spring
지금까지 프로젝트를 했던 것들을 짚어봤을 때 JWT 토큰을 사용하기 위해 com.auth0.java-jwt 라이브러리를 사용하거나 io.jsonwebtoken (jjwt) 라이브러리를 사용하는 경우가 있었다. com.auth0가 더 좋다, jjwt가 더 좋다 이런 말들이 많아서 직접 조사해보고 정리해보았다.  1. com.auth0:java-jwt💡 장점가볍고 간결한 API코드가 직관적이며, JWT의 생성 및 검증 과정이 상대적으로 간단함.빌더 패턴을 활용한 사용성 향상JWT 생성 시 JWT.create() 메서드를 사용하여 체인 방식으로 쉽게 설정 가능.JDK 내장 라이브러리만 사용별도의 외부 의존성이 거의 없음. (java.security 및 java.util 기반)토큰 검증 시 Claim을 쉽게 ..