3월 3주차 회고

코헤·3일 전

회고록

목록 보기
5/5

이번 주, 진짜 정신없었다

솔직히 이번 주는 "살아남았다"는 표현이 가장 적절하다. 모 스타트업 2차 면접 준비부터 보 스타트업 면접까지, 연속으로 면접을 봤다. 특히 모 스타트업은 2시간짜리 대면 면접이라 체력적으로도 정신적으로도 부담이 컸다.

모 스타트업 2차 면접 준비 - 깊이의 중요성

모 스타트업 면접 준비하면서 가장 많이 느낀 건 "깊이"의 중요성이다. 단순히 "Redis 썼습니다"가 아니라, 왜 Redis를 선택했는지, 만약 장애가 나면 어떻게 복구할 건지, 다른 대안은 없었는지까지 꼬리에 꼬리를 무는 질문에 대비해야 했다.

특히 재고 동시성 제어 부분을 준비하면서 많이 배웠다:

  • 비관적 락 vs 낙관적 락의 실질적인 트레이드오프
  • Redis Lua Script로 원자적 연산 처리하는 이유
  • Kafka를 통한 비동기 처리와 멱등성 보장

"30초 답변"을 만들어서 계속 소리 내서 읽어봤다. 첫째-Redis, 둘째-Kafka, 셋째-멱등성. 이 흐름을 자연스럽게 말할 수 있을 때까지 반복했다.

JPA/Spring 꼬리질문 - 프록시의 세계

Self-invocation 문제는 알고 있었는데, 막상 "왜요?"라고 물으면 막혔다. 이번에 확실히 정리했다. 프록시 패턴. 외부 호출은 프록시 객체를 거치지만, 내부에서 this로 호출하면 프록시를 우회해버린다. 그래서 @Transactional이 안 먹는다.

Filter → Interceptor → AOP 순서도 그냥 외우는 게 아니라, 각각 어디서 동작하는지(서블릿 컨테이너, Spring MVC, Spring Bean)를 이해해야 면접에서 자신있게 대답할 수 있다.
근데 사실 이런 질문은 나오지 않았다

보 스타트업 면접 - 실전의 압박

오늘(3/20) 리얼티쓰 면접을 봤다. 인성 질문부터 시작해서 과제 리뷰, CS 심화까지 물밀듯이 쏟아졌다. 특히 인상 깊었던 질문들:

  1. Hash Map의 시간복잡도가 O(n)이 되는 경우 - 해시 충돌이 극단적으로 발생할 때
  2. 캐시 스탬피드 - 처음 들어본 개념이라 솔직히 모른다고 했다
  3. 서킷 브레이커 패턴 - 장애 전파 방지. 모르는 내용이라고 이야기 했었다
  4. CPU/메모리 여유로운데 레이턴시 증가 - 외부 의존성(DB, API) 문제 가능성

모르는 건 모른다고 솔직하게 말했다. 아는 척하다가 꼬리질문에서 무너지는 것보다 낫다고 생각했다.

부족했던 점

  1. 캐시 스탬피드, 커버링 인덱스 같은 심화 개념 - 면접준비 폴더에 추가해야겠다
  2. 코틀린 문법 - 과제에서 처음 써봤는데, fun/open 외에는 잘 모른다고 했다. 시간 나면 공부해야겠다
  3. 체력 관리 - 면접 연속으로 보니까 집중력이 떨어지는 게 느껴졌다

다음 주 목표

  1. 면접 결과 기다리면서 부족했던 개념 보충
    • 캐시 스탬피드, 커버링 인덱스 정리
    • Kotlin 기본 문법 학습
  2. 코테 문자열 알고리즘 14문제 실제로 풀어보기
    • 이번 주에 정리만 해놓고 직접 풀진 못했다
  3. 프로젝트 진행
    • 로깅 설계 가이드 기반으로 실제 구현 시작

마무리

힘들었지만, 면접을 볼 때마다 내가 뭘 모르는지가 명확해진다. 그게 이 과정의 가치인 것 같다. 캐시 스탬피드? 몰랐다. 근데 이제 알아야 할 게 뭔지 알았다. 리젝되더라도 배운 건 남으니까.

다음 주에는 조금 페이스 조절하면서, 부족한 부분 채워나가자.


미적용 TIL (다음주 적용하자!)

  • Redis Lua Script 실제 코드로 구현해보기
  • 캐시 스탬피드 개념 + 해결법 정리
  • 커버링 인덱스 실습

혹시 몰라서 질문만 따로 모와뒀다

