개발놀이터

신입 개발자입니다. 본문

기타/회고

신입 개발자입니다.

마늘냄새폴폴 2024. 1. 30. 01:49

드디어 취뽀했습니다. 후... 초기 스타트업에 취직하게 되었습니다. 

 

요즘 취업 힘들다 힘들다 얘기만 들었지 몸으로 체감하니까 차원이 다르더군요. 취뽀한김에 회고를 안적을 수 없겠죠. 한번 적어보겠습니다. 

 

공부 기간은?

코딩을 시작한지는 3년, 본격적으로 공부를 시작한지는 2년7개월 됐습니다. 처음 개발 공부를 시작했을 때가 정말 새록새록 떠오르네요. JSP로 프로젝트 하는데 JSTL에서 <c:forEach> 이거 진짜 애먹었습니다. 

 

게시판도 만들어보고 MVC1 MVC2로 프로젝트 해보면서 개발에 대한 흥미를 잃지 않았던게 가장 큰 포인트였던 것 같습니다. 

 

공부 방법은?

인프런의 영한님 강의를 들었습니다. 영한님이 강의를 너무 재밌게 찍으셔서 영한님 강의를 전부 다 들었습니다. 

 

인강이 좋은 점이 모르는 부분 있으면 잠깐 멈췄다가 구글링해보고 다시 들을 수도 있고 이해 안되면 다시 뒤로 돌려서 들을 수도 있어서 제 탬포대로 공부할 수 있는게 정말 좋았습니다. 

 

그렇게 영한님 강의를 6개월에 걸쳐서 모든 강의를 다들었습니다. 당시에는 MVC2편이랑 고급편, 데이터베이스 접근 기술이 없었던 때였습니다. 

 

포트폴리오는?

버전업을 진행하는 온라인 쇼핑몰이었습니다. 1인 개발이었구요. 

 

버전 1은 "일단 만들자"가 컨셉입니다. 기획, 설계, 개발, 테스트까지 전부 혼자서 해야하다보니 한 2개월정도 걸렸습니다. 개발하는게 너무 재밌어서 지치지도 않고 개발만 미친듯이 했습니다. 잠도 안자고 20시간 연속 개발한 적도 있었으니까요. 

 

버전 1을 끝내고 1년뒤 프로젝트 할만한거 없나... 물색하던 중에 유튜브에서 어떤 개발자분께서 "포트폴리오로 버전업을 해봐라" 라는 얘기를 하셔서 '나도 버전업이나 해볼까?' 하고 만들게 되었습니다. 

 

버전 2는 "이용자가 천만명이 된다면 어떤 성능 문제가 발생할까?"입니다. 엄청나게 많은 성능 문제가 있었습니다. 이 문제를 해결하려고 많은 노력을 기울였구요. 

 

버전 3는 "배포 과정에서 어떤 문제가 발생할까?"입니다. 배포 과정에서 흔히 볼 수 있는 다운 타임에 대한 문제를 무중단 배포로 해결하고 Hard Shutdown에 대해 Graceful Shutdown으로 바꾸고 Class Loader, JIT Compiler Warmup도 진행했습니다. 

 

버전 4는 "클라우드 환경에 올리자":입니다. 사실 버전3에서 이미 클라우드 환경에 있었지만 클라우드를 깊이있게 사용하진 못했습니다. 끽해봐야 Route53이랑 ACM, ALB, S3, EC2 이정도였어서 조금 더 다채로운 프로젝트를 위해 VPC를 도입했습니다. 

 

결국 7개월짜리 긴 프로젝트를 완료할 수 있었습니다. 

 

서류

개인적으로 지금까지 제 프로젝트를 만족스럽게 생각하고 있습니다. 프로젝트를 1~2개월 단위로 여러개 하는 것은 조금 별로인 것 같습니다. 

 

면접관은
"어떤 문제가 있었어?"

"어떤 기술 썼어?"

"왜 그 기술 썼어?"

"과정에서 어떤 어려움이 있었어?"

 

이런걸 위주로 물어보는데 1~2개월짜리 작은 프로젝트에서 자신만의 "kick"을 만드는 것은 어렵다고 생각합니다. 때문에 하나의 프로젝트를 오랫동안 해보는 것이 좋다고 생각합니다. 

 

