DB 17

[Redis] 레디스 캐시를 사용하면 조회 성능이 몇 배 정도 빨라질까? (@Cacheable)

1. 레디스 캐시 안 썼을 때 조회 시간SecuritySupportSvcImpl @Override public List getLoginUserRole(String userId) { return securitySupportDao.getLoginUserRole(userId); } 컨트롤러 @GetMapping("/mapg") public List getLoginUserRole() { final List list = securitySupportSvc.getLoginUserRole("admin"); return list; } 호출을 하면 64초 정도가 나온다. 여러번 호출해봐도 비슷하다. 2. 레디스 캐시 썼을 때 조회 시간SecuritySupportSvcImpl @C..

DB/Database 2024.07.31

[Redis] Redis 라이브러리 3종 비교 (Spring redis vs Lettuce vs Redisson)

키밸류 저장소인 Redis는 유명한 클라이언트 라이브러리들이 3가지가 있습니다. Lettuce, Redisson, Jedis가 있는데, 오늘은 스프링 데이터 레디스와 Lettuce, Redisson 이렇게 3가지를 비교하며 코드를 작성해보겠습니다. (Jedis는 구현 방식이 간단하지만, 비동기 처리를 지원하지 않으며 Thread-safe 하지 않아 잘 쓰지 않는 추세라고 합니다.)  📝 목차1. spring data redis2. Lettuce3. Redisson사용 사례별 추천  💻 사용한 기술spring boot : 3.3.1java : 17Mavenspring-data-redis : 3.3.1lettuce : 6.3.1redisson : 3.16.3 1. spring data redissprin..

DB/Database 2024.07.28

[Redis] CentOS8에 redis 설치 및 springboot 연동하기

개발 중인 회사 서비스에서 카프카에서 정제한 데이터를 임시데이터베이스에 저장하고, api로 호출해서 사용자 화면에 리턴해야 하는 기능을 개발했다. 처음엔 카프카 스트림즈에서 제공하는 KTable , RocksDB 를 사용했었다.카프카에서 제공하는 라이브러리라서 의존성만 추가해주면 사용할 수 있어서 편리하긴 하지만,카프카에 종속성이 있기에 (카프카 서버가 죽으면 외부 저장소를 사용할 수가 없다..) 리스크가 있어 외부 데이터베이스인 redis로 바꾸기로 했다. redis 를 적용하는 과정을 정리해보았다. springboot 버전 : 2.5.4redis 버전 : 3.3.1총 적용 소요시간 : 1시간 1. redis 서버 설치1) 도커로 설치docker pull redis2) 방화벽 설정firewall-cmd..

DB/Database 2024.06.27

[MyBatis] getter 메소드 자동 사용(?)

Dto의 getter 메소드는 sql 문에서 사용될 수 있을까??? SELECT c.idx, c.member_idx, c.title, c.contents, c.crte_dt, c.del_yn FROM tb_community c c.del_yn = 'N' AND c.title LIKE '%${keyword}%' ORDER BY crte_dt DESC LIMIT #{pSize} OFFSET #{pIndex} 이전 쿼리를 보며 새로운 쿼리를 작성하던 중 궁금증이 생겼다. LIMIT #{pSize} OFFSET #{pIndex} 이 부분이다. 포스트맨 요청은 이렇게 pSize, pNum 이렇게 넣어서 조회를 한다. 그런데, 쿼리에서는 ${pNum}이 아닌 ${pIndex}로 조회하고 있었다. Dto 는 아래와 ..

DB/Database 2024.01.16

[MySQL] 계층형 조회 (Recursive 재귀 쿼리)

WITH RECURSIVE cte_count AS ( -- Non-Recursive 문장( 첫번째 루프에서만 실행됨 ) SELECT 1 AS n UNION ALL -- Recursive 문장(읽어 올 때마다 행의 위치가 기억되어 다음번 읽어 올 때 다음 행으로 이동함) SELECT n + 1 AS num FROM cte_count WHERE n < 3 ) SELECT * FROM test; 메모리 상에 가상의 테이블을 저장한다. 반드시 UNION 사용해야한다. 반드시 비반복문(Non-Recursive)도 최소한 1개 요구된다. 처음 한번만 실행 SubQuery에서 바깥의 가상의 테이블을 참조하는 문장(반복문)이 반드시 필요하다. 반복되는 문장은 반드시 정지조건(Termination condition)이 ..

