본문 바로가기

분류 전체보기

(10)
[회사에 기여하기 - 1] 빌더 패턴을 사용한 코드 개선 과정 Intro입사한 지 한 달이 되지 않아 아직까지는 버그 티켓을 처리하고 있습니다. 그렇다 보니 코드 몇 줄을 추가하는 작업이 대부분입니다.그럼에도 개선할 부분이 없는지 고민하고 유지 보수성이나 단위 테스트를 추가하려고 노력하고 있습니다.빌더 패턴을 사용하여 코드를 개선한 경험을 공유하겠습니다. 빌더 패턴 개선전 예시 코드from datetime import datetimefrom docx import Documentfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTfrom docx.shared import Ptdef create_meeting_minute(meeting_details, participants): document = Document() ..
2024년 10월까지 회고 첫 번째 이직6개월의 공백기를 지나 올해 1월 원하던 B2C 서비스 회사로 이직에 성공했다.그러나 6월에 희망퇴직을 하게 되었다. 짧은 기간이었지만 많은 것을 보고 배웠다. 6개월이었지만 그 회사에 보낸 시간부터 회고해 보겠다. 적응첫 이직이라 상당히 쫄았고 적응이 늦었다. 지금 돌이켜보면 첫 1-on-1 시간에 수습 기간 결과에 따라 함께 갈지 아닐지 결정된다는 말에 나의 모든 것이 평가받겠구나 혼자 지레 겁을 먹었다. 그래서 혼자 해보고 증명해보려고 질문을 늦게 하거나 질문하는 것이 나의 부족함을 드러내는 것일까 봐 조심스러웠다. 앞으로는 질문하는 것이 나의 부족함을 드러내는 것이라는 생각을 깨부셔야겠다. 개발내가 입사한 시기가 레거시 청산 마무리 단계여서 동료들이 각자 메인 담당 도메인이 있었고, ..
공식, 이론, 실제를 모두 확인하며 병렬 프로그래밍 성능 개선하기! 1. Intro 2. 원인 분석 2. 해결 방법 📌 INTRO 멀티스레딩으로 집계 기능을 개발한 뒤 운영 서버에서 성능 테스트를 수행했습니다. 로컬에서 테스트와 달리 성능 저하가 발생했습니다. 성능 개선의 공식, 이론, 실제를 모두 측정 및 확인하고 개선한 경험을 공유하겠습니다. 📌 원인 분석 멀티스레드를 사용한 이유는 I/O와 CPU 작업을 분리하고 병렬 처리가 가능한 부분에는 CPU를 최대한 활용하기 위해서입니다. 개발 완료 후 성능테스트를 하며 CPU 사용량을 모니터링했습니다. 80% ~ 90% 사용량을 보여 CPU가 알차게 사용되었다 판단했으나 처리시간이 단일스레드와 별 차이가 없었습니다. CPU 사용량 중에 CPU 모드 별로 얼마나 차지하는지 확인이 필요했습니다. System 모드라면 OS 커널..
동기화된 리스트를 빠르게 조회하기 - synchronizedList와 CopyOnWriteArrayList 성능 비교해봅시다 1. Intro 2. create 3. add 4. get 5. 결론 📌 INTRO 최근 멀티스레딩 프로그래밍을 하며 동시성 제어 기능이 구현된 클래스는 단지 동시성 제어 목적으로 아무거나 가져다 쓰면 안 된다는 것을 배웠습니다. synchronizedList와 CopyOnWriteArrayList를 비교해 보고 간단한 테스트를 해보겠습니다. 📌 create synchronizedList 인자로 넘겨받은 동기화되지 않은 리스트를 암묵적 락이 적용된 동기화된 클래스로 wrapping 해서 리턴해줍니다. 리스트를 새로 생성하지 않기 때문에 생성 비용이 크지 않습니다. CopyOnWriteArrayList 반면 CopyOnWriteArrayList는 리스트의 원소를 새로운 배열에 복사합니다. 리스트의 크기가 ..
대용량 데이터를 빠르게 조회하기 - 페이징 전략 비교(offset, no offset, Where In) - Intro - Offset - No Offset - 성능 비교 📌 INTRO 대용량 데이터로 정산이나 집계 작업을 위해서는 전체 데이터를 한 번에 조회하기 어렵습니다. 메모리에 전체 데이터를 로딩해야 하기 때문이죠. 데이터가 1000만 ~ 1억 건이 된다면 일반적인 사양의 컴퓨터라면 현실적으로 불가능합니다. 그래서 데이터를 나눠서 조회해야 합니다. 조회 단위를 Page라고 하고 Page별로 조회하기 위하는 작업을 Paging이라고 합니다. Paging 전략에는 대표적으로 1) Offset 2) No Offset 이 있습니다. 결론적으로 No Offset 방식이 가장 빠릅니다. 그 이유를 페이징 전략별로 동작 원리와 쿼리 실행계획 결과로 파악해 보겠습니다. (조회 조건에 사용되는 컬럼에 인덱스 설정이 ..
Github Action을 Cloud Function처럼 써서 서버 비용 절약하기 1. Intro 2. Trade-Off 3. 필요환경 - NCP 서버 셋팅 - nCloud API 키 발급 - nCloud API 문서 4. Github Action 워크플로우 설정 Intro 최근 진행 중인 토이 프로젝트에서 성능&부하 테스트를 위해 nGrinder를 구축했습니다. Naver Cloud Platform(이하 NCP)에서 지원받은 크레딧으로 클라우드에 서버를 구축했습니다. nGrinder처럼 24/7 서비스가 아니라면 필요한 시간에만 사용해서 비용을 절감할 필요가 있습니다... NCP 콘솔에서 수동으로 서버 정지, 시작을 하면 되지만 매일매일 해야 하는 불편함과 혹시라도 까먹었을 시 서버 비용이 부과될 것입니다. 서버 시작, 정지를 자동화할 방법을 생각했고 추가 비용 없이 해결 가능한 방..
Caffeine 캐시 도입 후기 1. Intro 2. Cache란? 3. Cache 종류 4. 도입 후기 & 성능 테스트 결과 Intro 최근 업무에서 캐시 도입으로 반복된 DB 조회 비효율을 개선했다. 캐시를 도입하기 위해 학습한 Cache 와 여러 Cache 시스템을 비교해보겠다. Cache 캐시는 값비싼 연산 결과 또는 자주 참조되는 데이터를 메모리 안에 두고, 뒤이은 요청이 보다 빨리 처리될 수 있도록 하는 저장소이다. 캐시의 종류는 데이터를 두는 공간에 따라서 CPU, SSD, HDD 등 다양하다. 캐시는 데이터를 영속화하는 목적의 저장소가 아니기 때문데 캐시 영역이 가득 차면 자동으로 비우거나(eviction) 또는 의도적으로 필요 없는 데이터를 비워주는(expriation) 기능이 필요하다. 이런 캐싱에 필요한 기능들을 구..
@ConfigurationProperties 바인딩 동작 원리 분석 & SpringBoot 3.x 에서 변경된 내용 1. Intro 2. 맥락 3. 원인 분석 4. 해결 방법 Intro 환경 Spring Boot 3.1.1 spring-boot-starter-jdbc 3.1.1 스프링 부트에서 @ConfigurationProperties 선언 시 내부적으로 설정값을 주입하는 방법과 스프링 부트 3.x 에서 변경된 @ConfigurationBinding 내용을 모른 채로 DataSourceProperties를 상속해 작업하다 예외가 발생했다. @ConfigurationProperties를 빈 팩토리가 어떻게 처리는 지 파악하고 예외를 어떻게 해결했는지 공유해 보겠다. 맥락 DB 환경 설정 정보를 Vault 서버에서 읽어와야 했다. Vault 서버에서 읽어온 정보를 설정 클래스에 바인딩 작업을 DataSourcePrope..
글씨체 교정 - 1 안녕하세요, 구독자 여러분. 이직 준비를 하고 있는 꾸이리입니다. 이직을 위해 매일 개발 공부만 하고 산답니다. 개발 공부만 하면 세상이 어찌 돌아가는지 알기도 어렵고 스트레스도 무지 받습니다. 공부가 너무 힘들 때 잠시 쉬어갈 놀이를 찾아보다 글씨체 교정으로 결정했습니다. (운동은 수강신청 실패로 8월 21일에 재도전하겠습니다.) 아무튼 글씨 연습용 필사를 위해 독서도 하고 겸사겸사 악필 교정도 해보겠습니다. 많관부~~ 교정 시작 전 저의 글씨체입니다. 함께 보시죠
의존성, 의존관계, 의존관계 주입 정리하기! [의존성, 의존관계, 의존 관계 주입] 헷갈리는 의존성, 의존관계, 의존관계 주입 개념 정리를 해보겠습니다. 의존성 - 다른 것에 의지하여 존재함. - 어떤 프로그램이나 실체의 정의와 기능이 전적으로 특정한 하드웨어와 소프트웨어 또는 앞서 진행된 이벤트나 상황에 의존하거나 종속적인 상태. 의존성은 굉장히 포괄적인 단어다. 프로그래밍에 적용해 봐도 라이브러리 간 의존성, 객체 간 의존성, 패키지 간 의존성 등 하나의 요소가 다른 요소에 의존하거나 종속적인 상태라면 적용 가능하다. 어느 한 요소가 완전히 독립적이지 않고 다른 요소와 상호작용, 즉 어느 정도 영향을 주고받으면 의존성이 있다고 말할 수 있다. 의존 관계 OOP 로 범위를 좁혀서 의존 관계를 정의해 보자면 두 가지로 정의할 수 있다. 정적인 의존..