반응형

삽질로그 154

Spring Boot 성능 최적화

최근 프로젝트에서 API 응답 속도가 느려지는 문제를 겪으면서 성능 최적화를 본격적으로 진행했다. 적용해본 방법들과 결과를 정리해둔다.## 1. Redis 캐싱으로 응답 시간 40% 단축가장 효과가 좋았던 건 Redis 캐싱이었다. 상품 상세 정보 같이 자주 조회되지만 변경은 드문 데이터에 `@Cacheable`을 적용했다.@Cacheable(value = "products", key = "#productId")public ProductDto getProductDetail(Long productId) { return productRepository.findById(productId) .map(this::convertToDto) .orElseThrow(() -> new Pro..

코딩:개발일지 2025.10.03

Spring Boot Profile 정리 - 환경별 설정 분리 실전 가이드

## Profile이란? Spring Boot에서 환경별로 다른 설정을 적용하기 위한 기능. dev, stage, prod 환경마다 DB 접속 정보, API 엔드포인트 등이 다를 때 유용함. ## 기본 사용법 ### 1. 설정 파일 분리application.properties (공통 설정 - 모든 환경에서 공통으로 사용) application-dev.properties (개발 환경 - 로컬에서 개발할 때) application-stage.properties (스테이징 환경 - 운영 전 테스트용) application-prod.properties (운영 환경 - 실제 서비스) ### 2. Profile 활성화 ```properties # application.properties # 기본으로 사용할 프로파일..

개발환경 2025.10.02

ArrayList와 LinkedList의 차이점은? 언제 무엇을 사용해야할까?

솔직히 말하면...4년차까지 와서도 ArrayList만 쓰고 살았다.LinkedList? 면접 때나 나오는 얘기 아닌가 싶었는데,최근에 대용량 데이터 처리하다가 성능 차이를 체감했다.그때서야 진짜 차이를 알게 됐다.간단하게 구조 차이부터ArrayList - 배열 기반// 내부적으로는 이런 느낌Object[] elementData = new Object[10]; // 기본 크기 10연속된 메모리에 데이터를 저장한다. 인덱스로 바로 접근 가능.LinkedList - 노드 기반// 내부적으로는 이런 느낌class Node { Object data; Node next; Node prev;}각 노드가 다음/이전 노드의 주소를 가지고 있다. 체인처럼 연결됨.성능 차이 조회 성능 (get)// Arr..

Java 2025.09.16

데드락(Deadlock)이란? 실무에서 겪은 디버깅 사례와 ShedLock 적용기

데드락이란?데드락(Deadlock)은 두 개 이상의 프로세스나 스레드가 서로의 자원을 기다리며 무한정 대기하는 상황을 말한다. 마치 좁은 다리에서 두 차가 서로 마주보고 서있어 어느 쪽도 움직일 수 없는 상황과 비슷하다.간단한 데드락 예시일상생활로 비유하면 이런 상황이다:철수: "영희야, 네 펜 좀 빌려줘. 내 지우개 줄게."영희: "철수야, 네 지우개 좀 빌려줘. 내 펜 줄게."결과: 둘 다 상대방이 먼저 주기를 기다리며 영원히 대기...프로그래밍에서의 데드락 예시// 스레드 Asynchronized(lock1) { Thread.sleep(100); synchronized(lock2) { // lock2를 기다림 // 작업 수행 }}// 스레드 B (동시 실행)synchr..

코딩:개발일지 2025.08.31

Java에서 try-with-resources를 사용해야 하는 이유

try-catch-finally의 문제점기존 방식으로 파일을 읽는 코드를 보면:FileInputStream fis = null;try { fis = new FileInputStream("example.txt"); // 파일 읽기 작업} catch (IOException e) { e.printStackTrace();} finally { if (fis != null) { try { fis.close(); // 또 다른 try-catch 필요! } catch (IOException e) { e.printStackTrace(); } }}문제점:코드가 복잡하고 길어짐finally에서 또 다른 예외 처리 필요자원..

Java 2025.08.26
728x90
반응형