주딱이 CS 중요하다는건 백갤 친구들 수준이 처참해서 강조하는거임
괜찮은 학교에서 학점제대로 받을 정도면 충분함
그리고 면접 자주보면 알겠지만 CS지식딸치는 면접이 그렇게 좋은 면접은 아니라 생각해(보통 네전공이거나 면접관이 플젝 관심이 없을때 CS지식배틀 가능 경우가 많은듯)
나는 면접에서 답변을 할 때는 해결방안을 설명하면서 CS지식을 곁들이니깐 면접관이 좋아했음
분산락을 예시를 들어볼게. 내 프로젝트 예시가 아니라서 틀린점이 있을 수 있어
1. 재고 차감에서 동시성 이슈가 있었는데 단일 서버였으면 synchronized로 끝날 문제인데 서버가 여러 대니까 JVM 간 mutex가 안 됐음. 그래서 모든 인스턴스가 바라보는 redis에 락을 둠.
2. 처음엔 setnx로 구현했는데, 이게 결국 test and set이랑 같은 원리고 Redis가 싱글 스레드라 원자성이 보장됨. 근데 문제가 락 만료 전에 작업이 안 끝나면 다른 프로세스가 진입해서 safety가 깨짐
3. 그래서 redisson으로 바꿨는데 watchdog이 TTL 자동 갱신해주고 락 대기도 pub/sub 기반이라 스핀락처럼 Redis에 부하를 안 줌. os에서 뮤텍스가 busy waiting 안 하는 거랑 같은 맥락이라 할 수 있음.
4. 다만 Redis가 AP 성격이라 maste가 죽으면 비동기 복제 때문에 락이 유실될 수 있고, 이걸 보완하려고 RedLock을 고민함. 독립된 Redis 노드 N개 중 과반수 이상에서 락을 획득해야 유효하다고 판단하는 건데 Quorum 개념을 적용한 거임. (물론 이것도 clock drift로 완벽하지는 않음)
5. 재고 차감 정도면 단일 redis + redisson의 트레이드오프는 허용 가능하다고 판단함. 금융 수준의 정합성이 필요했으면 zooKeeper나 DB 비관적 락을 같이 썼을 거임. (대신 성능하락은 감수해야겠지?)
물론 면접때 이렇게 장황하게 말하지는 않겠지만
내가 말하고 싶은건 중간중간에 CS지식을 활용해서 내 주장을 뒷받침하면 굉장히 효과적이라는거임.
백갤러들도 단순히 CS지식 암기만 하지말고 자신의 플젝에서 어떻게 활용되는지 파악하고 면접때 말해보자
중간에 redis에서 redisson으로 넘어가는 설명이 좀 부족하긴한데 이건 백갤러들이 직접 찾아봐. 몇 가지 방법을 써보다가 watchdog을 쓰게 될거야
면접관이 내가 유도하는대로 생각하게끔하는 전략이중요한등
그렇게 유도하면 일단 반은 성공한거지 난 그렇게 유도한 면접은 다 통과했어
걍 1번부터 내렸음 cs수준 씨발
님 어디다녀요
1. 단일 서버였으면 synchronized로 끝날 문제 님들 이거 맞음??