Back-end Skill/DataBase 15

[queryDsl] fetchFirst() NullPointerException 에러

fetchFirst() NullPointerException 에러가 발생했을 때 이유는 fetchFirst() null을 반환할 경우 발생한다. 이 경우 fetchOne()을 사용하면 해당 에러를 해결할 수 있지만 하지만 fetchOne()은 더 많은 리소스를 사용하여 성능에 영향을 미칠 수 있어 다른 방법을 고려해야한다. 먼저, etchFirst()가 null을 반환하는 이유를 확인해 보자 예를 들어, 조건에 맞는 데이터가 없는 경우 null을 반환하는 것이 의도된 동작이라면, fetchFirst()를 그대로 사용하는 것이 올바른 방법이다. 하지만, fetchFirst()가 null을 반환하는 것이 예상치 못한 결과일 떄 필요한 데이터만 선택적으로 가져오는 등의 방법으로 쿼리를 최적화할 수 있다. 예를..

[PostgreSQL] 운영서버DB를 개발서버로 pg_dump 하는법

프론트에서 운영서버 DB를 개발서버에 맞춰달라는 요청이 들어왔다. 운영서버와 최대한 비슷한 환경으로 작업하면 개발서버로 코드 작업을 할 때도 QA할 때도 에러사항을 더 찾기 편해지기 때문이다. 적어도 잘못된 데이터로 햇갈리는 일들은 없을 거 같다. 참고로 필자의 회사는 postgres를 사용하고 있다. 1. dump를 원하는 데이터베이스에서 sql확장자로 백업파일을 경로를 지정하여 백업파일을 생성한다. pg_dump [dump하고싶은 db명] -U [postgres 유저이름] -h 접속 host주소 -F p -b -v -f /백업파일/경로/ EX) pg_dump prod_database -U usernameSophie -.rds.amazonaws.com -F p -b -v -f /home/ubuntu/d..

[queryDsl] Q-type Class 는 도대체 왜 만드는건가?

Q-type class QueryDSL 설정을 성공하면 @Entity가 붙은 클래스를 찾아 자동생성된다. 예를 들어 @Entity가붙은 Member.kt 클래스가 있다면 QMember.kt 파일이 자동생성된다. repositoryImpl에서 쿼리를 날릴때 메소드 기반으로 쿼리를 작성할 때 우리가 만든 도메인 클래스 구조를 설명해주는 메타데이터역할을 하며 쿼리의 조건을 설정할 때 사용하려고 만드는것이였다. 작성글 삭제하는 쿼리이다. @Entity가붙은 Member.kt 클래스가 있다면 QMember.kt 파일이 자동생성되면서 알아서 객체 이름만 맞춰준다면 쿼리를 코드처럼 편하게 짤 수 있다. override fun deleteBoard(userId: Long, board_id: Long): Boolean ..

[queryDsl] queryDsl에서 데이터 insert하는 방법