DB/Database 2024.01.09

MariaDB / DBeaver 에서 컬럼 Auto increment 숫자 변경

스케줄러를 적용했더니,, row가 너무 많아져서 테스트하기 불편했다. 다시 깔끔하게 몇 row 만 남기고 테스트 하려고 했는데, 자동으로 증가하는 index값이 초기화가 되지 않았다. 구글링 한 결과 , 아래와 같이 쿼리를 작성해주면 된다! ALTER TABLE hospital.round_schedule AUTO_INCREMENT = 862; 이렇게 해주면 자동으로 지정한 숫자부터 인덱스가 생성된다!

DB/Database 2023.11.30

MariaDB 설치 및 Dbeaver로 접속하기

1. MariaDB 설치하기 https://kitty-geno.tistory.com/55 MariaDB | 윈도우 MariaDB 설치 및 접속하기 ▶ MariaDB란? 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따른다. 오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 kitty-geno.tistory.com 위의 블로그를 그대로 따라했다. TCP port 값 설정 시, 3306 기본값이 이미 있어서 3307 로 설정해주었다. 2. DBeaver로 MariaDB에 접속하기 회사의 DB정보 (IP, port번호, ID, PW)를 받았다. 선임께서 디비 정보로 DB에 접근하라고 하셨다. 디비버를 사용해 접근을 ..

DB/Database 2023.11.13

postgresql 사용방법

DBeaver tool에서 해당 DB를 컨트롤할 수 있다. 현재 프로젝트의 스키마를 생성해야한다. 프로젝트 명으로 스키마를 생성하자. 이렇게 해당 프로젝트의 명으로 스키마가 생성되었다. 이제 원하는 테이블 생성, 컬럼 생성을 해보자. primary키 생성을 해보자 데이터타입을 serial로 설정하고, id 우클릭 - New Constraint from Selection 클릭!! 완료 후에는, Ctrl + S 를 잊지말자!! persist 확인 ! ㅡㅡㅡㅡ 위의 방법이 자꾸 안되서, 테이블을 삭제하고 다른 방법으로 시도했다. Default 에 nextval('first_project.users_new_user_id_seq'::regclass) 라고 작성해주면 아래와 같이 userId를 써주지 않아도 자동으..

DB/Database 2023.09.12

항상 헷갈리는 관계형 데이터베이스 다대다 쉬운 예시 (고객 - 상품)

DB를 공부할 때 다대다 관계가 제일 헷갈린다. 혼자 공부를 하면서 나중에 기억하기 쉽도록 초딩들도 이해가능한 예제를 만들어보았다. 개념적 모델링의 기본적인 ERD 작성을 위한 예시이다. 고객 - 상품은 다대다 관계 대표적인 다대다 예시인 고객-상품관계이다. 고객은 여러 상품을 구매할 수 있고, 상품은 여러 고객에게 팔릴 수 있다. 엔티티를 만들어서 이해해 보자. 이 상태로는 아무것도 할 수가 없다. kim 이 어떤 상품을 몇개 샀는지, 신라면은 누구에게 팔렸는지 어떻게 알 수 있을까...... ??? 매핑 테이블을 하나 만들어서 해결해 보자. '상품_고객' 테이블을 만들어 일대다, 다대일로 풀어주기 이렇게 두 테이블 사이에 '상품_고객' 테이블을 넣어주니, 위의 문제점이 해결되었다!! 물론 pk 로는 ..

DB/Database 2023.06.06

데이터 접근기술의 변천과정 (JDBC, SQLmapper, ORM)

https://velog.io/@jh129047/JDBC%EC%99%80-Spring-Data-JDBC JDBC와 Spring Data JDBC 어떠한 애플리케이션을 제작하더라도 데이터베이스와 같은 데이터 저장소와의 연동은 필수이다. 이번엔 서비스 계층에서 비즈니스 로직을 통해 처리된 데이터를 DB에 저장하고 비즈니스 로직 velog.io https://skyblue300a.tistory.com/7 JPA vs JDBC, JPA vs Mybatis, JPA vs Spring Data JPA의 차이점과 Hibernate Spring은 DB에 접근하기 위해 자바의 API를 사용한다. 웹 서비스에 필요한 기능들이 추상화돼서 Spring이 만들어졌듯이, DB에 접근하는 기술들도 일종의 추상화 과정을 거치며 진화..

DB/Database 2023.01.18

[SQL/oracle] commit(커밋)을 하는 이유

오라클 DB는 단지 tool 일 뿐이다. (오라클DB에 데이터 저장하는거 아님!) memory에서 작업한 데이터를 HDD로 보내준다. HDD에서 memory로 가져오기도 한다. CPU는 HDD에 접근하는 것이 오래 걸리기 때문에 Memory에 접근을 하게 된다. 오라클DB에서 작업을 한 후, commit을 안하게 되면 Memory에 있던 작업한 데이터가 날아가 버리게 된다. 꼭 작업을 완료한 후, 데이터가 날아가지 않도록 HDD에 저장하는 과정인 commit을 꼭 해줘야 한다. 출처 https://slidesplayer.org/slide/11249693/

DB/Database 2022.11.11

[SQL/oracle] 트랜젝션 관리 (COMMIT/SAVEPOINT/ROLLBACK)

트랜젝션 관리 개념 데이터베이스에서는 데이터의 일관성과 무결성을 보장하기 위해서는 반드시 트랜잭션 관리가 필요하다. 트랜잭션이란 데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 작업 단위이다. 예를들어 그룹이 하나 이상의 SQL문장으로 구성되어 있다고 가정할 경우 4개의 SQL문장이 하나의 그룹으로 묶여진 작업단위의 경우 4개의 SQL문장이 완전히 처리되거나 All-OR-Nothing방식으로 처리된다. 이것은 트랜잭션 내의 모든 처리대상 명령문들이 반드시 완전히 수행되어야 하며 만약, 모두가 완전이 수행되지 않고, 어느 한 문장이라도 에러가 발생한다면, 트랜잭 묶인 전체 명령문은 모두 취소가 된다. 트랜잭션의 형식? 한 트랜잭션을 프로그래밍 언어나 데이터 조작 언어로 개발된 사용..

DB/Database 2022.11.11

[MySQL] MySQL 문법 요약 - 섹션 2. MySQL 수정,삭제,관리

1. 데이터 베이스 및 테이블 생성 --1) 데이터베이스 만들기 // create database 이름 -- 생성된 데이터베이스는 use문을 이용하여 선택해야 한다. -- utf-8 인코딩 타입의 한글을 저장하려면 반드시 다음과 같이 캐릭터셋에 언어타입을 지정해준다. -- create database 이름 -- character set = 'utf8' -- collate = 'utf8_general_ci'; -- test_db 라는 데이터베이스를 생성하고 한글을 저장할수 있게 만드시오. create database test_db character set = 'utf8' collate = 'utf8_general_ci'; use test_db; -- 이렇게 선택해도 되고 더블클릭해도 됨 -- 2) 테이블 ..

DB/Database 2022.09.16

[MySQL] MySQL 문법 요약 - 섹션 1. MySQL select 쿼리문

1. 기본 정보 조회 -- 데이터베이스 조회하기. show database; 로그인한 계정으로 사용가능한 데이터베이스 목록이 조회됨 -- 데이터베이스 사용하기. use 데이터베이스명; 그냥 더블클릭 해도됨. use employees; -- 선택된 데이터베이스 내의 테이블을 조회함. show tables; -- 선택된 테이블 내의 컬럼들을 조회함. desc 테이블명; desc departments; 2. select 문 기본 및 연산자 -- 사원의 정보를 모두 가져온다. select * from employees; -- 산술 연산자 select 20 + 10; / select 20 - 10; / select 20 * 10; / select 20 / 10; -- 데이터에 산술연산하기 select salary..

DB/Database 2022.09.16

[MySQL] MySQL 기본 문법

-- 데이터베이스 조회하기. show database; 로그인한 계정으로 사용가능한 데이터베이스 목록이 조회됨 show databases; -- 데이터베이스 사용하기. use 데이터베이스명; 그냥 더블클릭 해도됨. use employees; -- 선택된 데이터베이스 내의 테이블을 조회함. show tables; show tables; -- 선택된 테이블 내의 컬럼들을 조회함. desc 테이블명; desc departments; desc dept_emp; desc dept_manager; desc employees; desc salaries; desc titles; // -- select 문 기본 -- 사원의 정보를 모두 가져온다. select * from employees; -- 부서 정보를 모두 가져온..

DB/Database 2022.09.16