'분류 전체보기' 카테고리의 글 목록
코드 옆 여백
💻 Backend/Bootcamp 과제
CH 5 플러스 Spring_코드 개선 과제
2026.04.06
Level 11. @Transactional의 이해 (코드 개선 퀴즈)문제 : 할 일 저장 기능을 구현한 API(/todos)를 호출할 때, 아래와 같은 에러가 발생.컨트롤러는 문제가 없어 보이니 서비스에 가서 뭐가 문제인지 확인을 해보자!이런!클래스 전체에 @Transactional(readOnly = true)가 붙어있는데,생성 메서드에 @Transactional이 붙어있지 않아서 생긴 문제였다! 클래스에 @Transactional(readOnly = true)를 선언하게 되면해당 서비스에서는 모든 메서드가 기본적으로 읽기 전용 트랜잭션으로 동작한다! 그렇기 때문에 데이터 저장이 필요한 saveTodo()에서는 @Transactional를 따로 선언하여 읽기 전용이 아니라 쓰기 가능한 트랜잭션이라고 ..
💻 Backend/이론 및 실습
캐싱 개념 및 필요성
2026.04.01
캐시(Cache)란?자주 사용하는 데이터를 더 빠른 저장소(Redis 등)에 임시로 저장해 재사용하는 것이다.DB나 외부 API 호출 없이 메모리에서 즉시 응답 가능하다. 왜 캐시를 보조로 사용하고 DB에는 원본을 저장할까?캐시는 임시 저장소라서 데이터가 사라질 수 있고, 모든 데이터를 다 저장하기엔 메모리 비용이 크기 때문이다.그리고 정확한 원본 데이터 저장은 DB가 더 잘하기 때문에,캐시는 주로 자주 사용하는 일부 데이터만 빠르게 꺼내기 위해 보조로 사용한다. 캐싱의 필요성문제캐시 도입 후 효과반복적인 DB 조회✅ 캐시로 응답 속도 10~100배 향상외부 API 호출 지연✅ API 응답 캐시로 비용 절감트래픽 폭증 시 서버 부하✅ 캐시로 병목 완화인기 게시글/상품 조회✅ 캐시로 빠른 응답 제공 캐시..
💻 Backend/이론 및 실습
복합 인덱스
2026.03.31
복합 인덱스란?두 컬럼(start_date, end_date)을 묶어서 하나의 인덱스로 만드는 것을 복합 인덱스라고 한다.복합 인덱스가 아닌 단일 인덱스만 있으면 다중 조건 조회에서 인덱스 활용이 제한되어 성능이 떨어지게 된다. 복합 인덱스는 왼쪽(첫 번째 컬럼)부터 순서대로만 작동하는데 이를 왼쪽 접두어 규칙(Leftmost Prefix Rule)이라고 한다. CREATE INDEX idx_start_end ON events(start_date, end_date);이 인덱스는 내부적으로 이렇게 정렬된다 👇(start_date, end_date)(2025-01-01, 2025-01-05)(2025-01-01, 2025-01-10)(2025-02-01, 2025-02-05)(2025-02-01, 20..
💻 Backend/이론 및 실습
Index
2026.03.31
Index란?인덱스는 DB에서 데이터를 빨리 찾기 위한 지도 같은 것이다. 인덱스가 없을 경우 DB는 모든 행을 하나씩 다 검색해야 한다.그와 다르게 인덱스가 있을 경우 정리된 지도(인덱스)를 보고 훨씬 빨리 몇 번의 비교만으로 해당 데이터를 찾을 수 있다.이 경우에는 데이터가 아무리 많더라도 속도가 크게 떨어지지 않는 장점이 있다.단점으로는 데이터가 추가 될 때마다 인덱스를 관리해줘야 한다는 것이 있다.(자주 갱신되는 컬럼의 경우에는 트리 구조 재정렬이 매번 같이 필요하기 때문에 비효율적이다.) 인덱스는 테이블과 별도의 자료 구조로 관리 되며, B-Tree 알고리즘을 사용한다. B-Tree에 대해인덱스는 단순히 가나다순 정렬이 아니라, 검색을 위해 데이터를 분할·정렬·균형 유지하는 탐색 트리다.데이터..
💻 Backend/이론 및 실습
QueryDSL 검색 기능 구현
2026.03.30
기본 검색 쿼리 작성List result = queryFactory .selectFrom(user) .where( user.roleEnum.eq(UserRoleEnum.NORMAL), user.email.endsWith("gmail.com") ) // 쿼리문을 실행 .fetch();user 중에서 NORMAL 등급의 gmail.com 이메일을 가진 사용자를 조회하는 쿼리이다. fetch()는 결과 리스트를 반환하며, fetchOne(), fetchFirst()로 단건 조회도 가능하다.(단, 결과가 둘 이상이면 예외 발생)결과 예시앨리스 (alice@gmail.com)찰리 (charlie@gmail.com) 검색 쿼리 작성 (정렬)List result =..