Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

개발

(37)
이펙티브 소프트웨어 테스팅 테스팅 책을 읽은 이유 프로젝트를 진행하는 과정에서 테스트 코드의 필요성을 절실히 느꼈다. 코드를 봐줄 상급자가 없거나, 같이 리뷰할 팀원들이 부족하다면 에러가 안 나도록 기도 메타로 가야 했다. 그러다 보니 프런트 개발자와 API를 맞추는 과정에서 에러가 자주 발생했고, 그때마다 새로 배포를 하는 불편함이 있었다. 이를 해결하기 위해 단위 테스트 등을 통해 개발한 기능에 대한 테스트를 작성해 발생할 수 있는 위험성을 줄이고자 했다. 하지만, 통합 테스트같이 복잡한 테스팅이 필요한 경우를 만나니 테스트 코드 작성도 막막해져 책의 도움을 받고자 했다. 이 책을 선정한 이유 난이도가 적당했다. 아직 현업 경험이 없는 학생이다 보니, 전문 테스팅 책을 보는데 이해하기가 무척 어려웠다. 시간을 두고 읽으면 이해..
객체지향의 사실과 오해 책을 읽은 이유 토이 프로젝트를 하면서 고질적인 문제가 있었는데 어느 정도 구현이 끝나면 의미 없는 리팩토링 관련 커밋들만 계속 올라가는 것이었다. 어제는 이게 명쾌한 해답 같았지만, 다음 날 다시 보니 여전히 문제가 있는 코드였고, 이러다 보니 리팩토링만 하다 프로젝트에 흥미를 잃어 레포를 지우고 다른 프로젝트를 시작하는 일들이 빈번히 발생했다. 이렇듯 설계에서 계속 문제가 발생했기 때문에, 객체 설계 관련 책을 보면 어떨까 싶었다. 그래서 본 책이 객체지향의 사실과 오해란 책이었다. 책을 읽는 과정에서 어느 부분에서 설계가 꼬이게 됐는지 유추할 수 있었다. 모든 부분이 중요했지만, 그 중 나한테 있어 필요한 부분들에 대해 우선적으로 정리를 했다. 역할, 책임, 협력 이 책에서 가장 강조하는 3가지 단..
Uber H3 - 육각형 계층의 공간 인덱스 프로젝트에 Uber H3을 적용하면서 이게 무엇인지에 대해 정리한 글입니다. Uber H3이 유용한 상황 특정 공간에 대푯값 하나만 있으면 되는 경우(좌표계 정규화) 특정 구역을 채우고 싶은 경우 어떤 구역에 진입했을 때, 그 주변의 데이터를 얻고 싶은데 주변의 기준이 애매한 경우 ST_Intersects 같은 공간 쿼리의 비용이 무거운 경우 겹침, 누락에 대한 손실을 최소화 하고 싶을 때 2번의 경우 google S2가 유용할 수 있다. 배달의민족에서 이걸 사용해 문제를 해결한 글이 있다. (https://techblog.woowahan.com/2717/) Uber H3란? 지구를 식별 가능한 육각형 형태로 나눈 형태 각 육각형 셸마다 64-bit 정수 형태의 고유한 값이 있다. 육각형 크기는 15단계..
Uber H3을 적용해 좌표 데이터 용량 20배 줄이기 개선된 결과를 먼저 말하자면 42GB의 높이 데이터 -> 2GB 서울시 시군구 단위 도로 데이터 계산 시간 20초 -> 1.2초 수행 시간의 경우 i5, 8GB인 16년도 그램으로 진행했기 때문에 고사양 컴퓨터라면 더 높은 성능을 볼 수 있다. 프로젝트 상황 도로 주변의 높이 정보를 가지고 해당 도로에 생기는 음영도를 계산해야 했다. 사용된 데이터는 다음과 같다. 전국 도로 데이터 (130만 개, 1.3GB) 전국 DSM 데이터(높이 데이터) (3억 개, 42GB) 여기서 높이 데이터의 경우 중복되거나 비슷한 높이를 가지는 것들이 많았다. 반만 해결된 속도 문제 이전 글에서 Polygon 재구성을 통해 I/O 연산을 줄였다. 추가로 클러스터 인덱싱을 적용하고, 시도 단위로 테이블을 분리한 결과 30초 -..
HTTP/1.1 과 2.0의 차이 들어가기 전에HTTP/2 캡쳐 샘플은 아래 링크에서 받으실 수 있습니다.https://wiki.wireshark.org/HTTP2 HTTP2Hypertext Transfer Protocol version 2 (HTTP2) Protocol dependencies TCP: Typically, HTTP/2 uses TCP as its transport protocol. The well known TCP port for HTTP/2 traffic is 443 (and 80). Wireshark ChangeLog: Wireshark 1.12 - initial support Wireshark 2.0 -wiki.wireshark.org 문제 제기우리가 흔히 사용하는 대부분의 웹 사이트들은 HTTP/2를 사용한다.(구..
R-Tree 인덱싱 병목 해결 과정 들어가기 전에 오타나 잘못된 부분 지적은 언제나 환영입니다! 개인 PC에서 개발을 하고 성능 측정을 했기 때문에 백그라운드 프로그램으로 인한 변수가 있을 수 있습니다. 성능 측정에 대한 부분은 아직 미숙한 부분이 많습니다. 잘못된 측정에 관한 지적은 환영입니다. 발생한 문제 logN의 시간 복잡도를 보장해야 할 R-Tree 인덱싱이 N2의 시간 복잡도로 수행됐다. 처음엔 코드의 문제라 생각해 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의 관계를 가진다고 하자. 연관관계의 주인인 ..