솔직히 이번 주는 "살아남았다"는 표현이 가장 적절하다. 모 스타트업 2차 면접 준비부터 보 스타트업 면접까지, 연속으로 면접을 봤다. 특히 모 스타트업은 2시간짜리 대면 면접이라 체력적으로도 정신적으로도 부담이 컸다.
모 스타트업 면접 준비하면서 가장 많이 느낀 건 "깊이"의 중요성이다. 단순히 "Redis 썼습니다"가 아니라, 왜 Redis를 선택했는지, 만약 장애가 나면 어떻게 복구할 건지, 다른 대안은 없었는지까지 꼬리에 꼬리를 무는 질문에 대비해야 했다.
특히 재고 동시성 제어 부분을 준비하면서 많이 배웠다:
"30초 답변"을 만들어서 계속 소리 내서 읽어봤다. 첫째-Redis, 둘째-Kafka, 셋째-멱등성. 이 흐름을 자연스럽게 말할 수 있을 때까지 반복했다.
Self-invocation 문제는 알고 있었는데, 막상 "왜요?"라고 물으면 막혔다. 이번에 확실히 정리했다. 프록시 패턴. 외부 호출은 프록시 객체를 거치지만, 내부에서 this로 호출하면 프록시를 우회해버린다. 그래서 @Transactional이 안 먹는다.
Filter → Interceptor → AOP 순서도 그냥 외우는 게 아니라, 각각 어디서 동작하는지(서블릿 컨테이너, Spring MVC, Spring Bean)를 이해해야 면접에서 자신있게 대답할 수 있다.
근데 사실 이런 질문은 나오지 않았다
오늘(3/20) 리얼티쓰 면접을 봤다. 인성 질문부터 시작해서 과제 리뷰, CS 심화까지 물밀듯이 쏟아졌다. 특히 인상 깊었던 질문들:
모르는 건 모른다고 솔직하게 말했다. 아는 척하다가 꼬리질문에서 무너지는 것보다 낫다고 생각했다.
힘들었지만, 면접을 볼 때마다 내가 뭘 모르는지가 명확해진다. 그게 이 과정의 가치인 것 같다. 캐시 스탬피드? 몰랐다. 근데 이제 알아야 할 게 뭔지 알았다. 리젝되더라도 배운 건 남으니까.
다음 주에는 조금 페이스 조절하면서, 부족한 부분 채워나가자.
혹시 몰라서 질문만 따로 모와뒀다
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)가 발생한다면 어떤 조치를 취하시겠나요?