본문 바로가기

전체 글837

[컨퍼런스 후기] 인프콘 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.
실시간 주문 알림 도입기(서버 to 클라이언트) 대부분의 사람이 음식점에서 밥을 먹고있을 때, 매장 스피커로 '배달의 민족 주문~' 이라는 소리를 들어봤을 것이다.위와 비슷하게 주문이 발생할경우 소리가 발생하게 해달라는 실시간 주문 알림이라는 요구사항이 들어와 구현을 담당하게 됐다. 웹 어드민성 페이지에서 마트 관계자들이 간단하게 주문, 상품들을 관리할 수 있는 웹 플랫폼이 존재한다.마트 관계자는 항상 해당 페이지를 보고 있기 때문에, 여기다 해당 기능을 구현하기로 결정하였다. 서버 to 클라이언트 통신 방식이 여러가지 있는 것을 알게되었고, 각 방식의 장단점을 먼저 분석해봤다. Polling클라이언트가 서버로 http request를 계속 보내 이벤트 내용을 전달받는 방식대충 이런 흐름이다.1. 클라이언트 요청2. 서버에 이벤트가 발생했나 확인3. .. 2024. 7. 27.
[책 후기] 자바/스프링 개발자를 위한 실용주의 프로그래밍 https://product.kyobobook.co.kr/detail/S000213447953 자바/스프링 개발자를 위한 실용주의 프로그래밍 | 김우근 - 교보문고자바/스프링 개발자를 위한 실용주의 프로그래밍 | 소프트웨어 개발을 잘하고 싶다면 ‘개발’ 공부를 해야 합니다! 자바 개발자가 코틀린 같은 신생 언어를 다룰 수 있게 된다고 해서 개발을product.kyobobook.co.kr 최근에 나온 따끈따끈한 신책이다.해당 책을 읽으며 처음 '들어가기' 챕터 부터 뼈를 맞고 들어갔다.기술 vs 개발에 대해 설명해주며, 나는 개발보다 기술에 집착했다는 것을 깨달았다.보자마자 너무 재미있었다. 또한, 순차지향 vs 절차지향도 재밌던 것 같다. 처음 개발 공부를 했을 때 해당 책을 접했다면, 지름길이 됐을 것.. 2024. 7. 20.
Redis Cluster 환경에서 'DEL Collection'은 왜 안 될까? 레디스를 로그로 활용해 스케줄링으로 수집하는 로직을 만들 때 발생했던 이슈이다.사실 increase로 쉽게 개발할 수 있었는데, 그 땐 increase를 몰라서 선택지에 두지 않았다. 저장한 키는 prefix_datetime 이런 구조였다. datatime에 ms 단위까지 저장하기 때문에 거의 겹칠일이 없었고, 반드시 수집해야하는 로그도 아니여서 겹칠 수 있다는 상황 자체를 고려하지 않았다.쨋든, 스케줄링의 역할은 하루에 저장된 여러 개의 prefix_datetime 키가 몇개있는지 찾아와 저장하고, 삭제하는 방식이였다. (사실 삭제할 필요도 없었다. TTL을 걸었다면 .. 옛날의 나는 여기까지는 생각못했던 것 같다.) 로컬에서 prefix를 기준으로 키를 가져와 데이터 개수를 세고, 삭제한 후, 가져온.. 2024. 7. 20.