면접 후기

이번 이직은 개발팀장에서 다시 개발자로 포지션을 변경하는, 새로운 도전의 시간이었습니다. 최근 2년 동안 다른 사람들의 이력서를 확인만 해왔는데 직접 이력서를 작성하고 오랜만에 면접에 들어가니, 그간의 경력이 우습게도 어렵고 낯설게 느껴졌습니다.

시장이 좋지 않아서 인지 PHP 채용 공고가 적어서, 학력 무관한 서울 내에 있는 50여개 회사에 전부 지원했고 여섯 번의 면접을 보았습니다. 별다른 준비를 하지 않고 즉흥적으로 대답하였더니 상당히 긴장되었고, 예상 밖의 질문에 당황하기도 했습니다. 특히 화상 면접의 경우, 표정이나 분위기를 읽을 수 없어 대면 면접보다 더 어려웠습니다.

그래도 여러 번의 면접을 보면서 점점 무엇이 중요한지, 어떻게 대처해야 하는지를 몸으로 익힐 수 있었습니다. 다행히 세 개의 회사에서 긍정적인 답변을 받았고, 그 중 기술적으로 더 성장하거나 어려운 작업을 해볼 수 있는 회사를 선택했습니다.
(사실, 집과 가깝다는 점도 중요한 선택 요인이었습니다.)

질문 정리

기억에 남는 질문과 답변, 혹은 유용한 정보를 간단하게 정리

일반

간단하게 자기소개 해주세요.

  • 이름, 나이, 경력, 지원동기 등을 포함하여 1분 내외로 소개

두 번의 공백 기간이 있었는데, 이 기간 동안 무엇을 하셨나요?

  • (첫 회사와 두 번째 회사 사이에 1년의 공백, 그리고 두 번째 회사와 현재까지의 8개월의 공백이 있음)
  • 2021년. 번아웃으로 인해, 휴식이나 하고 싶었던 취미 활동 등을 함
  • 2024년. 매니저에서 개발자로 전환하기 위해, 다시 기초부터 개발 공부를 시작

방통대에서 어떤 내용을 배웠고, 왜 휴학하셨나요?

  • 컴퓨터과학과에서 2년 동안 컴퓨터 기초, 개론, 이해 등을 배움
  • 관리 역할을 맡아, 개발 역량이 크게 필요하지 않고 병행하기 어려워 휴학

평소에 어떻게 공부하고 있나요?

  • 책, 강의, 유튜브, 스터디 등을 활용
  • 친구(프론트엔드 개발)와 간단한 프로젝트를 진행하면서 새로운 기술을 학습하며 적용
  • 현재는 직접 스터디를 운영하며 기초적인 개발 지식을 다시 쌓고 있음

이전 직장

이전 회사에서 담당하신 업무와 프로젝트에 대해 설명해주세요.

  • 모임 주최 서비스를 운영하는 첫 회사에서 퍼블리셔, 프론트엔드, 백엔드 개발(서버, 디비 관리) 순으로 포지션 변경
  • 두 번째 회사에서 백엔드로 입사하여 팀장의 부재로 업무와 일정 관리를 담당. 운세 서비스를 리뉴얼

업무 중 마찰이나 갈등을 겪었을 때, 어떻게 대처하고 해결했나요?

  • 잦은 포지션 변경으로 인해, 팀원들보다는 내 실력이 문제인 경우가 많았음
  • 그 외에는 촉박한 일정과 요구사항 변경으로 인해, 의견 충돌이 있었으나 대부분 회의(와 야근을) 통해 해결

퇴사를 하게 된 특별한 이유가 있나요?

  • 첫 회사는 너무 다양한 업무(프론트, 백, 서버, 디비, 매니징)를 진행하며 번아웃으로 인해 휴식이 필요
  • 두 번째 회사는 경영 악화로 인해 퇴사

팀 관리

개발팀은 어떻게 구성되어 있었나요?

  • 총 9명. 프론트엔드 3명, 백엔드 3명과 Devops, MLOps, 데이터 사이언티스트 각 1명으로 구성
  • 다양한 사람들과 협업하며, 업무를 이해하고 지원

