본문 바로가기

개발

(32)
R-Tree 인덱싱 병목 해결 과정 들어가기 전에 오타나 잘못된 부분 지적은 언제나 환영입니다! 개인 PC에서 개발을 하고 성능 측정을 했기 때문에 백그라운드 프로그램으로 인한 변수가 있을 수 있습니다. 성능 측정에 대한 부분은 아직 미숙한 부분이 많습니다. 잘못된 측정에 관한 지적은 환영입니다. 발생한 문제 $ logN $의 시간 복잡도를 보장해야 할 R-Tree 인덱싱이 $ N^2 $의 시간 복잡도로 수행됐다. 처음엔 코드의 문제라 생각해 best practice 코드들과 비교했고 그 다음엔 다른 인덱싱 알고리즘들을 적용했다. 검색만으로는 문제를 해결하는 것이 불가능해 R-tree 코드를 분석한 결과 도로 데이터는 R-Tree 인덱싱 구성에 불리한 구조란 것을 알았다. 프로젝트 상황 dbms 버전 : PostgreSQL 13.5, Po..
Python 함수 호출 비용이 비싼 이유 들어가기 전에 잘못된 부분 지적은 언제나 환영입니다! 파이썬은 코테용으로만 쓰고 있기 떄문에 실제 개발과는 다를 수 있습니다. 문제 제기 프로그래밍을 배울 떄, 반복되거나 의도가 명확히 보이지 않는 부분은 함수를 만들어 분리하란 말을 들었을 것이다. https://www.acmicpc.net/problem/1600 을 Python3로 해결하는 과정에서 범위 이탈 검증에 대한 부분을 함수로 분리하니 시간초과를 받게 됐다. 함수 호출에 대해 비용이 생기는 것은 알고 있지만 생각보다 비용이 커서 여기에 대해 알아보게됐다. 문제의 코드 (outRange 함수를 보면 된다.) 더보기 from collections import deque def outRange(thereX, thereY, W, H): if 0
JPA 연관 관계에서 set과 list 차이 문제 제기 인터넷에서 연관 관계에 대한 코드를 찾아보면 List가 아닌 Set을 사용하는 경우가 있어 무슨 차이인지 궁금했다. 이 글은 아래 사항들을 알고 있단 가정 하에 썼다. - List와 Set 연산의 시간 복잡도 - OneToMany 연관관계 mapping 속성들 5.0.8 이전의 hibernate hibernate문서를 보면 연관 관계를 맺을 땐, List가 더 나은 성능을 보인다 했다. 하지만, 이 때 HHH-5855 이슈가 생겼다. CASCADE를 MERGE, PERSIST, ALL 셋 중 하나로 준 경우 연관관계의 주인이 아닌 쪽에 객체를 생성하면, INSERT 쿼리가 두 번 발생해 중복이 생겼다. 예를 들자면, Parent와 Child는 1:N의 관계를 가진다고 하자. 연관관계의 주인인 ..
Serialization (+ JPA) 보호되어 있는 글입니다.
java stream이 for-loop보다 느린 이유 수정 이력 2022.12.27 맞춤법 수정 및 참조 문제 항목 추가 서론 프로그래머스에서 다른 사람들의 코드를 보면 stream을 사용한 코드들을 종종 보는데 정석적인 방식에 비해 몇 배 느린데도 숏 코딩+ 간결해 보인단 이유로 좋아요를 꽤 받는 걸 보니 이렇게 짜는 게 정말 좋은 건지 궁금해서 알아보게 됐다. 정확한 속도 측정에 관해서는 Reference 항목의 3번째 링크의 동영상을 보면 된다. https://programmers.co.kr/learn/courses/30/lessons/42578 위 문제에서 stream을 사용하지 않을 때와 사용했을 때 속도 차이다. 왼쪽이 stream을 사용하지 않은 코드 오른쪽이 stream을 사용한 코드다. stream이란? java 8부터 나온 함수형 inte..
자바 gc 약한 세대 가설 (weak generational hypothesis) 가비지 컬렉터의 역할1. 메모리 할당2. 참조된 객체가 메모리에 남아있는지 확인3. 런타임 때 더 이상 도달할 수 없는 개체의 메모리 회수 가비지 컬렉터가 실행되는 상황1. 전체 힙 또는 하위 요소가 임계값 이상이 될 때2. 요청한 메모리만큼 힙에서 할당할 수 없는 경우  Compaction가비지 컬렉터가 실행되고 난 후에는 여유 공간들이 연속돼있지 않고, 여러 chunk로 남는다.이는 큰 개체에 대한 할당을 어렵게 만들기 때문에 가비지 컬렉터는 다양한 압축 방법을 지원한다. 가비지 컬렉터의 성능 지표1. 처리량(Throughput) : 충분히 긴 시간동안 가비지 콜렉터 수행 시간을 제외한 런타임 비율2. overhead : 1번의 반대. 가비지 컬렉터의 수행 시간 비율3. pause time : 가비지..
docker linuxKit 도커 toolBox 초기 Mac이나 Window에선 리눅스 환경에서 도커를 구동해야함 toolBox란 VMware같은 툴로 리눅스 가상환경을 구축 후, 그 위에 도커 실행 컨테이너에 접근하기 위해선, hostOS -> 가상 머신 -> container를 거쳐야 하기 때문에, 이중으로 포트포워딩을 해야 함 linuxKit Mac과 Window가 자체적으로 가상화된 리눅스 환경을 제공하기 위해 사용하는 툴 한 번의 포트포워딩만으로 외부에서 컨테이너에 접근할 수 있게 해준다. Mac : Xhyve(Hyperkit) window : hyper -v hyper -v 하이퍼바이저의 type1 형태로, 윈도우 커널과 리눅스 커널이 담긴 2개의 컨테이너를 만듬 Client는 window로 둔 상태에서 Docker Da..
docker container docker engine 위에서 돌아가는 하나의 프로세스 1. namespace : 프로세스 분리 컨테이너란 프로세스를 격리하기 위한 기능 -> 컨테이너 A, B가 있다. -> A와 B가 어떤 프로그램을 실행했을 때 할당된 PID가 서로 같은 경우. -> namespace에선 PID를 분리하는 기능이 있다. -> 이로 인해, 각 컨테이너들은 동일한 PID를 써도 영향을 받지 않는다. 2. chroot : 디렉토리 분리 루트 디렉토리를 변경하는 명령어 해당 명령이 실행된 위치를 루트 디렉토리로 인식. 프로세스 실행에 필요한 의존성들이 새 루트 아래 있어야 사용 가능 3. cgroup : 자원 제한 프로세스의 cpu시간, 네트워크 대역폭 같은 시스템 자원을 제한 이 설정은 상속되기 때문에, 도커 엔진으로 생..