본문 바로가기

전체 글846

데이터 대량 등록/수정 성능 개선 with JDBC Batch Update 우리 애플리케이션에는 마트 관계자를 위한 관리 페이지가 존재한다.해당 페이지에서 상품 관리, 주문 관리 등 관리 작업이 가능하다.상품을 단건으로도 저장/수정이 가능하고, 엑셀 파일을 통해 대량으로 저장/수정도 가능하다. 엑셀 파일을 통해 대량으로 저장/수정하는 기능을 우리 앱에서는 '상품 통합 관리'라고 부른다.상품 통합 관리 기능은 아래 프로세스로 이루어져 있다.1. 엑셀 업로드2. 엑셀 파싱 후 클라이언트 반환3. 클라이언트는 파싱된 정보를 보고 상품 분류 요청4. 상품 분류에서는 해당 상품이 신규 상품인지, 기존 상품인지 분류하여 클라이언트에게 반환5. 기존 상품은 수정6. 신규 상품은 저장정리하면 통합 상품 관리 기능은 엑셀 파싱 -> 상분 분류 -> 상품 수정 -> 상품 저장 순으로 진행한다. .. 2024. 8. 17.
효율적인 개발과 유지보수를 위한 문서화의 힘 신입 개발자로 입사했을 때, 가장 어려웠던 점은 기존 코드로만 기능과 정책을 파악하는 것이였다.문서화가 제대로 되어 있지 않고, 테스트 코드 조차 제대로 존재하지 않는 경우가 많아 팀 동료들에게 계속 물어봐야 했다.또한, 코드 작성자가 퇴사자인 경우도 있어서 제대로 파악이 힘들었다.이러한 과정에서 많은 시간이 소모되었던 것 같다. 장바구니 기능 서버 이전 프로젝트의 서버 담당자를 맡게 되었다. 관련 글은 다음 링크에 있다: https://comengin.tistory.com/851 Redis로 장바구니 구현하기: 예상치 못한 함정과 그 해결책우리 앱의 장바구니 기능은 기존에 클라이언트 캐시로 관리되고 있었다. 해당 방식은 서버 부하를 줄일 수 있다는 장점이 있지만, 몇 가지 심각한 단점이 있었다. 1. .. 2024. 8. 11.
Redis로 장바구니 구현하기: 추상화의 편리함과 함정 우리 앱의 장바구니 기능은 기존에 클라이언트 캐시로 관리되고 있었다. 해당 방식은 서버 부하를 줄일 수 있다는 장점이 있지만, 몇 가지 심각한 단점이 있었다. 1. 캐시로 관리되다 보니 장바구니를 한 개밖에 가질 수 없었다.-> 우리 앱은 사용자가 여러 마트를 이용할 수 있는데, 마트를 옮길 때마다 기존 장바구니 데이터를 지워야했다.2. 클라이언트에서 장바구니 관련 오류가 발생하면 추적이 어려웠다.-> 오류를 재현할 정보가 부족하여 디버깅에 많은 시간이 소요됐었다. 이러한 문제들을 해결하기 위해 장바구니를 서버로 이전하기로 결정했었다. 장바구니 서버 이전 시, 가장 먼저 고민한 것은 저장소 선택이였다.RDB와 NoSQL 중 어느 것을 사용할지 고민했어는데, 다음 이유로 Redis를 선택했다.1. 클라이언.. 2024. 8. 10.
[컨퍼런스 후기] 인프콘 2024 작년 인프콘은 떨어져서 못갔었다. 그 후 10월에 우아콘에 운좋게 붙어 갔다왔는데 첫 컨퍼런스여서 그런지 너무 재미있었다.이 후 스프링 캠프 2024도 갔다왔는데 컨퍼런스를 통해 인사이트를 넓히는게 좋은 경험이였던 것 같다. 이런 컨퍼런스들을 너무 참여하고 싶었다.이번 인프콘도 역시나 떨어졌다. 하지만 운이 좋게도 회사 안드 동료 분이 모바일 세션이 없다고 티켓을 양도해줘서 갈 수 있는 기회가 생겼다. 좋은 경험을 하게 해준 회사 동료 분께 정말 감사하다. 내가 가장 가고싶었던 이유는 재민님, 토비님 세션을 실제로 듣고 싶어서였다. 재민님은 유튜브 방향성과 비슷하게 설계에 관한 세션 발표를 하셨는데, 너무 재미있게 들었다.나도 선 설계에 집중하는 경향이 있었는데, 반성하는 계기가 되었다. 토비님 세션은.. 2024. 8. 4.
[책 후기] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 https://product.kyobobook.co.kr/detail/S000001033116 가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 페이스북의 뉴스 피드나 메신저,유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까? IT 경력자라도 느닷없이 대규모 시스템을 설product.kyobobook.co.kr 첫 시스템 디자인 관련 책이였던 만큼, 정말 재미있었다.당장 내 경력에 시스템 디자인 면접을 보지는 않아 필요없을 수도 있는 정보 일 수도 있다. 대신 시스템 설계에 대한 인사이트가 넓어진 느낌이다.나중에 경력이 쌓이고 시스템 면접 대비용으로 다시 보면 좋을 것 같은 책이다. 시스템 면접 외에도 대용량 처리에.. 2024. 8. 4.
SSE 연결 문제 해결과 Spring 컨트리뷰터 도전기 문제 상황실시간 주문 알림 기능을 구현하면서 SSE(Server-Sent Events) 기술을 사용했는데, SSE 연결이 지속되지 않고 첫 연결 후 바로 끊어지는 문제가 발생했었다.원인 분석SSE는 연결이 지속되어야 하는데, Content-Length 헤더가 설정되면 연결이 유지되지 않는 문제가 있었다.원인을 요약하면 다음과 같다.ContentCachingResponseWrapper#copyBodyToResponse 호출 시 Content-Length가 설정되고 flush가 실행됨Http11Processor#prepareResponse() 실행길이가 존재하므로 chunked 헤더가 할당되지 않음클라이언트는 chunked 헤더가 없어서 이벤트로 인식하지 않고 연결을 종료RFC7230에 따르면 발신자는 Tr.. 2024. 8. 3.