배경
- 우리 조직 서비스에 레디스를 같이 운용하는데, 나를 포함한 조직원들의 활용률이 떨어진다고 느꼈다
- 조직이라는 표현을 사용한 이유는 여러 팀들을 포함하기 때문이다
- 대부분의 요구사항들은 간단한 http 동기식 통신의 클라이언트-서버 패턴으로 해결되어왔기 때문이다
- 최근 많은 계열사를 갖는 고객사가 우리 서비스를 구독을 하게 되었는데, 어드민 페이지에 접근할 때 응답속도가 느려졌다는 리포팅을 많이 받았다
- 원인은 고객사 사이즈가 커지면서 조직 복잡도도 높아졌는데, 조직을 조회하는데 비효율적인 로직방식이 적용되어있기 때문이다
- 이에 대한 여러 해결책 (DB, App 레벨)이 제시될 수 있지만, 더 좋은 방법, 여러 시각에 대한 견문을 확보하기 위해 레디스 활용법을 익혀 테스트를 해볼 생각을 갖게 되었다
- 일단 기초부터 빠르게 이해하기 위해 학습 방법을 고민하기 시작했다
학습 방법에 대한 고민
- 학습을 한다면 어떤 매체를 이용하는가?
- 공식 문서를 보는것은 좋은 방법이지만, 처음 접할때는 핸즈온 방식의 tutorial 학습을 하는게 좋다고 생각한다
- 책, 인프런 강의, 유데미 강의 등이 있는데 보통은 저렴한 가격을 제공하는 유데미를 선호한다
- 요즘은 인프런도 나쁘지 않다고 생각이 든다
- LLM이 좋아졌지만 사람에게서 오는 경험적/실무적 데이터를 얻기는 힘들다. 이 시점에는 LLM 보조하는 용도로 사용하기
- 책은 기술적 트렌드를 따라잡기 어렵다
- 인프런 강의를 본다면 최근 강의 업데이트 혹은 제작된 강의를 구매하는것을 추천한다
- 아무래도 기술과 관련된 책, 강의는 업데이트가 늦어지면 그 효용성이 떨어진다
- 유데미를 좋아했던 이유도 빈번한 업데이트를 해주는 강의가 많았기 때문이다
- 레디스 강의를 인프런에 검색하면 그렇게 많지는 않다. 유튜브도 옵션이긴하다
- 하지만, 재화와 서비스에 가격이 붙어 있는 그만한 이유가 다 있기 때문에 돈을 주고 사는것을 선호한다
강의 메타 데이터 분석
- 강의를 고를때는 몇가지 포인트가 있다
- 러닝 타임이 지루하지 않게 적절한가? 3 - 8시간 매우 훌륭하다
- 강의가 최근에 게시되거나 업데이트 되었는가? 강의 게시일이 중요하다. 이 강의는 4개월 전(2025.01)에 게시됨
- 강의가 물 흐르듯이, 요점없이 진행되지 않는가? 이런 경우는 옵시디언에 정리하기도, 집중하기도, 맥락잡기도 어렵다
- 강의 자료가 제공되는가? 김영한님의 강의 자료는 정말 최고라고 생각한다
- 너무 기본적인 내용만 제공되지 않는가? 실무적인 내용이 어느 정도 포함되면 좋다
- 가격이 터무니없지 않는가?
- 수요와 공급에 의해 시장가가 형성된다
- 강의는 보통 러닝타임이 길수록 비싸지는데, 터무니없이 긴 (40 - 50시간?) 강의는 추천하지 않는다
- 수료율과 효율성이 낮기 때문
- 40 - 50시간의 강의가 어떤 내용으로 구성될지? 페이스가 너무 느린건 아닌지 생각해보면 된다
- 커피에 디저트 보다 저렴
- 점심 시간에 커피에 디저트까지 먹는 사람은 없겠지
- 커피 몇 잔 사먹을 돈을 아껴서 나에게 투자해보자
- 사실 나는 회사에서 커피를 마시지 않는다. 스트레스 때문에 항상 각성된 상태
- 수강평 살펴보기
- 수강평에는 내가 찾고자 하는 키워드들이 있는지 파악해볼 수 있는 좋은 데이터이다
- 내가 찾은 키워드는 #실무, #기본, #이해, #깔끔
강의에 대한 생각
- 강의가 좋았던 이유는 아래와 같이 정리할 수 있다
- 짧고, 요점이 있으며, 전달력이 훌륭하다 - 강의는 3시간 정도로 매우 짧아서 퇴근하고 빠르게 훑어볼 수 있다. 매 강의 마다 요점이 있다고 느껴질 정도로 잘 정돈된 강의를 보여줬다. 결론은 전달력이 좋았다
- 기본 강의에 적절한 실무 활용법 - 너무 깊지도 얇지도 않은 실무 활용법을 공유해주었다. 이를 바탕으로 우리 조직의 HR시스템에 어떻게 적용할지 고민해보면 좋을것 같다
- 더 좋았던 점은 redis-cli만으로 학습한다는 점
- 요즘은 도커로 docker run --name redis-cli-lab -p 6379:6379 -d redis만 입력하면 환경 세팅이 끝난다
- redis-cli에 접근하는 방법은 docker exec -it redis-cli-lab redis-cli을 입력하면 된다
- redis-cli만 사용하면 좋은 점은 클라이언트를 분리해서 기본 레디스 자체에만 집중할 수 있다
- 만약 자바 어플리케이션에서 사용하는 lettuce도 같이 학습한다? 그럼 강의를 이해할때 뇌 메모리에 불필요한 내용을 같이 포함한 상태로 학습하는것과 동일하다 flush
- 근데 왜 이렇게 저렴해?
- 가격이 너무 저렴(8천원)한데 내용도 알차서 만족한다
- 그럼에도 불구하고 회사에서 사주면 좋겠다
- 사주는 회사로 가야하나? 분명 채용공고에는 #성장 지원이 있었는데 말이지
강의를 볼때, 강의를 보고나서
- 튜토리얼 지옥에 빠지지 않게 조심하기
- 예전에는 강의만 주구장창 봤던것 같다. 지금은 그렇게 하면 안된다
- 강의 하나를 보면, 어디에 적용할지 고민, 테스트, 반복, 기록, 공유 5단계를 적용한다
- 강의를 볼때는 기록 보다는 이해를 우선시
- 다 본 후에는 테스트와 기록을 하며 나의 생각을 적으면 된다
- 가장 중요한것은 한계에 부딫히면서 바운더리를 넓혀가기
- 학습을 하면서 불편하면 잘하고 있는것이다
- 운동을 할때도 영원히 5kg 덤벨만 들수 없다. 7kg, 10kg를 도전해야 다음 단계로 넘어갈 수 있다
- 1만 시간의 법칙에는 의식적인 도전과 실행이 포함된다
- 레디스 cli 사용법을 알았으니, 우리 서비스에 클라이언트 라이브러리를 이용해서 직접 사용해보기
우리 서비스에 적용해보기
- 일단 인증에는 사용중이구나
- 강의를 처음 보자마다 redis-cli에 들어가서 확인한건, 어떤 key들이 사용되는지
- 로그인을 하니 토큰이 저장되고 있다
- 로드밸런싱으로 여러 서버들이 띄워지고 있어, 분산환경에서 사용할 저장소가 필요했던 상황인가 보다
- 분산 환경에서 분산 락
- 우리 서비스는 시간에 따라 동작하는 크론잡들이 있다. 예를 들어, 알림이나 개인정보파기 등
- 처음 여러 서버를 분산하고 로드밸런싱을 붙였을때, 레디스를 활용하는 분산락 방식의 라이브러리를 가져온것이 기억난다 (내가 한건 아님)
- 분산락이 없으면 여러 서버가 특정시간에 서로 크론잡을 실행하게 될것이다
- (사고 실험)속도가 빠르지만 일시적이며 분산환경에서 사용할만한게 무엇이 있을까?
- 엑셀 다운로드, 엑셀 업로드 기능에 적용하는것도 나쁘지 않아 보인다
- 어드민 페이지에서 자주 바뀌지 않지만, 빈번하게 조회되는 데이터 캐싱처리하여 응답속도 향상
- 인사시스템에서 엑셀 다운로드/업로드은 제공되어야 하는 필수 서비스
- 엑셀 다운로드/업로드 요청시 job 아이디를 제공하고, 로직은 비동기적으로 처리
- job 아이디와 유저 아이디를 조합해서 key를 만들고, 여러 job 상태를 저장하는 value를 담는다
- 이때 서버는 비동기적으로 엑셀 파일을 파싱하거나 조립하여 처리
- 다운로드의 경우, 완료되었을때 s3에 저장해서 url을 유저에게 제공
- 업로드의 경우, 완료되었을때 상태 업데이트 처리
- 비동기적으로 수행하는 경우 응답속도도 빠르지만, 처리가 실패해도 큰 타격없는 기능들이라 롤백 후 재시도 하면 된다
- process도 저장해서 유저에게 얼마나 진행되었는지 알려줄 수도 있을것 같다 (polling으로 계속 호출해야하나?)
- 어드민 페이지에서 캐싱처리
- 보통 어드민에서는 조직의 구성원들에 대한 인사정보들이 담긴다
- 이 값들의 업데이트는 자주 일어나지 않는다
- 복잡한 쿼리로 조합되어서 전달되는 데이터들을 미리 캐싱해두면 조회응답속도가 빨라질 수 있다
- 하지만, 쿼리 자체가 비효율적으로 짜여져있는지 고민을 먼저 해보면 될것 같은데