mysql 9

junit repository test - 서비스용DB mysql과 테스트DB h2사용

springboot, jpa, mysql 을 이용하여 간단한 crud기능만들었다고 가정했을때, repository를 대상으로 테스트코드를 짜서 junit테스트를 진행해보고자 한다. 여기서는 테스트코드를 짜는 방식에 대한 설명보다는 DB connection을 위한 설정, application.yml과 같은 설정파일, 어노테이션 설정 등 기본 환경설정을 어떻게 해야 하는지 위주로 설명하도록 하겠다. 웹서비스 과정에서 data가 실제 쌓이는 mysql을 대상으로 테스트코드를 실행하는 방법과 테스트용DB인 H2 DB를 사용하는 두가지 방법으로 나눠서 설명할 예정이다. 서비스용 DB인 mysql을 대상으로 한 TEST방법 먼저, build.gradle에 아래와 같이 spring-boot-starter-test를 ..

Spring Scheduler - 게시판 예약 글쓰기

게시판에 글을 쓸때 예약 글쓰기 기능을 사용해본 적이 있을 것이다. 여기서는 Spring의 기능 중 Schedule(cron)을 사용하여, mysql database를 update해 나감으로서 게시판의 예약 글쓰기 기능을 간단하게 구현해보고자 한다. -관련 git source : https://github.com/kimseonguk197/spring_scheduler -사용 stack : spring boot, JPA, mysql, thymeleaf UI 글작성 기본적인 UI는 아래와 같이 글작성을 할 수 있는 게시판이다. 글작성란으로 들어오면 위와 같이 posting할 글 내용을 작성하면 되는데, 예약설정 여부를 check하고, 예약시간을 분단위로 입력해주면 된다. 현재시간은 15:33분이고, 15:5..

RDB index 원리

인덱스란 무엇인가? 라고 검색하면, 색인과 목차를 말하고 사전을 말하곤 한다. 그런식의 비유는 좋은 비유이나 직관적으로 와닿지는 않는 것도 사실이다. index는 눈에보이는 테이블이 존재 하지 않다보니, 글로만 공부하게 되면 다소 머릿속에 그 형태가 그려지지 않는다. 아래와 같은 mysql서버에 구성된 회원정보 테이블이 있다고 하자. id(pk) name email(unique) password 1 kim test@naver.com abc1234 2 kim test2@naver.com abc1234 ... ... ... ... 1000 park test1000@naver.com abc1234 위 테이블 컬럼의 구분자로서 id를 primary key를 지정하였고, email 주소는 중복될수는 없기에 uni..

MYSQL SHOW INDEX

index 정보를 확인하기 위해 "show index from 테이블명;"을 하는 경우가 있다. 조회되는 주요 값들 중 어려울 수 있을만한 값들에 대해 정리하고자 한다. (너무 쉬운 내용은 뺐습니다.) 공식문서를 기반으로 내용을 추가하여 정리하였습니다. 출처)https://dev.mysql.com/doc/refman/8.0/en/show-index.html Non_unique : 0인경우 unique, 1인 경우 non-unique Key_name : pk값의 인덱스명은 언제나 PRIMARY. 명령문을 통해 만들때는 지정한 index명. orm을 통해 생성할땐 프로그램에서 만들어준 인덱스명(난수값). Seq_in_index : 멀티컬럼인덱스일경우 순서, 1부터 시작합니다. 단일컬럼 인덱스일경우 1 Col..

JPA auto-ddl update는 컬럼 속성을 수정하지 않는다.

현재 author 테이블은 위와 같은 데이터 타입과 lenth를 가지고 있다. password length가 너무 길어 100으로 줄이고자 하는데, 아래와 같이 length를 100으로 바꿔 서버를 재기동하였는데도 db alter가 제대로 작동하지 않는다. auto-ddl은 update로 설정돼 있는 상황. 이유는 ddl-auto에 update 설정을해도 jpa에서 컬럼 속성은 변경이 되지 않기 때문이다. @Setter @Getter @Entity public class Author { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 50) private ..

GROUP BY 2개 이상

위와 같이 생긴 상품 구매 table이 있다고 하자. 동일한 상품을 2번이상 재구매한 고객을 따로 추출하고자 한다. 즉, 어떤 고객이 어떤 상품을 재구매했는지 파악하고자 한다. 위의 테이블을 보면 id 1번 고객은 상품3을 2번 재구매 하였다. 2번 고객은 2번이상 재구매한 상품은 없다. 3번 고객은 상품1을 2번 재구매 하였으므로 최종적으로 아래표와 같은 형태의 데이터가 추출 되어야 한다. USER_ID PRODUCT_ID 1 3 3 1 이때 user_id로만 group by하여 count(*)>=2 하게 되면, 1,2,3고객 모두가 조회가 될 것이고, product_id로만 group by하여 count(*)>=2 하게 되더라도, 원하는 값을 얻지 못할것이다. 그래서 2번 이상 구매한 user중에 같..

DB,서버 타임존 일괄 UTC 세팅 후 client에서 KST 출력

하나의 웹서비스를 특정 지역에서 제공하기 위해서는 필수적으로 고민하게 되는 개발이슈는 local 시간에 대한 문제이다. 글로벌한 회사들은 고민의 여지 없이 DB,linux,서버프로그램의 모든 서버의 시간대를 UTC로 설정한 뒤에, 클라이언트 화면단에서 각각의 국가에 맞게 시간을 세팅하여 화면을 제공할 것이다. 그러나, 한국에서만 서비스를 제공하는 은행, 공공기관 같은 경우에는 경험상 서버, DB세팅을 한국시간대인 KST로 하는 경우도 적지 않았다. 사실, KST로 세팅하게 되면 DB에 저장되는 생성일, 수정일 등의 날짜와 서버로그 또한 한국시간대로 설정이 되어 보고를 위한 데이터추출 또는 로그트래킹 등 개발자들입장에서 편리한 부분이 많은것도 사실이다. 다만, UTC든 KST든 통일된 시간대로 운영체제, ..

mysql csv file export

dbeaver, 워크벤치, DataGrip 등 대부분의 tool들에는 export가 있어 편하게 csv파일로 데이터를 export할 수 있다. 그러나, idc 환경이라든가, tool사용이 어려운 상황에 명령어로 export를 해야 하는 경우가 있다. 그 경우엔 select하여 조회된 데이터들을 직접 export해주어야 한다. 그 절차와 시행착오에 관해 정리해 보았다. 0.mysql 접속 - 파일 import/export 경로 확인 명령어 : SHOW VARIABLES LIKE “secure_file_priv”; 1.만일 경로가 잡혀 있는 경우 - 테스트 : SELECT * FROM 테이블명 INTO OUTFILE ‘위의 export 경로/test.csv’; - 정상적으로 csv파일이 생성돼 있는 것을 확..

docker mysql DB와 django 연동

django로 간단한 서비스를 만들던 중, 로컬 mysql db가 여러군데 사용이 되고 있어서, docker로 db를 띄워 연동해보고자 한다. docker-compose를 사용했고, 아래와 같이 docker-compose.yml에는 기본설정만 하여 db를 생성했다. version: "3.7" # 파일 규격 버전 services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의 ( 컴포즈에서 컨테이너 : 서비스 ) mysql_todo: # 서비스 명 platform: linux/x86_64 image: mysql:5.7 # 사용할 이미지 restart: always container_name: mysql_todo # 컨테이너 이름 설정 ports: - "3308:3306" # 접근 포트 설정 (컨테이너 ..