
스파르타 첫 시작

프론트 백엔드 전체적인 플로우 확인

오늘은 mockAPI를 이용해서 맛집 목록 CRUD를 구현했다.

자바 기초 문법을 다시 복습할 수 있는 시간이어서 좋았다.

자바 기초 문법 2일차

Git과 Github를 사용하는 이유

GitHub 협업

예외처리, Optional

컬렉션이란?

getter, setter 공식

Enum이란?

계산기과제 제네릭 추가

객체지향적 코딩에 대해서 생각해보았다

무분별한 Setter를 줄이자

스프링 정리

java Schedule savedSchedule = scheduleRepository.save(schedule); java // 일정 전체 조회 기능 public List getAllSchedules() { // 1. DB에서 일정 전체 조회하기 List scheduleList = scheduleRepository.findAll(); ...

3.데이터베이스 접근 방법(JPA) 01. JPA(Java Persistence API) >JPA(Java Persistence API) 는 자바에서 ORM을 위한 표준 명세 입니다. a. ORM(Object Relational Mapping) >데이터베이스를 Ob

7. 조회전략과 N + 1 01. ⭐ JPA 조회 전략 a. Eager Loading - 즉시 조회 > 단방향(@MnayToOne) 의 기본 조회 전략입니다. 엔티티를 가져올때 연관된 엔티티도 함께 조회합니다. > i. 즉시 조회 설정 방법 ii. 즉시조회 코드로 살펴보기 - V1, V2 > 학생 정보만 조회하더라도 연관된 수업의 정보를 함...

인기 숙소 조회 성능을 개선하기 위해 Redis 응답 캐시를 적용했다. 캐시가 존재하는 동안에는 동일한 인기 숙소 요청이 들어와도 Redis에 저장된 완성 응답을 바로 반환하기 때문에 Redis 랭킹 조회와 MySQL 조회를 생략할 수 있었다. 그런데 캐시를 적용했다고 해서 모든 문제가 끝난 것은 아니었다. 캐시의 TTL이 만료되는 순간 동일한 요청...

RoomPick의 인기 숙소 기능은 사용자가 숙소 상세 페이지를 조회할 때 Redis에 점수를 기록하고, 점수가 높은 숙소를 인기 숙소 목록으로 제공한다. 처음에는 동일한 인기 숙소 요청이 반복될 때마다 Redis와 MySQL을 다시 조회하는 비용을 줄이기 위해 인기 숙소 응답 캐시 V1을 구현했다. V1을 적용한 뒤 응답 속도와 처리량은 크게 개선됐...
📍 5만 건 위치 검색, 573ms를 91ms로 줄인 과정 — Bounding Box와 Elasticsearch 비교
문제는 캐시가 만료되는 순간이었다.
과거에 조회수가 높았던 숙소가 계속 상위에 남는다.
같은 주문에 접근하려는 다른 요청은 PortOne의 응답과 아무런 관계가 없음에도 Lock이 풀릴 때까지 기다리게 된다.
재고가 5개뿐인데 20명의 사용자가 거의 동시에 구매 버튼을 누르면 어떻게 될까?
PortOne에서는 실제 환불에 성공했는데 이후 우리 서버의 주문 상태 변경이나 재고 복구가 실패하면 어떻게 해야 할까?
재고 복구 과정에서도 동시성 문제가 발생할 수 있었다.
조회 API에서 엔티티 전체를 가져올 필요가 있을까?