1. 인성 및 직무 배경 (Personal & Background) * 자기소개: 간단하게 자기소개를 부탁드립니다. * 퇴사 사유: 전 직장 퇴사 사유가 어떻게 되시나요? * 출근 가능 일자: 합격 시 언제부터 출근이 가능하신가요? * 조직 문화: 전 직장에서 근무 환경이나 조직 문화 중 불편하게 느껴졌던 점이 있나요? (예: 회식, 수직적 문화 등) * 성향 및 퍼스널리티: * 본인은 스스로 어떤 성향의 사람이라고 생각하시나요? * 주변 친구들은 현영님을 어떤 사람이라고 평가하나요? * 관심을 많이 받는 것에 대해 어떻게 생각하시나요? (SNS 활동 관련) * 대인 관계: * 업무 중 마찰이 있었던 적이 있나요? (QA 팀, 프런트엔드 개발자 등) * 같이 일하기 가장 어려웠던 스타일의 사람은 어떤 유형인가요? * 커리어 방향: 백엔드 개발자로 커리어 방향을 정하신 특별한 이유가 있나요? * 리더십: 리더십과 팔로워십 중 어느 쪽에 더 강점이 있다고 생각하시나요? 관련 사례가 있나요? * 문제 해결 경험: 인생에서 가장 어려웠던 문제 해결 경험이 있나요? (개발 외적인 것도 포함) * 이력서 기반 질문: '코히콘(Cohi-Con)'이란 무엇이며, 어떤 의도로 개최하게 되었나요? 2. 기술 과제 및 언어 관련 (Project & Kotlin) * 과제 수행 과정: 과제를 작업할 때의 흐름을 시간 순서대로 설명해 주실 수 있나요? (소요 시간, AI 활용 여부 등) * 코틀린(Kotlin) 경험: * 이번 과제에서 코틀린을 처음 써보셨는데, 사용해 본 소감이 어떠신가요? * 코틀린 문법 중 fun, open 외에 아는 것이 있나요? (예: take 함수 등) * 구현 로직 및 설계: * 이미지 URL을 해싱해서 중복 요청을 처리한 이유는 무엇인가요? * 현실에서 같은 이미지인데 URL 문자열이 달라지는 경우가 있을까요? * 해싱 시 UTF-8 캐릭터셋을 명시하지 않은 이유가 있나요? (JVM 환경별 차이 관련) * DB 스캔 시 limit 쿼리 없이 처리한 이유가 있나요? * 인프라 및 큐(Queue): * Redis 모드와 In-memory 모드의 차이는 무엇인가요? * 로컬 환경과 운영 환경에서 Redis 연동 테스트는 어떻게 진행하셨나요? * 서버를 멀티 인스턴스로 스케일 아웃할 때, 현재의 Redis 큐 구조에 문제가 없을까요? 3. 기술 면접 (CS & Backend Deep Dive) * 자료구조: * Hash Map의 시간 복잡도는 얼마이며, $O(n)$이 되는 경우는 언제인가요? * 해시 충돌(Hash Collision) 해결 전략에는 무엇이 있나요? * 자바 Hash Map에서 사용하는 '레드-블랙 트리'와 '체이닝(Chaining)', '오픈 어드레싱(Open Addressing)'의 차이는 무엇인가요? * 운영체제 및 자바(JVM): * 메모리 단편화(Memory Fragmentation)란 무엇인가요? * 객체를 과도하게 생성할 경우 발생하는 문제와 GC(Garbage Collection)는 어떻게 동작하나요? * GC의 도달 가능성(Reachability) 알고리즘과 마크-스윕(Mark-Sweep), 마크-콤팩트(Mark-Compact)의 차이를 설명해 주세요. * 네트워크: * TCP와 UDP의 차이점은 무엇인가요? * 3-way Handshaking과 4-way Handshaking의 차이는 무엇인가요? * 데이터베이스 및 시스템 설계: * 커버링 인덱스(Covering Index)란 무엇인가요? * 캐시 스탬피드(Cache Stampede) 현상에 대해 알고 있나요? * 서킷 브레이커(Circuit Breaker) 패턴은 어떤 문제를 해결하기 위한 것인가요? * 스프링(Spring): * @Scheduled 어노테이션의 기능과 사용 시 주의해야 할 점은 무엇인가요? * 메시지 큐 처리: * 메시지 처리 보장 모델 3가지(At-most-once, At-least-once, Exactly-once)에 대해 설명해 주세요. * 트러블슈팅(Troubleshooting): * 서버의 CPU/메모리는 여유로운데 레이턴시(Latency)가 증가했다면 어떻게 디버깅하시겠나요? * 머신의 메모리는 충분한데 OutOfMemoryError(OOM)가 발생한다면 어떤 조치를 취하시겠나요?
profile
하이하이

0개의 댓글