프로젝트 관리나 개발 프로세스는 어떻게 진행했나요?

  • 첫 회사에서 배운 애자일 방법론을 두 번째 회사에 적용
  • 스크럼과 칸반을 혼용하여, 일정과 업무를 관리

지라나 컨플루언스를 왜, 어떻게 활용했나요?

  • 이슈 관리와 일정 관리에 사용
  • 다른 시스템과의 연동이나 외국 팀과의 협업과 권한 관리에 유용하여 선택

애자일에 대해 가지고 있는 특별한 인사이트(생각이나 경험)가 있나요?

  • 적응력과 자율성 : 빠르게 변하는 환경(스타트업)에서 유연하게 대처하면서도 독립적으로 문제를 해결할 수 있는 구조를 만들어야 함
  • 빠른 실패(fail fast) : 실패를 두려워 하지 않고, 빠르게 인지하고 대응할 수 있는 환경이 중요함

기술

SOLID 원칙에 대해 간단하게 설명해주세요.

  • 코드의 유지보수와 확장성을 위한 객체지향 설계의 5가지 원칙
  • 클래스의 책임 분리(S), 변화에 유연한 구조(O), 안전한 상속(L), 인터페이스 최소화(I), 의존성 추상화(D)를 기반으로 코드 품질을 개선
  • Service와 Repository 계층 분리, 의존성 주입 등 적용

사용하셨던 DTO, DAO, Repository에 대해 설명해주세요.

  • 데이터를 전송하기 위해 DTO를 사용했으나, DAO와 Repository는 Eloquent Model이 있어 사용하지 않음
  • Model을 Repository처럼 사용하여 데이터베이스와의 상호작용을 추상화하고, 비즈니스 로직을 분리

HTTP Method나 Status Code에 관한 경험이 있나요?

  • API 요청은 성공하였으나, 데이터가 없는 경우 200, 204, 404로 논의
  • 운세 서비스 특성 상, 시스템이 노후화된 클라이언트들이 존재. GET&POST로만 요청을 받아 처리

결제 시스템을 구현하거나 PG 연동 시, 발생했던 문제와 해결 방법을 말씀해주세요.

  • 결제 관련 문제(결제 트랜잭션 관리, 결제 승인 딜레이, 결제 취소 등)와 보안 문제를 경험

개발할 때 선호하는 IDE나 추천하는 플러그인이 있나요?

  • PHPStorm과 Laravel 플러그인을 사용
  • VSCode를 커스텀하여 사용해보려 했으나, PHPStorm이 더 편리하다고 생각

새로운 기술이나 언어를 배우는 것에 대해 어떻게 생각하시나요? 학습 의사가 있나요?

  • 첫 회사에서는 JS, PHP 등. 두 번째 회사에서는 PHP, Python, Go 등을 사용
  • 학습 시간이 부족하여, 새로운 기술을 배우는 것에 대해 걱정이 있으나, 끊임없이 공부하고자 함

최근에 관심을 가지고 있는 기술이나 분야가 있나요?

  • CI/CD (GitHub Actions) 자동화와 AI 관련 기술이나 서비스에 관심이 있음

기술적으로 가장 어렵거나 복잡했던 일을 하나 공유해주세요.

  • 트래픽이 증가하며 발생한 서버와 네트워크 문제
  • 서버 모니터링과 로그 분석. VPC와 보안, CDN 설정 등

PHP&Laravel

주로 어떤 기술이나 언어를 선호하고 어떤 버전을 사용하고 있나요?

  • PHP(Laravel)를 주로 사용하며, 가능한 최신 버전을 사용 (PHP 8.2, Laravel 11)
  • JS로 시작하여 Python, Go 등을 사용해 본 경험도 있음

언어나 프레임워크의 버전을 업그레이드하며 발생했던 문제와 해결 방법을 말씀해주세요.

  • PHP 5.x -> 7.x 업그레이드 시, 변경된 함수 문제 및 CentOS 라이브러리 문제
  • 그 이후에는 프레임워크(Laravel) 사용 및 테스트 작성으로 업그레이드 관련 문제가 거의 발생하지 않음

