신입 면접 반성록

noopy·2022년 4월 8일
5

고뇌록

목록 보기
3/3
post-thumbnail

회고

1년이 안되게 개발 공부를 하다가 면접스터디와 함께 여러 회사에 면접을 보는 중이다.
아무래도 사람들과 얘기하는 만큼 다양한 성격의 면접을 경험했는데
그중에 지원자의 의견을 적극적으로 물어보시고 답변에 대한 실무적인 해결방안도 제시해주시는 면접을 겪어서 회고해보려 한다.

Next.js 과제 질문

Next.js로 과제를 진행했고 해당 기술스택을 적용한 사유와 함께 꼬리질문이 들어왔다.

🧐 Next.js를 사용하면 사용자에게 더 빠른 화면을 제공할 수 있나요?

내 답변: 서버에서 SSR로 데이터를 fetching 후 만들어진 HTML 화면을 보여주기 때문에 사용자에게 더 빠른 화면을 보여줄 수 있다고 생각한다.

면접관님: SSR로 데이터를 받으면 api 호출과 response를 기다린 후 html을 만들기 때문에 오히려 더 늦을 수도 있다. api가 정적 데이터라면 SSR보단 SSG를 사용하는 것이 더 좋다.

사실 SSR이라고 무조건 사용자에게 더 빠른 화면을 보여주지 않는데 이 부분을 깊게 생각하지 않고 대답한 것 같다.
SSG는 빌드 타임에 한번 api를 호출하고 영원히 캐시한다. 이 부분을 고려해서 캐시타임을 revalidate로 설정해주면 SSG와 SSR을 더 명확히 구별해서 사용할 수 있을 것 같다.

그렇다면 SSG와 SSR을 구분해서 언제 사용할 수 있을까?

SSG: 완전한 정적 데이터이거나, 데이터가 일정한 주기이며 자주 바뀌지 않을 때 SSG를 사용한다.
SSR: 매번 데이터가 요청되며 api 캐싱이 필요하지 않고 화면에 반영되어야 한다.

🧐 classname도 쓰고, css props도 쓰고, styled도 쓰셨는데 어떤 문제가 있을까요?

내 답변: 남의 코드를 보거나 개선해야할 일이 있을 텐데 다른 개발자 분들이 활용하시기에 어렵다고 느끼실 것 같다.

  • css가 변화한 역사를 아나요? 왜 지금은 CSS in JS를 많이 사용할까요?

공통적으로 자주 사용되는 컴포넌트일 수록 받아올 때 props가 굉장히 많아지는데, 이 부분을 개선하기 위해 classname과 classNames 라이브러리를 처음 적용해 선택적으로 class를 받도록 했다.

이 질문을 하신 이유는 css의 어떠한 단점 때문에 CSS in JS가 만들어졌는지 핵심을 파악하기 위함이신 것 같다.

리액트와 같은 라이브러리(프레임워크)가 발전하면서 컴포넌트 주도 개발이 널리 사용됐는데, 기존의 CSS는 global scope를 갖고 있어 컴포넌트의 스코프와 맞지 않다는 문제가 있었다. 그 때문에 css Modules로 스코프의 범위를 줄이고자 했다. 그럼에도 css의 고질적인 문제를 해결하고자 JS로 CSS를 만드는 움직임이 생겼고 그게 현재의 CSS in JS이다. (참고)

🧐 useMemo와 useCallback을 보통 언제 사용할까요?

내 답변: useMemo는 함수의 계산 결과를 메모이제이션하기 위해 사용한다. useCallback은 내 경우 하위 컴포넌트에 함수를 전달할 때 해당 함수 때문에 하위 컴포넌트가 예상치 못하게 리렌더링이 될 수 있으므로, 하위 컴포넌트도 React.memo로 함께 감싸 메모이제이션 한다.

이 질문은 이론적으로 아느냐보다 실무에서 어떤 기준으로 사용하느냐를 물어보신 것 같다. 둘다 어쨋든 활용하면 메모리를 사용하게 되는데 아주 사소한 결과를 위해 메모이제이션을 하는 것은 오히려 비효율적이라고 알려주셨다.
추가적으로 본인들은 계산 결과가 큰 경우, 리렌더링이 자주 일어나는 경우를 기준으로만 사용한다고 알려주셨다.

🧐 !important를 사용하신 이유는?

내 답변: disabled의 우선순위가 중요하기 때문에 기존의 우선순위를 깨고 최우선으로 적용하고자 사용했다.

이 질문의 의도는 !important를 사용하지 말아야 하는 이유에 대해 알려주고자 질문을 주신 것 같다. 사실 불변의 !important는 없다고 한다. disabled가 가장 최우선이 아닌 상황이 올 수도 있는 거고, 상황에 따라 적용해야 될 텐데 그럼 하위 요소에도 !important를 적용하고 그런 악순환이 반복될 수 있다.
따라서 !important라는 문법은 존재하지 않는다고 생각하고 지양해야할 것 같다.

결론

이 외에도 많은 얘기가 오갔고, 면접을 볼 때 답변에 대한 개선방안을 알려주는 곳은 여태껏 없었어서 정말 배울 게 많았던 면접이었다고 느꼈다 👏. 또한 많은 대화가 오가면서 커뮤니케이션을 중시하는 문화라는 걸 간접적으로나마 느낄 수 있었던 좋은 경험이었다.

profile
💪🏻 아는 걸 설명할 줄 아는 개발자 되기

0개의 댓글