전체 글

문제 배경 내가 작성한 리뷰를 조회하는 API를 스프링 데이터 JPA의 페이징 처리를 통해 구현했다. 현재 API를 호출했을 때 실행되는 SQL 쿼리문을 보면 N+1 문제가 발생한다. 실행되는 SQL 쿼리문 2024-02-11 18:31:29.479 INFO 29300 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2024-02-11 18:31:29.479 INFO 29300 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServl..
· Etc
필터를 이용하여 서블릿에서 예외 처리를 하는 과정에서 출력되는 로그를 상세히 분석해 보고자 한다. 서블릿에서 예외 처리를 하는 과정의 흐름은 다음과 같다. WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러(예외발생) WAS /error-page/500 다시 요청 → 필터 → 서블릿 → 인터셉터 → 컨트롤러(/error-page/500) → View 이를 기반으로 코드를 작성하고, 이를 수행하는 과정에서 출력되는 로그를 단계적으로 살펴볼 예정이다. 예외 처리를 위해 필요한 클래스 ServletExController - 클라이언트에 의한 요청 처리 컨트롤러 package hello.exception.servlet; import lombok.extern.slf4j.Slf4j; import o..
본 게시글은 김영한 강사님의 [스프링 핵심 원리 - 기본편]을 수강하며 작성한 글입니다. 스프링 컨테이너 생성 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext는 스프링 컨테이너이다. 이는 인터페이스인데, 이를 구현한 클래스가 AnnotationConfigApplicationContext이다. 스프링 컨테이너는 XML로도, 애노테이션 기반의 자바 설정 클래스로도 만들 수 있다. 💡 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext로 구분한다. 뒤에서 더 자세히 배우겠지만, BeanF..
· DevOps/AWS
1. RDS DB 생성 1. 데이터베이스 생성 방식은 표준 생성으로 선택 2. 엔진 옵션은 MySQL로 선택 3. 템플릿은 프리티어로 선택 4. DB 이름, 사용자 이름, 암호 설정 5. 연결 설정에서 퍼블릭 액세스 기능을 가능하게 하고 새 보안 그룹 생성하기 6. 추가 구성 설정에서 초기 데이터베이스 이름 설정하기 2. RDS 인바운드 규칙 설정 1. RDS를 클릭해서 보안 그룹으로 이동하고 인바운드 규칙 편집 버튼을 클릭한다. 2. 인바운드 규칙을 추가한다. 유형: MYSQL/Aurora 돋보기: EC2 인스턴스 보안 그룹 3. RDS 접속 테스트 MySQL 워크벤치를 통해 연결을 테스트한다. Hostname: RDS 인스턴스의 엔드포인트 Username: 마스터 사용자 이름 Password: 마스터..
· DevOps/AWS
6. Github Action 워크플로우 작성 프로젝트를 빌드한 후 AWS S3 버킷에 푸시 후 CodeDeploy를 수행한다. name: Build and Deploy Spring Boot to AWS EC2 # main 브랜치에 푸쉬 했을 때 on: push: branches: [ main ] # 리전, s3 버킷 이름, CodeDeploy 앱 이름, CodeDeploy 배포 그룹 이름 env: AWS_REGION: ap-northeast-2 S3_BUCKET_NAME: my-github-action-s3-bucket-i-0108286cf8acc8920 CODE_DEPLOY_APPLICATION_NAME: my-codedeploy-test CODE_DEPLOY_DEPLOYMENT_GROUP_NAME:..
· CS
본 게시글은 [10분 테코톡] ✌️ 영이의 Replication을 들으며 작성한 글입니다. Replication이란? 한 서버에서 다른 서버로 데이터를 동기화하는 것을 말한다. 원본 데이터를 가진 소스 서버 복제된 데이터를 가지는 레플리카 서버 Relication 서버를 구축하는 목적 스케일 아웃 갑자기 늘어나는 트래픽을 대응하는 데 유연한 구조이다. 데이터 백업 레플리카를 안하더라도 백업은 필요하다. 백업 과정은 실제 실행 중인 쿼리들에 영향을 줄 수 있으므로, 레플리카 서버에서 데이터 백업을 실행하여 소스 서버에서 백업 시 발생하는 문제들을 해결한다. 데이터 분석 분석용 쿼리는 대량의 데이터를 조회하고 쿼리 자체가 무거운 경우가 많다. 이를 소스 서버에서 진행할 경우 실제 서비스에 문제가 될 수 있다..
본 게시글은 김영한 강사님의 [스프링 핵심 원리 - 기본편]을 수강하며 작성한 글입니다. 새로운 할인 정책 개발 어느 날 기획자가 새로운 할인 정책인 정률 할인 정책을 추가해달라고 요구한다. 구현체를 하나 추가로 개발하면 될 듯 하지만, 몇 가지 문제점이 발생한다. 이 문제점을 해결하다 보면 여러 과정을 거치게 되고 자연스럽게 스프링의 핵심 기능인 스프링 컨테이너가 왜 탄생했는지 알게 된다. 정률 할인 정책 개발 public class RateDiscountPolicy implements DiscountPolicy{ private int discountPercent = 10; @Override public int discount(Member member, int price) { if (member.get..
· DevOps/AWS
매번 build를 하고, 빌드된 jar파일을 EC2 서버에 접근해서 올리는 작업은 번거롭기 때문에 GithubAction, CodeDeploy를 통해 배포 자동화를 설정한다. 한 번 설정해두면 번거로운 작업이 사라지게 되어서 개발에만 집중할 수 있다. 구축할 파이프라인의 진행할 순서를 간단하게 요약하면 다음과 같다. Github에 코드를 Push하면 Github Action이 자동으로 실행되며 빌드&테스트를 한다.(CI) 문제가 없다면 압축파일(.zip)을 만들어서 AWS S3에 업로드한다. CodeDeploy를 실행하여 S3에 있는 코드를 EC2에 배포한다. 1. IAM 설정 셋팅 Github Action이 S3와 CodeDeploy에 접근하기 위해 해당 권한을 가지는 IAM 사용자 계정을 생성한다. ..
jyjyjy25
기록하는 습관