Modern PHP와 PSR에 대해 이해하고 계신가요?

  • Modern PUG와 PHP THE RIGHT WAY 확인
  • 최근 PSR을 준수하고 PER 확인하며 사내 코드 스타일을 정하거나 PHP 패키지를 제작

Xdebug 같은 디버깅 도구를 사용하신 경험이 있으신가요? 사용하신다면 어떤 방식으로 사용하셨나요?

  • Xdebug는 사용해보지 않았으나, debugbar나 clockwork 사용 경험이 있음
  • 간단한 디버깅은 Laravel의 dd()나 Log 기능 사용

Laravel이 어떻게 동작하는지, 라이프사이클을 알고 계신가요?

  • 최근 Laravel HTTP 동작 방식을 확인하며 라이프사이클도 확인함
  • index.php, kernel, provider, routes, middleware 등

Eloquent ORM에 대해 알고 계신 내용을 자유롭게 설명해주세요.

  • Eloquent와 Model, Relationship, Collection 등을 활용한 경험
  • 무조건 Eloquent만을 사용하지 않고, 성능 최적화를 위해 Query Builder와 적절히 조합

ORM과 Query Builder를 사용해 보셨다면, 차이점과 사용 경험을 말씀해주세요.

  • ORM은 생산성을 위해 간결하게 처리
  • Query Builder는 대규모 데이터나 성능 최적화가 필요한 경우 사용

Mutator와 Accessor를 사용하신 경험이 있나요?

  • Mutator를 사용해 데이터 저장 전 포맷 변환, Accessor를 통해 클라이언트에 반환 시 데이터 가공 처리
  • 날짜 형식, 타입이나 암호화된 데이터 핸들링 사용 경험

Eager Loading과 Lazy Loading의 차이점과 사용하며 겪었던 문제를 말씀해주세요.

  • Lazy Loading 사용 중 N+1 문제를 경험, Eager Loading으로 관계를 사전에 로드하여 해결

(Laravel에서) 사용했던 패턴이나 구조에 대해 설명해주세요.

  • Service, Facade, Action 등을 활용

DB

데이터베이스를 설계해 본 경험이 있으신가요? 어떤 점을 고려하셨나요?

  • 첫 회사에서도 서브 파트에서 디비 설계를 진행, 이전 회사에서는 전체 시스템(인프라, 디비 등) 설계
  • 정규화, 성능, 확장성 등을 고려하여 설계

데이터베이스 성능을 개선하거나 최적화한 경험이 있으신가요?

  • 트래픽 증가로 인한 성능 저하를 경험하며 인덱스, 쿼리 최적화, 캐싱 등을 활용
  • MySQL, NoSQL, Redis 등을 사용

인덱스를 어떻게 활용하셨고, 문제점이나 사용하면서 느낀 장단점이 무엇인지 궁금합니다.

  • DB를 직접 조작하지 않고, Laravel migration을 통해 인덱스 생성
  • 단일, 복합 인덱스를 활용하여 성능 최적화
  • 초기에는 잦은 인덱스 생성과 변경으로 인한 성능 저하와 관리 복잡성을 경험

트랜잭션에 대해 간단하게 설명해주세요.

  • 여러 개의 쿼리를 묶어서 한 번에 처리. 모두 성공하면 커밋, 하나라도 실패하면 롤백
  • ACID 특성을 가지며, 데이터 무결성을 보장

NoSQL과 RDBMS의 차이점과 사용 경험을 말씀해주세요.

  • 웹 서비스에 MySQL을 사용. 유저 로그 등은 MongoDB를 사용
  • MySQL은 정형화된 데이터를 저장하고 ACID 특성을 가짐
  • MongoDB는 비정형화된 데이터를 저장하고 확장성과 성능을 중시

Git

Git이나 Github를 활용한 경험을 말씀해주세요.

  • 개발 워크플로우와 버저닝, CI/CD 구축 등을 위해 GitOps를 선택
  • 협업, 코드 관리, 배포에서 팀의 효율성 향상과 스트레스 감소를 경험

