
JPA로 개발을 하게된다면 필연적으로 N+1문제를 겪을 수 밖에 없다고 생각합니다. 저같은 경우 게시판 프로젝트를 진행하면서 JPA를 학습하면서 말로만 듣던 N+1문제를 정말 많이 만나게 되었는데 이를 해결하면서 공부한 내용을 바탕으로 N+1 문제상황을 직접 예제코드로 만들어 해결하는 과정을 포스팅해보도록 하겠습니다. N+1문제상황 만들기 이해를 쉽게하기 위하여 게시판 서비스의 게시글 엔티티인 Post와 회원 엔티티인 User를 다음과 같이 간단하게 작성해보겠습니다. - Post package com.hw.study.entity; import java.util.List; import lombok.*; import javax.persistence.*; @Entity @NoArgsConstructor(acc..
![사이드 프로젝트 [국비의 모든것] - 데이터베이스, 엔티티 설계](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIAcPT%2FbtsiuMKGM9H%2FPzuYdl1vSro7RmDgfetqt1%2Fimg.png)
목차ERD 작성엔티티 설계ERD 작성ERD작성 툴을 기존 프로젝트에서는 eXERD 를 사용하였는데 노트북을 바꾸면서 기존에 쓰던 라이센스를 까먹게 되어서 새로운 툴을 사용해야 했습니다.검색 끝에 ERDCloud라는 툴을 알게되었는데, 웹 기반으로 자동으로 저장되고 몇번 사용해보니 쉬워서 해당 툴을 사용하게 되었습니다. 기존 프로젝트의 ERD는 다음과 같습니다.해당 데이터베이스 설계를 제가 대부분 도맡아서 했었는데, 한눈에 보기에도 유의미한 값이 기본키로 설정되어있고, 다른 테이블들과 복잡한 연관관계를 가지고 있기 때문에 값이 변경되거나 데이터를 삭제할 때 제약조건에 걸려 수정할 일이 발생하면 생각지 못한 사이드이펙트가 많이 발생하였습니다. 이점을 고려하여 새롭게 데이터베이스 구조를 갈아엎었습니다. 물론..
![사이드 프로젝트 [국비의 모든것] - Spring Boot Oracle DB 연결](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD4yj6%2FbtsivgSfMPy%2FoBtusk4vn1VlpaMsrALQ6K%2Fimg.png)
목차Oracle 유저 생성yml 설정 추가Oracle 유저 생성먼저, 저는 프로젝트를 생성할 때 Oracle 에관한 의존성 추가를 해주었습니다. 다음으로, sql developer sys계정에서 프로젝트에 쓰일 개발용 데이터베이스 유저를 하나 생성하고 권한을 부여해줍니다.show user; -- USER이(가) "SYS"입니다.-- 오라클 계정생성시 계정명앞에 c## 을 붙이지 않고 생성하도록 하겠다.alter session set "_ORACLE_SCRIPT" = true;-- Session이(가) 변경되었습니다.-- 그러면 이제부터는 계정생성시 c## 없이 계정 생성이 가능하다.create user 유저이름 identified by 유저비번 default tablespace users;-- User ..
TRUNCATE란? TRUNCATE 예제코드 TRUNCATE란? 기본문법 : TRUNCATE TABLE (테이블명); TRUNCATE TABLE (테이블명); 을 실행하면 테이블명 에 존재하던 모든 행(row)들을 삭제해주고, 테이블명에 해당하는 테이블은 완전초기화 가 되어진다. TRUNCATE TABLE 테이블명; 은 DDL 문이기에 자동적으로 COMMIT; 되어지므로 ROLLBACK 이 불가하다. DELETE FROM 테이블명; 을 실행하면 이것도 테이블명 에 존재하던 모든 행(row)들을 삭제해준다. 이것은 DML문 이므로 ROLLBACK 이 가능하다. TRUNCATE 예제코드 create table tbl_emp_copy1 as select * from employees; -- Table TBL_..
TCL 과 트랜잭션 특정 시점(SAVEPOINT) 까지 ROLLBACK 하기 TCL 과 트랜잭션 트랜잭션이란? -Transaction(트랜잭션)이라 함은 관련된 일련의 DML로 이루어진 한꾸러미(한세트)를 말한다. Transaction(트랜잭션)이라 함은 데이터베이스의 상태를 변환시키기 위하여 논리적 기능을 수행하는 하나의 작업단위를 말한다. 트랜잭션 예시) 네이버카페(다음카페)에서 활동 글쓰기(insert)를 1번하면 내포인트 점수가 10점이 올라가고(update), 댓글쓰기(insert)를 1번하면 내포인트 점수가 5점이 올라가도록 한다(update) 위와같이 정의된 네이버카페(다음카페)에서 활동은 insert 와 update 가 한꾸러미(한세트)로 이루어져 있는 것이다. 이와 같이 서로 다른 DML..
ROWID ROWNUM ROWNUM 으로 페이징처리하기 Pseudo(의사) Column 은 ROWID 와 ROWNUM 이 있다. ROWID - ROWID 는 오라클이 내부적으로 사용하기 위해 만든 id 값으로써 행에 대한 id 값인데 오라클 전체내에서 고유한 값을 가진다. 다음과 같이 SELECT 항목에 ROWID를 넣으면 모든 테이블에서 확인할 수 있다. select userid, name, address, rowid from tbl_heowon; -- 결과 /* ------------------------------------------- USERID NAME ADDRESS ROWID ------------------------------------------- leess이순신 서울 AAAST7AAH..
Set Operator 종류와 설명 Set Operator 종류 UNION(합집합,중복x,자동오름차순정렬) UINON ALL(합집합,중복o,정렬x) INTERSECT(교집합) MINUS(차집합) 각각 Set Operator 를 이용한 예제코드 UNION과 UNION ALL 을 이용하는 예제코드 이용 select * from tbl_panmae; 위의 TBL_PANMAE 테이블을 조회하는 쿼리문 실행결과 ----------------------------------------------------------- PANMAEDATE JEPUMNAME PANMAESU ----------------------------------------------------------- 22/07/02 허니버터칩 30 22/..
![[Oracle] 오라클 Join 과제하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcZxNR%2FbtrHL3PDF6x%2FXkOHV70Qny4oXJprIQ5UK1%2Fimg.png)
학원에서 오라클 내부의 hr계정의 샘플테이블들을 이용한 Join 과제를 내주었다. 예전 컴활 시험을 준비하면서 뭔지도 모르고 봤던 ERD가 이 과제를 할때 조금 도움되었던 것 같다. 과제 문제 ---- [과제] ----- 테이블들을 조인하여 아래의 컬럼들이 나오게 하세요. /* 부서번호,부서명,부서주소,부서장성명,사원번호,사원명,성별,나이,연봉,연봉소득세액,부서내연봉평균차액,부서내연봉등수,전체연봉등수 */ 처음엔 생각없이 바로 코드를 썼다가, 점점 머릿속이 복잡해지고 내가 무슨코드를 쓰고있는지도 알 수 없게 되었다. 결국 문제는 풀었지만, 다시 풀어보려고 하면 정리가 안되어있으니 시간도 오래걸리고, 또 복잡한 SQL을 쓸 것 같아서 한번 그림으로 어떻게 풀지에 대한 고민을 해보고 난 뒤에 손을 대기 시작..
회사에 입사하고난 뒤, DELETE 또는 UPDATE를 할 때 먼저 반드시 해당 테이블을 백업해두고, 그 다음에 DELETE 또는 UPDATE 해야 안전하다. 예시) 상관서브쿼리를 이용하여 테이블 백업 뒤, UPDATE하는 과정 create table tbl_employees_backup as select * from employees; -- Table TBL_EMPLOYEES_BACKUP이(가) 생성되었습니다. EMPLOYEES 테이블을 복사한 테이블 TBL_EMPLOYEES_BACKUP 테이블 생성 select * from tbl_employees_backup; update employees set first_name = '순신', last_name = '이'; -- 107개 행 이(가) 업데이트되었..
서브쿼리란? 서브쿼리 활용 ANY, ALL 상관서브쿼리(서브상관쿼리) 서브쿼리란? - SELECT 문 속에 또다른 SELECT 문이 포함되어져 있을 때 포함되어진 SELECT문을 Sub Query(서브쿼리) 라고 부른다. - Inline View도 서브쿼리의 일종이다. From 절에 서브쿼리가 쓰인다면 Inline View 라고 부른다. - select .... from .... ==> Main Query(메인쿼리 == 외부쿼리) where ... in(select ... from ....) ==> Sub Query (서브쿼리 == 내부쿼리) Sub Query를 이용한 예제코드, -- 문제를 풀기위한 테이블 생성과 데이터 넣기 create table tbl_authorbook (bookname varch..
그룹함수의 종류,특징,주의사항 ROLLUP, CUBE, GROUPING SETS, GROUPNG HAVING 그룹함수 조건절 누적(누계) 그룹함수의 종류, 특징, 주의사항 sum --합계 avg --평균 max --최대값 min --최소값 count --select 되어서 나오는 결과물의 행의 개수 variance --분산 stddve --표준편차 -분산 : 분산의 제곱근이 표준편차(평균에서 떨어진 정도) 표준편차 : 표준편차의 제곱이 분산 (평균과의 차액) 분산과 표준편차는 어떤 의사결정시 도움이 되는 지표이다. - 그룹함수(집계함수)에서는 null 이 있으면 무조건 null을 제외시킨 후 연산을 한다. => 그래서 AVG를 사용할 때에 조심, AVG는 SUM()/COUNT()인데 COUNT에 NULL..
뷰의 정의 - 테이블은 아니지만 select 되어진 결과물을 마치 테이블 처럼 보는것(간주하는 것). Stored View(저장된 뷰 생성하기) create or replace view 뷰명 --> 뷰명으로 되어진 view 가 없으면 create(생성)하고, -- 만약에 뷰명으로 되어진 view 가 이미 존재한다라면 이전에 정의해둔 view를 없애버리고 select 문장으로 replace한다. select 문장; - Stored View 를 사용하여 복잡한 쿼리문을 저장한뒤, 꺼내서 간편하게 별칭으로만 사용할 수 있다. Inline View - 서브쿼리가 FROM 절에 쓰이면 Inline View라고 한다. - 전체 테이블을 비교하는 것 보다 테이블의 일부 데이터만을 불러와서, 그 중에서 조건을 따지는 ..