본문 바로가기

전체 글

(403)
API 최적화1 - N + 1 문제, Lazy 메커니즘, 패치조인 N + 1 문제 Ex) 주문내역 엔티티는 회원 엔티티와 상품정보 엔티티 두개를 가지고 있다고 해보자 이 때, 주문내역 엔티티를 조회하면 어떻게 될까? 만약 3개의 주문내역이 있다고 생각해보자 그렇다면 결과는 3개가 나와야한다. 즉, 조회된 엔티티의 개수(N)만큼 추가적인 쿼리가 발생하는 문제를 뜻한다. 주문내역 엔티티를 구하기 위한 질의를 던진다. 주문내역에 회원 엔티티를 구하기 위한 질의를 던진다. 상품정보 엔티티를 구하기 위한 질의를 던진다. 지금 주문 내역 엔티티를 구하기 위해 쿼리가 2개가 더 날아갔다. 이것이 1 + N 문제이다. 하나의 쿼리면 될 것을 몇개나 더 날린다. 그리고 주문내역이 3개 있으므로 이 엔티티는 무려 7개의 쿼리를 날려야한다. 단순히 생각해도 네트워크 통신이 많다. 왜 이럴..
백준 25401번 카드 바꾸기 (C++) https://www.acmicpc.net/problem/25401 25401번: 카드 바꾸기 $N$개의 카드가 놓여있다. 편의상 가장 왼쪽에 있는 카드를 $1$번 카드, 그 다음에 있는 카드를 $2$번 카드 $\dots$, 가장 오른쪽에 있는 카드가 $N$번 카드라고 하자. $N$개의 카드에는 각각 정수가 하 www.acmicpc.net 수학적인 테크닉이 조금 필요한 문제이다. 일정하게 증가,감소 수열을 만들어야하기 때문에 처음 떠오른 방식은 dp, 이분탐색이었다. 1. DP : 내가 DP를 잘 못하기도 하고 어떻게 점화식을 짜야할지 감이잡히지 않았다. 2. 이분탐색: 숫자의 범위가 -100만~ 100만이기 때문에 이분탐색을 떠올리고 가장 최적의 증가, 감소치를 찾으면 될 것이라 생각하였으나. 만약 4..
백준 2758번 - 로또(C++) https://www.acmicpc.net/problem/2758 2758번: 로또 선영이는 매주 엄청난 돈을 로또에 투자한다. 선영이가 하는 로또는 1부터 m까지 숫자 중에 n개의 수를 고르는 로또이다. 이렇게 열심히 로또를 하는데, 아직까지 한 번도 당첨되지 않은 이유는 www.acmicpc.net 별로 특별해 보이지 않은 문제였다. 조합을 구하되 조건이 있는 조합이기 때문에 백트래킹으로 가지를 잘 치면 통과할 수 있을 것이라 생각했다. 그러나 계속 시간초과가 났고 구글링 해보니 dp 문제였다. 역시 난 dp가 약하다.. 아무튼, 1 2 4 8 1 2 4 9 1 2 4 10 1 2 5 10 이 가능하다고 할 때, 위 조합을 잘 보면 10개 중 3개를 뽑는 개수를 포함하고 있다. 왜냐하면 10개 중 4..
백준 11062번 카드 게임 C++ https://www.acmicpc.net/problem/11062 11062번: 카드 게임 근우와 명우는 재미있는 카드 게임을 하고 있다. N개의 카드가 일렬로 놓여 있다. 각 카드에는 점수가 적혀있다. 근우부터 시작하여 번갈아가면서 턴이 진행되는데 한 턴에는 가장 왼쪽에 있는 www.acmicpc.net 누가봐도 나 DP에요! 소리치고 있는 문제이다. 다만 아이디어를 떠올리기는 쉽지 않았다. 1 2 3 4번 인덱스가 있을 때 난 dp[1] dp[4] 를 만들어서 왼쪽을 선택시, 오른쪽을 선택시를 고려해서 고르는 것을 택했다. 그러나 이것은 정답이 아니었고.. 2차원 배열을 사용하는 것이 정답이었다. dp[x][y] 라고 할 때 x번~y번이 인덱스에서 최댓값을 가지고 있으면 된다. 그리고 문제 조건에서..
SQL - 날짜 출력 방법 Specifier Description Example 1 %Y 연도(year): 4자리 표현 2021 2 %y 연도(year): 뒤에서 2자리 표현 21 3 %a 요일(weekday): 이름 줄임표현 Mon, Tue, Wed, ... 4 %W 요일(weekday): 이름 Sunday, ..., Saturday 5 %w 요일(weekday): 숫자 활용 0 = Sunday, ... , 6 = Saturday 6 %b 월(month): 이름 줄임표현 Jan, Feb, Mar, ... 7 %M 월(month): 이름 January, February, ..., December 8 %c 월(month): 숫자 표기(자릿수 고정 X) 0, 1, 2, ..., 12 9 %m 월(month): 숫자 표기(자릿수 2개로..
Spring Boot - 로그를 남기는 법 : @SLF4J 로깅에 대한 추상 레이어를 제공하는 인터페이스의 모음. 1. Log Level Trace Debug Info Warn Error Trace O O O O O Debug X O O O O Info X X O O O Warn X X X O O Error X X X X O Trace : 디버그보다 좀 더 상세한 정보를 나타냄 Debug : 프로그램을 디버깅하기 위한 정보 지정 Info : 상태변경과 같은 정보성 메세지를 나타냄 Warn : 처리가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지를 나타냄 Error : 요청을 처리하는 중 문제가 발생한 경우 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Slf4jSam..
프로그래머스 - 재구매가 일어난 상품과 회원 리스트 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/131536 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 그룹화를 사용해야하는 문제이다. 요구사항은 유저와 상품 아이디를 함께 세는 것이다. 그러므로 두 컬럼을 그룹화하고 그 갯수를 새어 2개 이상이면 select 하도록 쿼리를 짠다. SQL문제를 풀 땐 어떤 컬럼끼리 연관이 있는지, 그 컬럼을 어떤 조건으로 빼내올지를 잘 생각해야한다. 이 문제를 풀기 위해서는 그룹화를 생각하고 그룹화한 컬럼들을 having 절로 어떻게 데려올지를 생각해내는 문제였다..
SSR과 CSR CSR : 클라이언트 사이드 렌더링 웹사이트에 접속했을 때, 웹 사이트를 보여주기 위한 과정을 렌더링이라고 하는데 CSR은 렌더링이 클라이언트 측에서 이루어지는 것을 뜻한다. 즉 서버는 요청을 받으면 클라이언트에 HTML과 JS를 보내고 클라이언트가 렌더링을 시작한다. 1. 유저가 요청을 보냄 2. CDN이 HTML 파일과 js로 접근할 수 있는 링크를 클라이언트로 보냄 - cdn이란 엔드 유저의 요청에 물리적으로 가까운 서버에서 요청에 응답하는 방식 3. 클라이언트는 HTML과 js를 다운로드 이 때 유저는 아무것도 볼 수 없음 4. 브라우저가 js 다운로드 5. js가 동작함 api를 콜하고 유저는 플레이스홀더를 보게됨. 플레이스 홀더란 문자나 이미지가 들어가기 전 임시로 표시해주는 문구나 이미지를 ..