코드 리뷰 경험이 있으신가요? 주의할 점이나 팁이 있다면 공유해주세요.

  • GitHub PR을 통해 코드 리뷰를 진행
  • 리뷰가 지연되거나 무시되는 경우가 있어, 리뷰어에게 리뷰 시간이나 알림을 주는 방법
  • 추상적인 피드백보다는 구체적인 방향이나 의견을 제시하고, 큰 작업을 작은 단위로 나누어 관리

Rebase와 Revert의 차이점은 무엇이고, 사용해 본 경험이 있나요?

  • 변경 사항을 취소하거나 이전 커밋으로 이동하기 위해 Reset를 사용
  • 특정 커밋이나 버전으로 되돌리고, 히스토리를 남기기 위해 Revert를 사용
  • 브랜치를 합치거나 커밋을 정리하기 위해 Rebase를 사용

Server (AWS)

트래픽이 증가하며 발생했던 문제나 서버 최적화 경험이 있으신가요?

  • 서비스가 성장하며 트래픽 증가로 인해, 최초에는 서버 사양 업그레이드로 대응
  • 쿼리 최적화, 캐싱 등을 활용하고 Cloudflare나 Cloudfront와 같은 CDN을 도입
  • 로드밸런서와 오토스케일링 등을 설정하여 서버 부하를 분산

서버 모니터링은 어떻게 하셨나요?

  • AWS CloudWatch나 Laravel log를 사용하여 slack으로 알림을 받음
  • 로그는 일단 NoSQL에 저장하고 데이터 사이언티스트가 구축한 데이터 파이프라인을 통해 분석

Kafka나 Pub/Sub에 대해 알고 계신가요?

  • 카프카 사용 경험은 없으나 DB를 활용한 메시지 큐 시스템에 대한 이해와 활용 경험은 있음
  • 토픽, 파티션, 컨슈머 등의 개념을 확인

AWS의 어떤 서비스들을 사용해 보셨나요?

  • 기본적인 웹 서비스를 위해 EC2, EB, ECR, RDS, S3, CloudFront 등을 사용 (이력서에 간단하게 기술)

Elastic Beanstalk과 Lightsail의 차이점을 설명해주세요.

  • Lightsail은 소규모 프로젝트를 위한 간단한 클라우드 서버 환경 제공
  • EB는 애플리케이션 배포 자동화, 스케일링 및 로드밸런싱 지원

Elastic Beanstalk 배포 방법이나 과정을 설명해주세요.

  • GitHub Actions를 설정하여 develop이나 main에 코드가 업데이트되면 Docker 이미지를 빌드하고 ECR에 업로드
  • 필요 시, 직접 EB CLI를 사용하여 배포

개발 환경 설정이나 배포를 어떻게 진행했는지 말씀해주세요. (Docker)

  • 초기에는 직접 서버를 구축하고, Docker를 사용하여 개발 환경을 구성
  • AWS로 이전하며 Docker Compose를 사용하여 운영 환경을 구성하고 배포
  • 추후 Laravel Sail을 사용하여 로컬 개발 환경과 운영 환경을 동일하게 유지

VPC 설정은 어떻게 하셨나요?

  • 퍼블릭 서브넷에 ALBNAT Gateway 설정, 프라이빗 서브넷에 RDS 및 내부 서비스(lambda) 배치

CI/CD 경험과 본인 만의 노하우가 있다면 공유해주세요.

  • 이전 직장에서 GitOps를 지향하며, GitHub Actions로 코드 관리(스캔 및 린트), 테스트, 배포 자동화 설정
  • 배포 시, 점진적으로 전환하여 오류에 빠르게 대응하는 등 안정적인 배포를 지향

난해한 질문

객체지향 프로그래밍과 객체라는 개념에 대해 설명해주세요.

추상화란 무엇이라고 생각하고, 어떤 의미가 있나요?

본인이 생각하는 이상적인 디자인 패턴과 이유를 설명해주세요.


created

category

misc