전체 글 78

상품 검색 API에서 캐싱 미처리와 캐싱 처리 TPS, 응답 시간 비교

[ 목차 ]성능이 좋은지 파악하기위한 지표Users : 동시에 사용할 수 있는 유저 수TPS : 초당 몇개의 테스트를 처리할 수 있는지(Test per second)Time : 얼마나 빠른지포화지점 : 초당 처리할 수 있는 처리량 수가 한계에 도달했고, 이후 사용자가 증가하면 Latency가 증가한다는 것을 의미한다. = 해당서버가 감당할 수 있는 한계지점을 의미ramp up: 시스템에 갑자기 높은 부하를 주면 병목 현상이 발생할 수 있어 부하를 점진적으로 증가시키면서 테스트하는 과정1. 준비먼저 상품 검색 api의 성능 테스트를 위해 상품 테이블에 더미 데이터 10만개를 생성했다.그 다음으로 nGrinder를 설치 및 실행해주었다.처음에는 직접 controller를 다운받아 실행했었는데, 스크립트에서 ..

코딩/자바 2025.03.28

데이터 100만 건 insert 하기

[ 목차 ]요구사항대용량 데이터 처리 실습을 위해, 테스트 코드로 유저 데이터를 100만 건 생성해주세요.데이터 생성 시 닉네임은 랜덤으로 지정해주세요.가급적 동일한 닉네임이 들어가지 않도록 방법을 생각해보세요.닉네임을 조건으로 유저 목록을 검색하는 API를 만들어주세요.닉네임은 정확히 일치해야 검색이 가능해요.여러가지 아이디어로 유저 검색 속도를 줄여주세요.조회 속도를 개선할 수 있는 여러 방법을 고민하고, 각각의 방법들을 실행해보세요.데이터 100만 건을 어떻게 넣지? 유저 데이터를 100만건 생성해야 하는 것부터 난관이었다.하나하나 생성해서 repository에 save하면 시간이 오래 걸릴 것이고..애초에 테스트 코든데 db에 실제로 값을 넣어도 되는 것인가.. 내가 요구사항 파악을 잘못하는 것인..

프로젝트 2025.03.18

코드 리팩토링

[ 목차 ]문제spring-expert 프로젝트에서의 코드는 일부가 for문으로 인해 길어지고 지저분해보였고, service단에서 코드가 중복되는 부분이 있었다. 그리고 response를 반환할 때 값을 하나씩 넣어서 반환하다보니 코드가 많이 길어져 있었다.이 부분들을 해결해보았다.+ 프로젝트 해설 세션을 듣고 JwtFilter, WeatherClient도 변경했다.해결 과정 1. for문으로 인해 지저분한 코드 -> 스트림으로 리팩토링 CommentService.java - 기존 코드@Transactional(readOnly = true)public List getComments(long todoId) { List commentList = commentRepository.findByTodoIdWi..

프로젝트 2025.02.26

ERROR 2059 (HY000): Authentication plugin 'auth_gssapi_client' cannot be loaded

프로젝트 제출 당일 postman에서 request 보내고 response 결과 캡쳐해서 readme에 작성하려고 프로젝트 실행을 딱 했는데어제까지만 해도 잘만 실행되던 프로젝트가 실행이 안됨..2025-02-13T10:30:50.370+09:00 ERROR 6796 --- [ main] o.s.boot.SpringApplication : Application run failed  GenericJDBCException: Unable to open JDBC Connection for DDL execution [Unable to load authentication plugin 'auth_gssapi_client'.]에러 코드는 이랬음어제까지 잘만 했는데 왜 프로젝트..

[일정관리앱ver.2] updatedDate(updatedAt) 즉시 반영이 안되는 문제

[목차]💢문제 발생일정 crud 기능을 구현하면서 일정을 업데이트하고 결과를 조회해보면 updatedDate이 변경되지 않았다.그리고 나서 다시 update 요청을 하면 그제서야 updatedDate이 바뀌는 문제가 발생했다.처음에 update 요청을 보내자마자 updateDate이 즉시 반영되도록 구현을 시도했다. ✏️ 기존 코드 및 원인- ScheduleService.java@Transactional public ScheduleResponseDto updateSchedule(Long id, ScheduleRequestDto scheduleRequestDto) { Schedule schedule = scheduleRepository.findById(id) ..

연속 부분 수열 합의 개수

문제 설명철호는 수열을 가지고 놀기 좋아합니다. 어느 날 철호는 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 모두 몇 가지인지 알아보고 싶어졌습니다. 원형 수열이란 일반적인 수열에서 처음과 끝이 연결된 형태의 수열을 말합니다. 예를 들어 수열 [7, 9, 1, 1, 4] 로 원형 수열을 만들면 다음과 같습니다. 원형 수열은 처음과 끝이 연결되어 끊기는 부분이 없기 때문에 연속하는 부분 수열도 일반적인 수열보다 많아집니다.원형 수열의 모든 원소 elements가 순서대로 주어질 때, 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 return 하도록 solution 함수를 완성해주세요.import java.util.HashSet;class Solutio..

[일정관리앱] 예외처리

일정관리 서버 프로젝트가 끝나고 튜터님께 받은 1:1 피드백 중 만약 프로젝트의 규모가 커져서 다양한 상황의 예외가 발생한다면 매번 예외 클래스를 생성하고 핸들러로 처리하는 것이 부담스러워질 것입니다. 이런 상황에서 어떻게 유지보수가 쉽도록 예외 처리를 할 수 있을지 고민해보세요.이런 내용이 있었다.exception 종류마다 클래스를 만들고 그걸 한번에 관리하는 핸들러를 통해 예외를 처리했는데 생각해보니 예외 상황이 많아질수록 비효율적이긴 하다.예외처리 방법1. BusinessException을 정의한다. 공통 예외를 처리하는 부분.import org.springframework.http.HttpStatus;public class BusinessException extends RuntimeExceptio..

[Spring] Spring Data JPA

Spring Boot는 JPA 설정을 자동으로 구성해 주어 JPA를 쉽게 사용할 수 있도록 도와준다.기본적으로 필요한 EntityManagerFactory와 TransactionManager를 자동으로 설정하고 데이터베이스 관련 설정을 application.properties 파일에서 간단히 지정할 수 있게 해준다. build.gradle에 의존성 추가: spring-boot-starter-data-jpa Spring data JPASpring data JPA는 jpa를 쉽게 사용할 수 있도록 제공하는 모듈이다.JPA 추상화 Repository 제공CrudRepository, JpaRepository 인터페이스를 제공한다.SQL이나 EntityManager를 직접 호출하지 않아도 기본적인 CRUD 기능을..

코딩/자바 2025.02.05