또한, 읽는 사람 입장에서 포트폴리오 혹은 이력서를 쓰기위해 많은 노력을 기울였습니다. 최대한 간결하게 포트폴리오를 만든 것도 그 때문이죠. 

 

오히려 핵심만 가지고 포트폴리오를 만들면 "흠...이 내용 궁금한데 내용이 다 안써져있네 면접때 물어봐야지" 이렇게 되기때문에 자연스럽게 면접으로 이어집니다. 

 

면접

저는 면접 준비만 6개월을 한 사람입니다. 그래서 그런지 면접에서 전혀 떨지 않았어요. 준비한게 많아서 그런가 전혀 면접에서 떨지 않았습니다. 

 

준비한 것이 많아서 신입 기준에서 모르는 기술 질문도 없었습니다. 신입이 못써봤을만한 기술들은 모른다고 했습니다. Spring Cloud나 Kubernetes같은건 왜 물어보는지 모르겠습니다. 

 

면접 준비는 특히 꼬리질문을 신경썼습니다. 음... 일례로

 

나 : "회원 인증에 JWT를 사용했습니다."

면접관 : "Access Token과 Refresh Token을 어디에 저장했나요?"

나 : "Access Token은 쿠키에 Refresh Token은 Redis에 저장했습니다."

면접관 : "Access Token과 Refresh Token은 TTL이 얼마나 됐나요?"

나 : "Access Token은 30분 Refresh Token은 30일이었습니다."

면접관 : "왜 그렇게 했나요?"

나 : "Access Token은 최대한 짧게 하자고 생각한게 30분이었고 Refresh Token은 사용자가 로그인이 풀리는 것이 합리적이라고 생각되는 시간이 30일인 것 같아서 그렇게 설정했습니다."

--------여기까지가 실제 면접---------

면접관 : "만약 Redis 서버에 장애가 발생하면 Refresh Token은 어떻게 검증하죠?"

나 : "Redis 서버의 장애를 대비해 stateless하게 토큰을 발급해 서버 단에서 검증하는 방법이 있을 것 같습니다. 혹은, Redis의 가용성을 높이기 위해 Sentinel로 배포하는 방식을 선택할 것 같습니다."

면접관 : "Sentinel에 대해서 설명해주세요"

나 : "Sentinel은 기본적으로 RDBMS에서 가용성을 높이기 위해 사용하는 전략 중 하나인 레플리케이션 방식을 위해 사용하는 설정입니다. Sentinel을 사용하면 마스터 노드의 상태를 확인하여 장애가 발생했을 때 레플리카를 마스터 노드로 승격 시키는 역할을 수행합니다. 때문에 마스터 노드가 죽어버리더라도 서버의 가용성을 높일 수 있습니다."

 

 

이정도로 긴 흐름의 꼬리질문을 계속해서 생각했습니다. 그리고 그 모든 꼬리질문에 대답할 수 있도록 답변을 준비했습니다. 

 

그래서

"왜 무중단 배포에 블루그린 배포를 사용했나요?"

"Github Action말고 Jenkins를 사용한 이유가 뭐죠?"

"동시성 문제를 낙관적 락이 아닌 비관적 락을 사용한 이유가 뭔가요?"

"스프링 시큐리티와 JWT를 결합하면 어떤 이점이 생기길래 이 둘을 결합했나요?"

 

와 같이 프로젝트에 대해 모든 기술에 "왜?"를 붙여서 거의 모든 꼬리질문에 대응할 수 있었습니다. 

 

 

마치며

취준 기간은 약 한달 반정도 걸린 것 같네요. 다른 사람들에 비하면 정말 짧게 끝난거지만 하루에 7~8시간씩 자소서쓰고 공부하고 패턴이 조금 힘에 부치던 찰나에 붙어서 다행입니다. 이 템포로 1년을 했으면 정말 멘탈도 다 부서지고 난리 났을텐데말이죠. 

 

힘든 시기에 취직해서 정말 다행입니다. 여러분도 취뽀하세요! 화이팅입니다!