전체 글
-
GC 기본 개념 , 종류Java&Spring/Java 2023. 9. 4. 17:06
GC 의 동작 → Heap 영역에 존재하는 객체들에 대해 접근 가능한지 확인 한다. → GC Root 에서 부터 시작하여 참조 값을 따라가며 접근 가능한 객체들에 mark 하는 과정을 진행 → Mark 되지 않은 객체 즉 , 접근 할 수 없는 객체는 제거(Sweep) 대상이 되고 , 해당 객체들을 제거 mark sweep comapct algo Stop the world : GC 를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것 GC Root 가 가능한 대상 1. JVM 메모리의 stack 영역에 존재한는 참조 변수 2 . Method Area static 데이터 3 . JNI 에 의해 생성되는 객체 Serial GC - Single thread - stw 가장 김 - mark sweep coma..
-
SpringBoot MySql bulkInsert 도입기Project/TravelFeelDog 2023. 8. 30. 22:58
배치란 일련의 작업을 한번에 수행하는 작업을 뜻한다고 한다. 1만건의 데이터를 생성한 후 한방 쿼리를 사용하여 데이터베이스에 저장을 하는 테스트 코드이다. @IntegrationTest public class FeedBulkInsertTest { @Autowired private FeedRepository feedRepository; @Test public void bulkInsert() { var easyRandom = FeedFixtureFactory.get( 4L, LocalDate.of(1998, 12, 1), LocalDate.of(2024, 2, 1) ); var stopWatch = new StopWatch(); stopWatch.start(); int _1만 = 10000; var post..
-
[1차] 셔틀버스 Java 풀이 [프로그래머스]CodeingTestPrac/Java Coding Test 2023. 8. 29. 17:03
https://school.programmers.co.kr/learn/courses/30/lessons/17678?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 구현 문제이다 . 상황이 복잡하였지만 , 카카오 코테 성격상 예시테케를 다맞추면 통과한다라는 믿음을 가지고 진행을 하자. 처음 문제를 푸는데 있어 예시테케를 하나씩 통과하는 방식으로 구현을 하다보니 복잡성이 커져 수정이 불가했다. 용기를 가지고 주요 로직 부분을 지우고 종이에 예시를 적으면서 출력되는 상황을 체크했다. 문제 이해의 부분은 "버스는 여석이 있어도 바로 출발"..
-
[프로그래머스] 후보키 Java 조합 - 재귀 , 백트래킹CodeingTestPrac/Java Coding Test 2023. 8. 28. 14:10
파이썬을 이용한 코딩테스트시 간단하게 라이브러리를 호출하여 조합을 뽑아내는 것 이 가능했지만 자바는 직접구현을 해야한다. 숫자 4가 주어졌을때 1 , 2, 3,4 , (1,2),(1,3) ,,,, (1,2,3,4) 와 같은 숫자를 출력하는 코드를 짜보자. n = 4 일때 , nCr 을 구현하니 변수 r 도 필요하다. 재귀를 사용하며 , 배열의 크기와 r 이 같으면 탈출 하는 조건문을 추가해준다. @Test public void combination_test() { int n = 4; var s = showCombination(n); System.out.println(s); } List answer = new ArrayList(); public int showCombination(int n) { for(i..
-
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. 데이터 정합성 유지가 쉽다 비 정규화의 장점 참조 없이 읽기가 가능하다. 정규화를 언제 사용하는게 효과 적일까 ? 데이터의 최신성을 고려한 판단이 하나의 기준이 될 수 가 있다. 사용자의 이름과 닉네임 고유한 식별자가 있는..