queryDsl QueryDSL을 사용하여 쿼리를 Build 하기 위해서는 JPAQueryFactory가 필요하다. JPAQueryFactory를 사용하면 EntityManager를 통해서 질의가 처리되고, JPQL을 사용한다. EntityManager? JPAQueryFactory는 insert()를 가지고 있지않기 때문에 insert를 하려면 EnityManager를 사용한다. @Service @Transactional(readOnly = true) class BoardServiceImpl( val boardRepository: BoardRepository, val em: EntityManager ) : BoardService { /** 작성글 작성 **/ @Transactional override ..

JPA 사용할 때 주의해야할 점 2편_관계매핑의 정의와 mappedBy 이해하기

그렇다면 양방향 관계 해결 방법은?? Entity01 BookStore @Entity @Getter @Setter public calss BookStore { @Id @GenerateValue private Integer id; private String name; @OneToMany(mappedBy ="bookStore") private Set books = new HashSet(); //add 메세지로 책을 책방에 추가한 것 void add(Book book){ book.setBookStore(this); this.books.add(book); } } book.setBookStore(this); 의 의미는 무엇일까? book.setBookStore(this); 를 추가하고 실행시키면 데이터 베이스 결..

Python pandas을 통해 DB 마이그레이션하는 방법

젯브레인에서 파이썬 IDE인 pycahrm를 설치한다. 파이썬을 설치한다. cmd에서 pandas를 설치한다. Python Pandas 설치 및 import 방법 https://danykde0til.tistory.com/m/104 파이썬과 판다스 설치 후 파이참에서 엑셀 파일을 잘 불러오는지 확인해본다. Python Pandas로 Excel 파일 불러오고 조회하는 방법 https://danykde0til.tistory.com/m/105 Python Pandas로 Excel 파일 불러오고 조회하는 방법 import pandas as pd import warnings import os warnings.simplefilter("ignore") fileDir = "C:/Users/SEEYA/Desktop/Dat..

SQL 예제를 통한 LEFT JOIN에 대해 알아보기

틱택토 게임 프로젝트 기능 중 사용자 정보와 승패전적을 함께 업데이트해야하는 페이지가 있다. 이 때 나는 게임회원정보를 담고있는 테이블과 승패전적을 담고있는 테이블의 PK를 조인하여 아래와 같이 내 정보에서 내 아이디와 승패 전적을 띄우는데 성공하였다. 여기서 예제를 알아보기 전에 Join에 대해 알아보자 JOIN이란? 검색하고 싶은 컬럼이 다른 테이블에 있을 경우 사용하며 여러개의 테이블을 하나의 테이블인 것처럼 활용하는 것이다. 보통 Primary key 혹은 Foreign key로 두 테이블 연결하여 사용한다. left outer join, left join 왼쪽 테이블 기준으로 join한다. 기준 테이블의 결과 + 기준 테이블의 중복값을 보여준다. //LEFT OUTER JOIN SELECT A...

MySQL / MariaDB 페이지네이션 쿼리 작성하는 법

이번에 틱택토게임을 진행하면서 게임방목록을 만들 때 위와 같은 화면과 같이 페이징 처리를 해야해서 페이징 쿼리를 진행하였다. 먼저 페이징 쿼리에 필요한 값에 대해 알아보자 Limit 한 페이지에 출력할 데이터의 양 offset Limit*(페이지 번호-1) 페이징 쿼리는 보통 이 구문을 이용하면된다. SELECT * FROM 테이블명 LIMIT #{limit} OFFSET #{offset} 내가 페이징할 때 날린 쿼리는 SELECT * FROM game_kde order by seq desc limit 10 offset #{offset};

TIL 37일차 SQL 데이터베이스 #NULL의 개념과 Not NULL의미

Primary Key를 나타내는 위 사진의 체크박스에 체크를 할 때 DataType 열에 NN이라는 체크박스 보이시나요? NN이라고 써진 부분의 체크박스도 자동으로 같이 체크가 되어있습니다. 왜 체크가 되어있을까요? 그 전에 NN은 무슨 뜻일까요?! NN은 NOT NULL의 줄임말입니다! 즉 NULL이 아니다라는 뜻!! 흠 근데 NULL은 도대체 뭔데...? NULL은 데이터베이스에서 굉장히 중요한 개념이니까! 기억하면서 보기! NULL은 특정 컬럼에서 값이 존재하지 않을 때 값이 존재하지 않는 그 상태를 나타내기 위해서 사용되는 키워드입니다! 멤버테이블을 확인해보면 NULL, 즉 어떤 값이 없음을 나타내고 있는걸 볼 수있어요! 더 정확히 말하면 키 속성의 값이 없다는 뜻! 근데 여기 조심해야할 것 ! ..

TIL 36일차 SQL 데이터베이스 #key

오늘은 SQL key값에 대해 알아보도록해요 ! primary key 테이블에서 하나의 Row를 고유하게 식별할 수 있도록 해주는 column을 primary key라고 합니다! 그러면 member 테이블의 primary key가 바로 id컬럼이라는 사실! 그러면 특정 칼럼을 Primary Key로 설정하면 Primary key에 같은 값이 있는 row가 추가되는 것을 DBMS가 자동으로 막아주기 때문에 중복된 row가 생길 위험성이 사라집니다! Natural Key 실제로 어떤 개체가 갖고 있는 속성을 나타내는 컬럼이 Primary key가 됐을 때, 이를 Natural Key라고 합니다. 사람은 주민등록번호로 특정인물을 식별하죠? 우리가 읽는 여러 책들도 책 코드로 분류하여 식별하기도 합니다! 전 포..