본문 바로가기

mysql

Docker Mysql 테스트서버 DB분리 목차· 개요· 환경분리 Spring boot dev,prod 파일· 결론  개요인턴 프로젝트를 진행하면서 Staging 별 Spring서버가 분리되면서 DB도 분리해야 했다.각각 DB가 다 다르게 담겨야하는데 어떻게할지 찾아보다 간단해서 바로 블로그로 옮기게 됐습니다  환경분리 Spring boot dev,prod 파일방법 1 Docker Mysql dev , Prod 각각 띄우기spring: profiles: active: dev include: test datasource: url: jdbc:mysql://dev-mysql:3306/testdb?characterEncoding=UTF-8 username: root password: password driver-cla.. 더보기
Statement보다 PreparedStatement를 사용해야하는이유 목차· 개요· Statement, PreparedState 동작방식· Statement,PreparedState 차이점· 결론   개요 · Statement 종류에는 Statement,PreparedStatemennt,CallableStatement 3가지가 존재한다.· CallableStatement는 PL/SQL문을 호출할 때 사용한다고 했지만 성능상 이슈로 인해 거의 사용하지 않는다.· 실무에서는 Statement를 사용하지않고 PreparedStatement를 사용한다고하는데 왜 그런지 이유를 알아보자. Statement, PreparedState 동작방식동작방식1. 구문 분석(Parsing) 및 정규화(Normalization)- Query 문법 확인 및 데이터베이스, 테이블 존재여부 확인2. .. 더보기
면접을 위한 CS 전공지식 노트 4장 데이터베이스 데이터베이스 기본 데이터베이스는 일정한 규칙,혹은 규악을 통해 구조화되어 저장되는 데이터의 모음. 해당 데이터베이스를 제어 , 관리하는 통합 시스템을 DBMS라고하며 , 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입,삭제,조회 등을 수행할 수 있다. 또한 데이터베이스는 실시간 접근과 동시 공유가 가능합니다. 엔티티란 ? 사람 ,장소,물건,사건,개념 여러개의 속성을 지닌 명사를 의미 예) 회원 엔티티 : 이름,아이디,주소,전화번호 속성을 갖습니다. 약한 엔터티와 강한 엔터티란 ? 예를 들어 A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔터티이고 B는 강한 엔터티가 됩니다. 예) 방은 건물안에만 존재할 수 있기떄문에 방은 약개체.. 더보기
mysql index를 타지않는 경우 인덱스를 타지 않는 경우 1. 인덱스 컬럼의 변형 select * from table where LOWER(name) ='word'; select * from table where idx - 1 = 5; 이 처럼 인덱스에 변형을 가하게 되면, DBMS가 인덱스를 이용하지 않는다. 2. 인덱스 컬럼의 내부적인 데이터 변환 select * from table where age = '30' 문자값 데이터타입을 갖는 컬럼에 ‘값’ → 값 을 하지 말고 정확한 데이터 타입을 넣어야 인덱스를 탈 수 있다. 3. NOT 또는 IN 연산자 사용 NOT일 경우에도 인덱스를 타긴 타지만, 일반적으로, NOT에 사용된 값이 아닌 데이터의 비율이 높은 경우가 많기 때문에 인덱스를 타지 않는 경우가 많다. 마찬가지로 IN일 경.. 더보기
Querydsl 방언 사용하기 Dialect JPA를 사용하면 데이터베이스 문법을 잘 알지 못해도 hibernate에 의해 설정한 데이터베이스의 쿼리로 바꿔준다. SQL,JPQL은 문자열인 반면 QUERYDSL을 사용하게 되면 java코드로 쿼리를 작성할 수 있게되고 컴파일 시점에 문법오류 를 확인할 수 있다는 큰 장점이 있다. application.yml에 사용하는 DB의 dialect가 설정되어있다. spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect FullText Search는 Dialect에 등록된 함수가 아니였기 때문에 querydsl 에서 사용할 수 없기 떄문에 별도로 커스텀해줘야한다. application.yml 설정 jpa: show-sql: true h.. 더보기
mysql DB 데이터 백업/복구(export/import) dump뜨는법 내 로컬에 있는 mySQL의 사용자 정보나 테이블을 import/export 하고 싶을 때 sql 파일을 빼거나 밀어넣어 보자 주의해야 할 것은 mysql 접속해서 입력하는 게 아니라, mysql 밖 터미널에서 입력하는 것이다 ① DB Export mysqldump –u DB사용자 –p DB명 > 파일명 ex) mysqldump -u root -p shabDB > /home/user/test.sql ⑴ 사용자를 포함한 전체 DB를 export할 때는 -A 옵션 사용 mysqldump -u root -p -A > 파일명 ex) mysqldump -u root -p -A > test.sql ⑵ DB에서 특정 테이블만 제외하고 export할 때는 --ignore-table 옵션 사용 mysqldump –u D.. 더보기
MYSQL 조회시 FLOW MySQL 조회시 플로우 아래는 MySQL 서버에 조회를 요청 했을 때 flow chart입니다. 여기서 client는 쿼리를 요청한 클라이언트, 즉 SQL을 입력한 개발자입니다. Query Cache SQL문이 key, 결과가 value인 맵입니다. 데이터가 변경되었으면 쿼리캐시가 삭제되어야겠죠?(조회 결과가 달라질 것이기 때문에) 이는 동시 처리 성능 저하를 유발하고, 버그의 원인이 되어 MySQL 8.0 버전부터는 삭제되었습니다. Parsing 사용자가 요청한 SQL을 잘게 쪼개어 서버가 이해할 수 있는 수준으로 분리합니다. Preprocessing 해당 쿼리가 문법적으로 틀린지 확인하여 부정확하면 처리를 중단합니다. (흔히 만나보는 syntax 에러는 parser와 preprocessor에서 발생.. 더보기