전체 글

Spring/MSA

[MSA] MSA 기반 상품 주문 시스템 (1)

MSA의 개념을 확립하고자 작은 프로젝트를 하나 해보려고 한다.1. 프로젝트 개요프로젝트명 : MSA 기반 상품 주문 시스템목표 : MSA, JWT 인증, Redis 캐싱, 분산 추적, Docker CI/CD 실습2. 아키텍처 설계 흐름Client -> Gateway(인증, 인가, 라우팅) -> Eureka로 서비스 발견(Load Balancing) -> 각 서비스 호출(Auth, Product, Order) 3. ERD 설계Auth DB(auth-db)CREATE TABLE users ( user_id BIGSERIAL PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created..

카테고리 없음

[AWS] aws 과금 방지를 위한 체크리스트 + Terraform

1. AWS 실습 후 꼭 해야 하는 삭제 체크리스트 ✔️  [ ✔️ ] EC2 인스턴스 종료 및 삭제   [ ✔️ ] EBS 볼륨 삭제 (남아있는지 꼭 확인)   [ ✔️ ] Elastic IP 해제 및 삭제   [ ✔️ ] RDS (DB) 삭제   [ ✔️ ] S3 버킷 삭제 (필요하면 백업 후)   [ ✔️ ] VPC 삭제   [ ✔️ ] 로드밸런서 삭제   [ ✔️ ] CloudWatch 알람 같은 모니터링 설정 해제   [ ✔️ ] 비용 확인 (Billing 메뉴)2. AWS 요금 알림 설정하기설정 방법:AWS 콘솔 접속상단 검색창에 "Billing" → "Budgets" 이동"예산 생성하기" 클릭예산 이름 작성 (ex. 실습 요금 알림)월 예산 $1~$5 정도로 설정이메일 주소 입력 → 알림 받..

Spring/Spring boot

Spring Boot에서 발생한 무한 참조 문제 및 Hibernate 프록시 직렬화 문제 해결하기

프로젝트를 진행하던 도중 Gemini API를 이용하여 상품 내용에 대한 도움을 주는 기능을 구현하고 자신이 추천 받은 내용을 조회할 수 있는 기능을 구현하던 도중 User와 AiDescription 엔티티가 양방향 연관관계를 가지고 있어 무한 루프 문제가 발생했다. 사실 연관관계를 생각 안하고 단순 조회만 생각하고 작성을 했기에 이런 문제가 발생한 거라 앞으론 생각을 하면서 작성을 하려고 기록해두려한다.... 1. 무한 참조 문제 발생- 문제 상황Spring Boot + JPA 환경에서 엔티티 간 양방향 연관관계를 설정할 때 JSON 직렬화 과정에서 무한 참조 문제가 발생- 무한 참조 문제 개념무한 참조는 엔티티 A가 엔티티 B를 참조하고, B가 다시 A를 참조하면서 JSON 직렬화 과정에서 끝없이 순..

Spring/Spring boot

[Spring Boot] 예외 처리

Sring Boot 예외 처리 1. Spring Boot에서 예외 처리가 중요한 이유애플리케이션에서 에러가 발생했으 경우 이를 잘 관리해서 사용자에게 친절한 응답을 제공하기 위함전역에서 처리를 하면 코드 중복을 줄이고 유지보수성이 향상됨흐름 : 사용자 요청 -> Controller -> Service -> Repository -> 예외 발생 -> GlobalExceptionHandler -> 클라이언트에게 JSON 응답 반환[ErrorCode]- 각종 예외 코드를 Enum으로 관리@Getter@RequiredArgsConstructorpublic enum ErrorCode { // 404: 리소스를 찾을 수 없음 USER_NOT_FOUND(HttpStatus.NOT_FOUND, "유저가 존재하..

DBMS/Redis

[Redis] redis를 Spring Boot에 추가

1. Spring Boot 프로젝트에 Redis 셋팅 추가✅ Spring Boot 프로젝트에 Redis 셋팅 추가하기1. Redis 의존성 추가하기build.gradledependencies { ... implementation 'org.springframework.boot:spring-boot-starter-data-redis'} 2. application.yml 수정하기jpa: hibernate: ddl-auto: update show-sql: true data: redis: host: localhost port: 6379logging: level: org.springframework.cache: trace # Redis 사용에 대한 로그가 조회..

카테고리 없음

[Git] 협업을 위한 Git-Flow

1. Gitgit은 협업에 있어 필수적이라 사용 방식을 익혀두어야 한다.  git의 영역은 크게 Local과 Remote 영역으로 나뉘는데 Local에서도 영역이 나뉜다.그림을 보면 쉽게 이해가 될 것이다. 말하자면 working directory는 개발자가 코드를 작성하고 수정하는 내 컴퓨터의 폴더이고 local repository는 commit 이후에 Git이 관리하는 저장소이다. remote repository는 push를 하게되면 업로드 되는 GitHub라 할 수 있다. staging area는 커밋 전 대기 상태라고 보면 된다. 한 번 더 확인할 수 있어서 커밋을 더욱 깔끔하게 만들어준다.$ git diff --staged위의 명령어를 사용하면 staging area에서 검토가 가능하다!  2...

Spring/MSA

서킷 브레이커 (Resilience4j)

1. 서킷 브레이커(Circuit Breaker)란?서킷 브레이커(Circuit Breaker)는 마치 전기 회로의 차단기처럼 시스템에서 장애가 발생했을 때 전체 시스템이 마비되는 것을 방지하는 보호 장치이다.특히 마이크로서비스 아키텍처(MSA)나 분산 시스템에서 자주 사용되는데 특정 서비스가 과부하 상태가 되거나 응답이 느려질 경우 해당 서비스로 가는 요청을 일정 기간 차단하여 시스템을 보호하는 역할을 한다.2. 왜 서킷 브레이커가 필요할까?연쇄 장애(캐스케이딩 실패) 방지예를 들어 A 서비스가 B 서비스에 요청을 보내는데, B 서비스가 느려지거나 응답하지 않으면 A 서비스도 계속해서 대기하게 된다.이 상태가 지속되면 A 서비스뿐만 아니라 A 서비스에 의존하는 다른 서비스들도 영향을 받게 되면서 시스템..

Spring/MSA

Spring cloud와 MSA

1. MSA(마이크로서비스 아키텍처)- 하나의 애플리케이션을 여러 개의 작은 서비스로 나누어 개발하고 운영하는 방식으로 각각의 서비스는 독립적으로 개발되고 배포될 수 있으며, 필요에 따라 확장하거나 수정할 수 있다 [모놀리식 아키텍처 VS 마이크로 서비스 아키텍처]-모놀리식 아키텍처(Monolithic Architecture) 모든 기능이 하나의 애플리케이션에 포함되어 한 개의 코드베이스에서 모든 기능이 동작하는 방식예를들어 온라인 쇼핑몰이라는 하나의 애플리케이션 안에 회원관리, 상품조회, 배송, 결제 시스템 등등 전부 포함되어 있는 것장점 : 단순 구조, 한 번의 배포단점 : 코드 커지면 유지보수 어려움, 특정 기능 수정해도 전체 서비스 재배포 필요 -마이크로서비스 아키텍처기능별로 독립적인 작은 서비스..

챛채
챛 Development Log