본문 바로가기

분류 전체보기121

Django 프로젝트 생성하기 (Web 기준) 프로젝트 생성하기 Django 프로젝트 생성하기 위해서는 python 가상환경이 필수적으로 사용됩니다. 가상환경을 사용하는 가장 큰 이유는 버전관리와 패키지 충돌을 막아주기 위함입니다. Spring/Spring Boot를 현업에서 사용하면서도 간혹가다 오픈소스중에 dependency를 강제 누락시키고 다른 dependency를 불러와 사용하는 경우가 종종있었습니다. 이 처럼 Django도 Framework를 구성함에 있어서 여러가지 dependency를 가지고 만들어지기 때문에 패키징 처리에 있어서 가장 안전한 방법입니다. 1. 가상환경 확인 conda env list 위 명령어를 통해 현재 os에서 사용할 수 있는 가상환경을 확인합니다. 2. 가상환경 사용 conda activate 가상환경명 가상환경.. 2022. 1. 26.
POI #3 [XSSFWorkbook - Memory Leak] Memory Leak 메모리는 프로세스가 종료됨과 동시에 할당된 메모리를 비우지 못하고 점유하고 있는 현상입니다. 결과는 메모리의 한계점에 다다를 수록 OS의 모든 프로세스가 느려지기 시작합니다. POI도 메모리 릭을 무시 할 수 없는데요. 다른건 모르지만 이번 프로젝트를 진행하면서 XSSFWorkbook을 사용할 때마다 메모리 누수가 일어나 원인을 찾느라 고생했습니다. 내용을 보자하면 XSSFWorkbook이 sheet와 하위의 row, cell 등을 파싱할 때에 한 sheet당 최대량이 60mb 정도이며 상위로 가면 라이브러리 내부에서 TreeMap에 나머지 내용을 적재합니다. 이때 close 하면 되잖아? 라고 생각하시겠지만 TreeMap은 이미 저멀리 메모리에서 둥둥 떠다닙니다. 이렇게 쌓이고 쌓.. 2020. 7. 10.
java #4 [Queue, Dequeue] Queue 공장에서 생산라인의 제품들이 원료가 들어가고 제품이 나오는 것처럼 List 보다 Queue를 사용하는 경우가 종종 생깁니다. 특히나 순서대로 데이터를 뽑아서 사용 할 때에는 더 유용하게 사용합니다. Dequeue Queue와 성질은 같지만 양 방향으로 데이터를 받아서 사용 가능합니다. 위의 두개의 자료 구조 모두 아래와 같이 사용합니다. Exception null or Queue Value 주입 add offer 추출 remove poll 확인 element peek 사실 저는 잘 헷갈려서 쓸때마다 찾아보는건 안 비밀.... 2020. 7. 8.
java #3 [ArrayList, LinkedList, SynchronizedList] ArrayList java Collection 객체에서 제공하는 가장 대표적인 List 형태의 자료구조 입니다. 배열의 값들이 메모리에 이어져 나열됩니다. ArrayList 특성상 이어 쓰고 읽기에 가장 적합한 구조를 가지고 있습니다. LinkedList ArrayList와는 조금 다르게 각각의 하위 단위의 값들이 다음 값의 주소를 내부적으로 가지고 있습니다. 따라서 서로 이어 쓰거나 중간의 내용을 삭제 할때는 빠른 속도나 안정성이 주어지지만 읽기에는 다음 값의 주소를 찾는 시간 때문에 ArrayList보다 시간이 더 걸리고 데이터가 많아지면 많아질수록 성능은 보장 할 수 없습니다. SynchronizedList 마지막으로 이전 포스트에서 ConcurrentHashMap과 동일하게 멀티 스레드 환경에서 .. 2020. 7. 6.