분류 전체보기
-
DB 서버에서 한번에 받아들일 수 있는 최대 쿼리 크기?Infra & Tools/MYSQL 2023. 8. 24. 15:10
my sql 의 서버에서 한번에 받을 수 있는 쿼리의 크기는 무제한이 아니다. 한번의 받을 수 있는 쿼리 크기를 확인 하는 명령어는 다음과 같다. show variables where Variable_name = 'max_allowed_packet' 내 로컬 컴퓨터의 MYSQL 의 max_allowed_packet 의 값은 67MB 이다. cf 1Byte * 10^3 = 1KB 1KB * 10^3 = 1MB MySQL 5.7 ,8.0 공식 문서에 따르면 기본 사이즈의 크기는 최대 약 4MB,67MB 이며 , 패킷의 메시지 버퍼는 net_buffer_length 의 바이트 크기 만큼 초기화 되어서 사용이 된다. 각각의 클라이언트 스레드는 연결 버퍼와 결과 버퍼에 연관이 되어있으며 , 두개의 버퍼 크기 모두..
-
MySql 조회 성능 최적화를 위한 Index 의 이해(1)Infra & Tools/MYSQL 2023. 8. 16. 19:11
MySql 과 SpringBoot 에서 데이터 조회 성능을 최적화하기 위한 방법들은 다양하다. 다음 두가지의 방식을 생각해 볼 수 있다. 1. 메모리의 캐쉬 hit 을 올린다 CPU 내부의 L1~L3 캐시와 같은 하드웨어 캐시의 히트율을 높이는 방식으로 프로그래밍을 한다. - SPring 에서 @Cacheable ,@CacheEvict 등을 사용한 캐싱 로직을 구현 하는 것 도 있다. - 추가로 Mysql 의 쿼리 캐시의 경우 5.6 은 deprecate 이며, 8.0 에서는 제거 되었다. 2. 인덱싱 - 적절한 인덱스를 DB 테이블에 설정하여 조회에 자주 사용되는 컬럼 또는 JOIN 연산에 사용되는 칼럼에 인덱스를 설정한다. 데이터의 조회 성능 최적화 중 데이터 베이스와 관련된 하나의 방법에는 디스크 ..
-
Two Pointers : while 문으로 맛있게 풀기CodeingTestPrac/neetCode.io 정주행 2023. 8. 15. 21:55
문제의 유형을 two pointers 라고 주어졌다 . 이것은 이중 반복문을 사용하여 , n! 로 접근을 하는 방식이 아니라 , 하나의 탐색의 과정에서 두개 이상의 접근자 :index 를 조건에 맞추어 증감을 시키는 것이 포인트 이다 Two pointer 의 기본 문제 유형을 먼저 보자. 125. Valid Palindrome Valid Palindrome - LeetCode Can you solve this real interview question? Valid Palindrome - A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeri..
-
정규화는 항상 옳은가 ? Join 은 정답일까?CS-Theory/DB 2023. 8. 12. 19:15
데이터 베이스의 정규화는 데이터의 중복을 제거하기 위하여 진행을 한다. 데이터의 중복을 없에는 것은 꼭 자원을 효율적으로 사용을 하는 것 이라고 할 수 가 있을까 ? -> 두가지의 테이블을 만들어 fk 를 통한 join 도 비용이라는 것을 알아야한다. 즉 , 정규화와 비정규화의 tradeOff 에 앞서 도메인 이해를 바탕으로 조회용 데이터와 쓰기 용 데이터를 먼저 구별을 하는게 올바른 설계의 첫 걸음이라고 생각이 든다. 정규화의 장점 1. 중복을 제거 2. 데이터를 한곳에서 관리 3. 데이터 정합성 유지가 쉽다 비 정규화의 장점 참조 없이 읽기가 가능하다. 정규화를 언제 사용하는게 효과 적일까 ? 데이터의 최신성을 고려한 판단이 하나의 기준이 될 수 가 있다. 사용자의 이름과 닉네임 고유한 식별자가 있는..
-
Service Layer 에 읽기 쓰기 분리기Project/TravelFeelDog 2023. 8. 10. 13:56
기존의 프로젝트를 진행을 하는데 있어 서비스 레이어는 다음과 같은 목적으로 작성을 하였다. 1. 어플리케이션에서 사용할 로직을 담당한다 . 2. 클라이언트의 인터페이스를 담당하는 컨트롤러 프랜제테이션 계층과 도메인의 비즈니스 로직을 담당하는 모델의 결합을 끊는 역할 3.Dto 매핑을 하는 역할. 4. 다른 도메인 , 루트 에그리거트의 접근을 제어하는 역할. 서비스는 데이터의 crud 와 관련된 로직을 제어 및 호출 하는 역할을 하였지만 하나의 모델과 관련된 기능이 늘어나면서 가독성이 떨어지고 하나의 클라스에서 담당하는 역할이 많아지면서 클라스의 목적이 모호해지는 현상이 생겼다. 추가적으로 , 조회를 위한 조회 성능을 위한 옵션을 설정한 트랜잭션이 자원을 생성하는 매서드 내부에서 호출 되면서 , 트랜잭션의..
-
Transaction (1) 정의 , ACID 특성CS-Theory/DB 2023. 8. 9. 23:29
데이터베이스의 트랜잭션이란 , 데이터 베이스에서 수행하는 작업 또는 논리의 하나의 단위이다. 운영체제로 부터 자원을 할당 받아 실행하는 작업의 단위인 프로세스와 유사한 정의 인것 같다. 논리의 단위라는것이 중요하다 , 트랜잭션의 결과가 물리적으로 , 하드디스크에 변경이 된다라는걸 의미 하지 않는다. ??? 데이터 베이스에 WRITE 과 관련된 트랜잭션이 발생을 하면 , RAM에서의 결과를 COMMIT 이라는 명령어를 해야 하드디스크에 변화가 생긴다. 추가로 + ACID 의 개념이 들어가게 설명을 하자. 데이터베이스의 트랜잭션이란 , ACID 속성이 있는 작업 그룹이며 , DB 의 어떤 변화가 있는 경우를 일컫는 말이다. 정리 하자) 데이터 베이스의 트랜잭션이란 , ACID 속정이 있는 작업 그룹으로 DB..
-
@Transactional (1)Java&Spring/Spring 2023. 8. 9. 17:21
@Transactional 은 Aop 의 관점에서는 사용하기는 편리하지만 , 개발자가 동작원리를 이해를 기반으로 해야 효과적인 troubleshooting 이 가능하다 라고 생각한다. 학생 Id 를 이용하여 , 10 명의 학생 객체를 만들려고 한다. 식별자는 db 에서 생성을 받는다하자. 다음 코드가 동작을 정상적으로 할까 ? @Service public class SomeService { @Transactional public void methodA(int studentId) { Student member = new Student(studentId) } @Transactional public void methodB() { for(int i = 0 ; i < 10 ;i++) { methodA(i) } }..
-
Arrays & Hashing (2)CodeingTestPrac/neetCode.io 정주행 2023. 8. 9. 16:15
238. Product of Array Except Self nums = [1,2,3,4] 일 때 , 각 리스트에 원소에 자기 자신을 제외한 값의 곲을 넣어야 한다. class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length ; List index = new ArrayList(); int pro = 1 ; for(int i = 0 ; i 1) { return new int[n] ; } if(index.size() == 1) { Arrays.f..