본문 바로가기

전체 글89

[JPA] N+1 문제 해결을 위한 Fetch Join 해당 게시글은 "프로그래머스 데브코스 4기"의 팀 내 프로젝트 기록용으로 TECH BLOG에 직접 작성한 글입니다. 🩶 N+1 문제란? 최대한 연관관계가 없이 Long타입으로 id만 받아서 프로젝트를 진행하던 와중..! 결국 review와 product, user의 연관 관계가 필요한 상황이 발생하게 되었다. 그래서 N:1 연관 관계를 맺었는데..! 연관 관계를 맺는 동시에 N+1문제가 발생하였다 N+1문제란, 1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것이다. 원치않는 쿼리가 실행된다면 시스템의 성능이 저하될 수 있다. Q. Lazy(지연로딩)옵션을 걸어줘서 괜찮은 거 아닌가요? A. 하위 엔티티로 작업을 하게 되면 추가적인 조회가 어차피 발생하기 때문에 결국 N+1문제가.. 2023. 9. 21.
[jpa] hibernate 자동 생성되는 sql 확인하기 jpa: properties: hibernate: show_sql: true format_sql: true show_sql: hibernate가 만들어내는 sql문을 출력 format_ sql: 출력되는 sql문을 예쁘게 출력하기 위한 속성 초기 데이터로 스키마 적용하는 방법 sql: init: mode: always # always, never, embedded sql-init-mode: 을 설정해주면 각각 root class path 위치의 schema.sql 과 data.sql에서 SQL을 로드한다. default로 SQL database initialization은 embedded in-memory database를 사용할 때만 수행된다. 유형에 관계 없이 SQL database를 항상 초기화하려.. 2023. 9. 4.
[켄트 백의 구현 패턴] 1 - 4장 해당 게시글은 "프로그래머스 데브코스 4기"의 팀 내 스터디 과정으로 노션에 직접 작성한 글입니다. 01. 소개 이 책을 볼 때 구현을 위한 단순한 기법 그 이상의 것을 담아내고 있고 그것을 캐치해야 한다 또한, 디자인 패턴과 자바 언어 매뉴얼의 중간 정도에 해당하는 책이다 핵심 나 자신만을 위한 코드가 아닌 다른 사람을 위한 프로그램을 작성하자 패턴은 매일 반복적으로 발생하는 코딩 작업을 어떻게 해야 나중에 다른 사람이 코드를 쉽게 알아 볼 수 있을지를 명시해둔 것이다 변수에 이름을 짓는 것 또한 패턴이다. 매번 다른 이름의 변수를 짓지만 과정에서 필요한 결정 사항들과 제약 사항들은 항상 반복되기 때문 소개: 커뮤니케이션을 돕는 코드의 중요성과 패턴의 기본 철학에 대한 짧은 소개 클래스: 왜, 어떻게 .. 2023. 8. 24.
[java] Transaction과 격리 레벨에 대해서 해당 게시글은 "프로그래머스 데브코스 4기"의 팀 내 스터디 TL 과정으로 노션에 직접 작성한 글입니다. 트랜잭션(Transaction)이란? 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위 작업의 단위가 CRUD 문인가에 대한 의문이 들 수 있다고 생각한다. 게시판에서 작업의 단위를 나눈 예시를 들어보자! 게시판 사용자가 게시글을 작성하고 업로드 버튼을 눌러 업로드 다시 게시판으로 돌아와 게시판 목록에서 자신이 업로드한 게시글을 확인 1번은 Insert 질의 2번은 Select 질의 그럼, 작업의 단위가 Insert와 Select으로 2개인가요? 라고 말할 수 있겠지만 작업의 단위는 Insert와 Select 질의를 합친 행위로 1개 라는 개념으로 이해해야 한다 트랜잭션 특징 (ACID) .. 2023. 8. 15.
[MySQL] 부분 문자열 가져오기 - LEFT, MID, RIGHT 함수 (1) LEFT(문자, 가져올 갯수) => 문자 왼쪽을 기준으로 일정 갯수를 가져오는 함수 SELECT LEFT('123456789', 3); -- 결과: 123 (2) MID(문자, 시작 위치, 가져올 갯수) = SUBSTR, SUBSTRING 함수의 동의어 => 문자의 지정한 시작 위치를 기준으로 일정 갯수를 가져오는 함수 SELECT MID('123456789', 2, 4); -- SELECT SUBSTR('123456789', 2, 4); -- SELECT SUBSTRING('123456789', 2, 4); -- 결과: 2345 (3) RIGHT(문자, 가져올 갯수) => 문자 오른쪽을 기준으로 일정 갯수를 가져오는 함수 SELECT RIGHT('123456789', 3); -- 결과: 789 .. 2023. 5. 9.
[MySQL] NULL값 치환 - IFNULL, IF, NULLIF, CASE, COALSECE 함수 (1) IFNULL(컬럼명, 치환값) => 컬럼명이 null인 경우 치환값으로 치환하여 반환 ex) CHECK 컬럼이 null인 경우 N으로 치환하여 출력 SELECT IFNULL(CHECK, 'N') FROM TABLE; (2) IF() + IS NULL => IF(컬럼명 IS NULL, 'TRUE 값', 'FALSE 값') SELECT IF(CHECK IS NULL, 'N', 'Y') FROM TABLE; (3) NULLIF(값1, 값2) => (값1 == 값2)인 경우 NULL을 반환, FALSE인 경우 값1을 반환 SELECT NULLIF(1,1) -- null SELECT NULLIF(1,2) -- 1 (4) CASE => 해당 컬럼 값을 조건식을 통해 True, False를 판단하여 조건에 맞.. 2023. 5. 4.
[MySQL] LIKE, CONCAT, ROUND 함수 LIKE : 특정 문자 포함 검색 - 특정 문자로 시작하는 문자열 검색 SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '특정 문자열%'; - 특정 문자로 끝나는 문자열 검색 SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '%특정 문자열'; - 특정 문자를 포함하는 문자열 검색 SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '%특정 문자열%' - 복수개의 특정 문자열을 포함하는 문자열 검색 1 SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '%특정 문자열%' OR [필드명] LIKE '%특정 문자열2%' - 복수개의 특정 문자열을 포함하는 문자열 검색 2 SELECT [필드명] FROM [테이.. 2023. 4. 30.
[Java | Algorithm] 연속된 자연수의 합 - 수학적풀이 lt와 rt로 2개의 pointer 개념을 이용한 문제풀이 방법은 이해가 됐지만 이런 수학적 풀이는 금방 까먹을게 뻔하기 때문에 (나 자신은 내가 잘 안다) 기록해두려 한다 ~.~ 설명 N입력으로 양의 정수 N이 입력되면 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법의 가짓수를 출력하는 프로그램을 작성하세요. 만약 N=15이면 7+8=15 4+5+6=15 1+2+3+4+5=15 와 같이 총 3가지의 경우가 존재한다. 입력 첫 번째 줄에 양의 정수 N(7 15는 4개의 연속된 숫자 합으로 표현 불가능 즉, 자릿수만큼 연속된 숫자(cnt가 3이면 1, 2, 3)를 n에서 뺀 값을 자릿수와 % 연산했을 때 결과값이 0일 때(= 나누어 떨어질 때) cnt만큼 연속된 숫자합으로 n을 표현할 수 있다.. 2023. 4. 16.
[CS면접] 백엔드 신입 개발자 필수 대답 질문 (초급) HTTP Method get, post의 차이점을 설명해 보시오. get post - 클라이언트에서 서버로 리소스를 요청하기 위해 사용하는 method - 서버에서 원하는 리소스를 가져와 조회 할 때 사용한다 - 리소스의 값, 내용, 상태를 바꾸지 않는다 - get은 캐시되어 브라우저에 기록된다 - 클라이언트에서 서버로 리소스를 생성/수정할 때 사용하는 method - 서버의 리소스 값, 상태를 수정하기 위해 사용한다 - post는 캐시되지 않아 브라우저에 기록되지 않는다 HTTP 상태 코드에 대해 설명해 보시오. 주요 상태 코드 (200, 404, 503)에 대해선 설명할 수 있어야 한다. 200 : 성공(OK), 요청이 성공적이다. 요청에 따른 응답을 반환한다. 404 : 요청받은 리소스를 찾을 수 .. 2023. 4. 5.