spring boot 5

[쇼핑몰 프로젝트 - 리팩토링] 카테고리 N+1 문제 해결과 Redis 캐싱 적용

0. 개요쇼핑몰 프로젝트의 카테고리는 재귀적 계층 구조로 설계되어 있었다. 처음에는 백엔드에서 전체 카테고리 트리를 재귀적으로 내려주는 방식이었지만, 이 방식은 N+1 문제를 유발했고, 그로 인해 쿼리 수가 과도하게 늘어나고 응답 속도도 매우 느려지는 문제가 있었다. 당시에는 시간적인 여유가 없어서, 문제를 임시로 해결하기 위해 프론트 서버에서 아래와 같이 로직을 구성한 것 같다.최상위 카테고리 목록을 먼저 /topCategories API로 조회.그 중 자식이 있는 카테고리에 대해 /subCategories/{id} API를 반복 호출.이 방식은 겉보기에 구조를 분리한 것처럼 보이지만, 결국 카테고리 개수만큼 API 요청이 발생하게 되면서 N+1 문제를 DB 쿼리에서 API 요청 수준으로 옮긴 것에 불..

[쇼핑몰 프로젝트] Spring Boot 민감 정보 보호와 배포 자동화: GitHub Actions secrets & .env 활용

0. 개요쇼핑몰 프로젝트를 혼자 다시 구현하던 중, 민감 정보(DB 계정, 비밀번호 등)의 보호 방법에 대해 고민하게 되었다.기존 팀 프로젝트에서는 NHN Cloud의 Key Manager 서비스를 활용했지만, 이번 개인 프로젝트에서는 이를 사용할 수 없어 GitHub Actions Secrets와 .env 파일을 활용한 새로운 방법을 적용하게 되었다.1. env 파일을 활용하여 로컬에서 민감 정보 관리하기Spring Boot 2.4 이상에서는 spring.config.import 기능을 사용하여 외부 설정 파일 (.env, .yml 등)을 로드하고, 이를 application.properties에서 사용할 수 있다. (1) 프로젝트 루트 디렉토리에 env 파일 생성.chokchok-api/.env.en..

[Spring Boot] DB 연결하기 - MySQL, H2, Redis

1. MySQL(0) MySQL 로컬 서버 활성화/종료# 서버 활성화mysql.server start# 서버 종료mysql.server stop (1) 터미널로 연결하기로컬에 설치된 MySQL 서버에 root 사용자로 접속하는 명령어.mysql -u root -p MySQL 원격 접속을 위한 명령어.-h: 호스트. 111.111.111.111은 MySQL 서버의 IP 주소.-P: 포트 번호.-u: 사용자 이름.-p: 비밀번호 입력을 요청.mysql -h 111.111.111.111 -P 3306 -u nhn_exam_17 -p (2) Spring Boot 에서 properties 파일로 연결하기의존성 추가. com.mysql mysql-connector-j runtime 2. pr..

Spring 2024.11.30

[Spring Boot] @ConfigurationProperties 활성화시 @Profile 무시 에러

1. 에러 발생의도문제문제 원인 파악문제가 발생한 코드2. @ConfigurationProperties란?Externalized Configuration (외부 구성) Externalized Configuration 사용 (바인딩)@ConfigurationProperties3. 해결Bean 등록 방법 2가지@Configuration + @Bean@Component4. 결론1. 오류 발생의도Profile에 따라서 다른 Bean이 동작하게 하고 싶었다.@Profile 기능을 이용해서 아래 코드처럼 eng Profile이 활성화되면 해당 클래스가 구현되게 하고 싶었다.(profile에 따라서 서로 다른 클래스 구현)문제@ConfigurationProperties("eng"), @Profile("eng"), ..

Spring 2024.11.08

[Spring Boot] 01. Spring Boot Core (1) - Spring Boot 소개, IoC, DI

1. Spring Boot 소개Spring BootSpring FrameworkSpring Framework ModulesSpring Framework 특징Spring Boot 목표Spring Boot 시작Spring Boot 기능Spring Boot vs Spring Framework2. Spring Boot 프로젝트 생성 및 실행Spring Boot 프로젝트 생성Spring Boot 프로젝트를 실행하는 여러가지 방법3. Spring IoCIoC: Inversion of Control (제어 역전)Bean FactoryApplicationContextSpring BeanBean 등록Stereotype AnnotationSpring Bean 객체의 생명주기 설정4. 의존성 주입 (Dependency In..

Spring 2024.11.05