[DataBase] 퍼블릭 액세스 제한 후 RDS와 EC2 연결하기
·
Infra & Cloud
문제 상황RDS 퍼블릭 액세스를 차단하고 난 뒤, EC2에서 DB 접속에 문제가 발생함docker-compose와 ci-cd 로직 및 rds와 ec2의 보안그룹 문제라고 판단함. 1. RDS 생성→ 생성 시 퍼블릭 액세스 차단으로! (퍼블릭 IP로 인한 Virtual IP 비용 청구됨)→ Postgresql DB를 활용할 예정이므로, psql을 기준으로 설명하겠음. 2. RDS와 EC2의 네트워크 환경 확인AWS 콘솔 → EC2 → 해당 인스턴스 선택 → 네트워크 인터페이스 확인AWS 콘솔 → RDS → 해당 DB 인스턴스 선택 → VPC 및 서브넷 정보 확인EC2와 RDS가 같은 VPC 및 서브넷에 있는지 확인 3. EC2 와 RDS 간의 보안 그룹 설정퍼블릭 액세스를 차단한 경우, EC2에서만 접..
[Spring] WebClient 라이브러리를 활용한 외부 API 호출 시 발생하는 scanAvailable 에러
·
Back-end/Spring
1. WebClient 라이브러리를 활용하여 GPT 서버 API 호출사용자가 prompt를 입력하면, 이 prompt를 Request Body로 담아주고 GPT 서버 API를 호출하면 API는 응답 값으로 String 배열을 리턴해준다. 이 API의 response body를 받아와서 배열 내 문자열을 바탕으로 각 Bubble이라는 엔티티 객체를 만들어 DB에 저장하는 로직을 구현하고자 하였다.@PostMapping("/create")@Operation(summary = "버블 생성 API", description = "프롬프트를 기준으로 GPT API에서 뽑아준 청크 단위로 버블 생성 후 반환")public ApiResponse> createBubbles( @AuthenticationPri..
[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. 시스템 복잡도의 증가중앙화된 데이터 전송 영역이 없어, 데이터의 흐름을 파악하기 어렵고, 시스템 관리가 복잡함.시스템의 일부분에 문제가 발생하면, 연결된 모든 애..