본문 바로가기

개발노트

(93)
Apache poi 이용하여 excel 에 아주 많은 이미지 넣을 때 급격히 느려지는 현상 우회하는 야매 방법 5000개 가량의 이미지가 apache poi 로 생성되는 엑셀 파일에 삽입되어야 하는 needs 가 있었는데, apache poi 라이브러리에서 병목 구간이 있어 이를 찾아내고 우회하는 방법을 정리해두면 나중에 급할 때 이런식으로라도 문제를 해결할 수 있음을 확인하기 위해 정리해본다. 몇시간을 날려먹었는지... 옛날 프로젝트라 apache poi 3.15 버전이 dependency 로 import 되어있었다. 프로젝트 빌드 툴은 maven 기반이었다. 디버깅으로 각 메소드 호출이 느려지는 부분을 찾아 들어가보니 `POIXMLDocumentPart` 의 `addRelation` 메소드에서 `findExistingRelation()` 메소드를 호출하는 것이 병목 구간임을 알 수 있었다. private Pa..
CompletableFuture, parallelStream, ExecutorService 사용 시 주의점 좀 자세히 정리를 하고 싶지만, 코드 리뷰 중 오갔던 대화 내용 정도만 정리하기로... This comment has been minimized. Show comment Hide comment Copy link Quote reply Edit Unhide Delete leewin12 3 hours ago 여기선 default forkJoinPool이 사용될 것 같은데, 맞을까요? CustomForkJoinPool과 default ForkJoinPool이 섞여 있는 것 같습니다. Write Preview Select a reply ctrl . The content you are editing has changed. Please try again. 여기선 default forkJoinPool이 사용될 것 같은..
Spring Eureka 관련 정리 On-premise IDC 환경에서 운영중인 서버들을 Cloud 환경으로 이전하기 위해 부딪힌 몇가지 문제가 있었다. 이 문제들을 해결하기 위해 알아본 자료들을 정리해두면 후에 도움이 많이 될 것 같아 정리를 해 봄. 상황 1. 기존에는 VPN 을 통하였기 때문에 내부간 트래픽은 http 로 해도 안전하다고 여겨지고 있었음 2. Loadbalancer 트래픽 마저 VPN 의 트래픽을 점유하고 있었으므로 불필요한 성능 저하 유발 3. Cloud 환경에서는 가능한 VPN 을 타지 않고 `외부 트래픽 + 같은 서브넷 트래픽` 으로만 구성하는 것이 목표 4. Loadbalancer 에서 앱 서버(서비스)에 접근하기 위해서는 plain http 보다 https 로 전송해야 여러 공격으로부터의 최소한의 보안 레벨을..
Openvpn 운영하며 생긴 이슈 정리 1. 한 번 접속 후 잘 작동하던 vpn 서버에서 갑자기 AUTH_FAILED 오류를 뱉으며 클라이언트의 접속이 끊김 - vpn config 에 verb level 이 너무 높아 로그 파일이 급격히 커졌고, 로그 파일이 몇시간 만에 약 2.14GB 정도가 되었다. 그 이후로 로그에 더 이상 로그가 쌓이지 않았고, 클라이언트에서 접속을 시도하여도 AUTH_FAILED 오류가 나면서 접속이 되지 않았다. - SSH 로 vpn server 접속 후 로그 파일을 truncate 하고 접속 테스트를 하면 잘 됐음 - verb level 을 조정하고, 근본적인 처방으로 logrotate 를 설정하였음 2. site to site 연결을 openvpn 터널을 자체 구축하였는데 udp 로 할 경우, 안정적으로 운영되다..
aws cloudfront 에서 query string 기반 cache 우회 aws cloudfront 로 제공하는 음성, 동영상 리소스가 있는데, 최근 인코딩을 잘못하여 모바일에서 버퍼링을 불러 일으키는 동영상이 있었는데, 인코딩을 최적화하여 다시 s3 로 업로드 하였으나 cdn 에서 문제가 있는 파일을 캐싱하고 있어서 여전히 버퍼링이 생겼고, 이를 해결하기 위해 aws 콘솔에서 별도의 invalidate 로 해결을 했었는데, 직접 invalidate 하지 않고 하는 방법을 찾아보고 아래와 같이 해결을 했다. 아래의 매뉴얼을 보고 그대로 하면 되는데, aws 콘솔 화면에서 cloudfront query string whitelist 를 어디서 설정할 수 있는지 좀 헤매서 정리함. https://docs.aws.amazon.com/AmazonCloudFront/latest/Dev..
[pt-online-schema-change] 아주 큰 테이블(1billion rows) ALTER troubleshoot 및 후기 데이터로 먹고 사는 회사답게(?) 약 10억건이 넘는 rows 를 가진 테이블이 하나 존재한다. (그냥 샤딩, 파티셔닝 같은 걸 안 한거에요 ㅋㅋ)서비스가 시간이 지나갈수록 초기 설계 당시에는 고려가 되지 않은 사항들로 인해 변화된 요구사항에 의해 테이블도 그에 맞게 ALTER 가 필요했다.사실, 작년에도 on-premise (IDC)에 있던 데이터베이스를 클라우드 환경으로 이전할 때만 해도 이 테이블의 rows 는 약 5억~6억건 사이였던 것으로 기억한다.여튼, 그 때도 pt-online-schema-change 의 도움으로 무사히 ALTER 는 성공을 했었고, 별 이슈가 없었기에 사내에만 간단히 문서화한 게 전부였는데, 이번에는 뭔가 잘 안 되서 5번만에 성공을 하였는데 사실 정확하게 5번째에도 왜 ..
[Centos7] Paths 가 만들어 내는 임시 파일은 내가 지우지 않아도 될까? 요즘 스프링 부트로 파일 업/다운로드 시스템을 구현하고 있다.여러 프로젝트에 흩어져 있고 제각각인 구현 방법과 어느 시스템에서 이 파일을 만들고 업로드했는지 찾는데 드는 비용이 만만치 않아서, 시스템을 일원화 하기로 했다. 그렇게 java.nio.file.* 패키지를 이용하여 개발하는 중, Files.createTempFile() 라는 메소드를 봤는데 이 API 가 생성하는 파일이 계속 쌓이는 건 아닐까 하는 노파심/걱정이 생겼다. 그래서 조금 찾아봤다.서버의 운영체제 배포판은 Centos 7 이고`java.io.tmpdir` 에 대해서 별다른 설정을 하지 않은 Spring Boot 앱은 `/tmp` 디렉토리를 임시 파일 공간으로 사용하고 있다.그렇다면, /tmp 디렉토리는 자바 뿐만이 아니라 리눅스도 ..
리눅스 zsh 설정 간략 명령어 정리 # yum install -y zsh# echo $(which zsh) >> /etc/shells# sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"# cd ~# git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting# git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestion..