본문 바로가기

전체 글

(175)
[별빛다리] 게시판 카테고리 조회 API 개선 카테고리 필터링 API별빛다리의 커뮤니티 게시판에서 각 카테고리를 필터링하고, 페이지네이션 기반으로 조회하는 기능이다.개선 전 쿼리explainselect p1_0.post_id, p1_0.category, p1_0.comment_number, p1_0.content, p1_0.img_url, p1_0.like1, p1_0.like2, p1_0.like3, p1_0.member_id, p1_0.title, p1_0.total_likes, p1_0.updated, p1_0.updated_at from post p1_0 wh..
[별빛다리] 댓글 조회 API 쿼리 개선 https://github.com/starlightdari-2-0 starlightdari-2.0별빛다리 ver. 2 : 반려동물과의 소중한 순간을 기록하세요. starlightdari-2.0 has 2 repositories available. Follow their code on GitHub.github.com 1. 댓글 조회 API 개선추억별(게시판)의 댓글들을 조회하는 API이다.1-1. 개선 대상 쿼리EXPLAINSELECT mc.comment_id, mc.content, mc.created_at, mc.memory_id, mc.parent_id, mc.writer_id, mc.writer_nameFROM mem_comment mcWHERE mc.memory..
[별빛다리] 공개 추억 조회 API 쿼리 개선 서론https://github.com/starlightdari-2-0 starlightdari-2.0별빛다리 ver. 2 : 반려동물과의 소중한 순간을 기록하세요. starlightdari-2.0 has 2 repositories available. Follow their code on GitHub.github.com 별빛다리 프로젝트에서 공개된 추억글들을 조회하는 API를 구현하면서, 실행 계획을 기반으로 쿼리 구조를 개선해보았다.현재 추억글 데이터는 5만건 정도 있는 상태이다.개선 대상 API공개된 추억 목록을 조회하는 API는 다음과 같은 조건을 가진다.shared = true 조건 필터링category 조건 필터링 (선택)최신순 정렬LIMIT 기반 페이징EXPLAINselect ms1_0.m..
[우테코 프리코스] 3주차 미션 회고 과제 설명로또 발행기를 개발한다. 로또 구입 금액, 당첨 번호, 보너스 번호를 입력하였을 때 로또 구입 금액만큼 로또 번호를 랜덤 생성하고 당첨 여부를 출력하는 게임이다. 구현할 기능에 대한 내용은 다음과 같다.# 구현할 기능## 1. 입출력 구현### 입력- 로또 구입 금액 (1000원 단위)- 당첨 번호 입력 (, 기준으로 구분)- 보너스 번호 입력### 출력- 발행한 로또 수량 및 번호 출력 (오름차순 정렬)- 당첨 내역 출력- 수익률 출력 (소수점 둘째 자리에서 반올림)## 2. 유효성 검증## 3. 로또 발행 규칙- 로또 한 장은 서로 다른 1~45 범위 6개 숫자- 중복 없이 난수 생성 → 오름차순 정렬하여 저장/표시- 금액 / 1000 만큼 N장 발행- 번호 내부 불변성 보장(컬렉션 불변 처..
[우테코 프리코스] 2주차 미션 회고 과제 설명자동차 경주 게임을 구현합니다. 리드미에 작성한 구현 기능 목록은 다음과 같습니다.이번 과제에서는 프로그래밍 요구 사항을 반영하여 각 함수에서 indent가 3개 이상 넘어가게 하지 않게 하는 것 (메소드 분리)와 테스트 코드 작성하는 부분에 초점을 두고 개발하였습니다.이번 회고는 구현한 기능들 중심으로 작성하였고, 단위 테스트 부분은 제가 깊게 고민한 부분들에 대해서만 작성하였습니다.## 구현 기능 목록### 1. 사용자 입력- 자동차 이름 목록 입력받기- 쉼표(,) 기준으로 분리- 각 이름은 공백이 아니어야 함- 시도할 이동 횟수 입력받기### 2. 입력값 검증- 자동차 이름 유효성 검증 - 이름이 5자 이하인지 검사 - 빈 이름(공백 포함) 허용 금지 - 이동 횟수 유효성 검증 - 숫자인지..
[우테코 프리코스] 1주차 미션 회고 미션 설명덧셈할 문자열이 주어졌을 때, 구분자로 문자열을 나누어 숫자들의 합을 리턴하는 계산기를 만드는 것입니다.구현할 기능 목록은 다음과 같습니다.# 구현할 기능 목록## 입력/출력- 입력 문구 : '덧셈할 문자열을 입력해 주세요.'- 입력 : `camp.nextstep.edu.missionutils.Console.readLine()` 사용- 출력 : '결과 : 합계'## 기본 계산- 빈 문자열 `""` → `0` 반환- 기본 구분자 : 쉼표 `,`, 콜론 `:`- 구분자로 분리된 양의 정수를 모두 더해 합 반환## 커스텀 구분자- 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용- 예: `"//;\n1;2;3"` → `6`## 예외 처리 (IllegalArgumentEx..
[백준] [Java] 뱀과 사다리 게임 16928 문제 설명문제뱀과 사다리 게임을 즐겨 하는 큐브러버는 어느 날 궁금한 점이 생겼다.주사위를 조작해 내가 원하는 수가 나오게 만들 수 있다면, 최소 몇 번만에 도착점에 도착할 수 있을까?게임은 정육면체 주사위를 사용하며, 주사위의 각 면에는 1부터 6까지 수가 하나씩 적혀있다. 게임은 크기가 10×10이고, 총 100개의 칸으로 나누어져 있는 보드판에서 진행된다. 보드판에는 1부터 100까지 수가 하나씩 순서대로 적혀져 있다.플레이어는 주사위를 굴려 나온 수만큼 이동해야 한다. 예를 들어, 플레이어가 i번 칸에 있고, 주사위를 굴려 나온 수가 4라면, i+4번 칸으로 이동해야 한다. 만약 주사위를 굴린 결과가 100번 칸을 넘어간다면 이동할 수 없다. 도착한 칸이 사다리면, 사다리를 타고 위로 올라간다. ..
[JPA] N+1문제와 해결법 JPA N+1 문제 란?연관 관계가 설정된 엔티티를 조회할 경우에, 조회된 데이터 개수(N)개만큼 연관관계의 조회 쿼리가 추가로 발생되는 현상예를 들어, 블로그 게시글과 댓글이 있을 때, 게시글을 조회한 후 각 게시글마다 댓글을 조회하기 위한 추가 쿼리가 발생할 수 있음findAll() 메서드JPA에서 제공하는 repository의 findAll 메서드에서 글로벌 패치 전략을 즉시로딩으로 설정하고, findAll()을 실행하면 주로 N+1 문제가 발생한다.findAll()은 select u from User u 라는 JPQL 구문을 생성해서 실행하기 때문인데, JPQL은 글로벌 패치 전략을 고려하지 않고 쿼리를 실행한다. 모든 User를 조회하는 쿼리를 실행한 후, 즉시로딩 설정을 보고 연관관계에 있는 ..