티스토리 뷰
면접 본 회사 정보
면접 회사 : P사
사원 수: 60명
온라인 이커머스 쇼핑몰을 운영하고 있으며
규모가 작진 않은 중소기업이었다.
질문은 다양하고 많았는데.
기술질문이 많았다
생각나는 질문
1. == 와 ===의 차이
c#에선 ===는 없기때문에 많이 당황했던 질문
코드가 다 거기서 거기지 싶었는데
여기서 뒷통수를 맞아버렸다.
==는 얕은 비교로 '3' = 3은 같은값으로 보지만
===은 깊은 비교로 타입까지 비교한다.
2. 상태 관리
데이터를 저장하고 공유하는 변경하는 방식
로그인 여부, 모달 열림 여부, 장바구니 목록 같은 상태를 말한다
내가 배웠던 Unity와의 공통점은 상태에따라 다른 로직이 실행된다는 것.
로컬 상태 : useState, useReducer -> 컴포넌트 내부상태
전역상태 : 여러 컴퓨넌트에서 공유하는 상태 -> Context API, Redux, Zustand
서버상태 : 서버에서 받아온 비동기 데이터 -> React Query 같은 라이브러리로 관리
유니티 에서의 상태관리
- 게임의 진행 흐름이나 캐릭터의 상태를 제어하기위한 구조
- 게임의 시작, 일시정지, 종료, 로비 상태
웹에서의 상태관리
- UI와 데이터의 상태를 관리하는 방식
- 데이터 값, 화면 렌더링 조건, 로딩 상태 등
- 화면 재렌더링, API 재요청 등
항목 | Unity 상태관리 | 웹 상태관리 |
핵심 목적 | 게임 로직 전환 (상태 머신) | UI 렌더링 제어, 데이터 관리 |
전형적 사용 | 캐릭터 상태, 게임 흐름 (플레이 ↔ 종료) | 사용자 입력, 서버 응답, UI 표시 여부 |
기술 | C#, State 패턴, Enum | JavaScript/TypeScript, useState, Redux, React Query 등 |
상태 변화 결과 | 행동 로직, 애니메이션, 충돌 처리 | 화면 재렌더링, API 재요청 등 |
둘다 상태가 변하면 로직이 바뀐다는 개념을 바탕을 함.
복잡도가 증가할 수록 구조화된 상태 관리 패턴 중요.
3. GIT과 SVN의 차이
나는 SVN을 썼을 때 브런치를 안썼기 때문에 그 차이인줄 알았는데
SVN도 브런치를 따로 팔 수 있었다.
서버를 가지고있냐 안가지고있냐의 차이가 큰 차이였다.
SVN은 중앙집중식으로 서버가 연결되어있어야 작업이 가능하지만
GIT의 경우 분산형으로 내 프로젝트에도 프로젝트가 복사되어있고 오프라인에서도 작업이 가능하다.
항목 | SVN | GIT |
구조 | 중앙 집중식 (Centralized) | 분산형 (Distributed) |
저장소 | 서버에 모든 기록 보관, 클라이언트는 일부분만 가져옴 | 클라이언트도 전체 저장소 보유 |
인터넷 연결 | 항상 서버와 연결 필요 | 오프라인에서도 작업 가능 |
브랜치 | 무겁고 느림 | 브랜치가 가볍고 빠름 |
속도 | 느림 (특히 서버 의존 작업) | 빠름 (로컬 작업 중심) |
사용 난이도 | 비교적 쉬움 | 초기 진입장벽 있지만 유연함 |
예시 | 구형 기업 프로젝트, 팀 내 제어 필요 환경 | 오픈소스, 현대적인 프로젝트 대부분 |
4. null과 undefined의 차이
이 둘의 차이를 알지 못했다.
내 눈에는 둘다 데이터 오류날때 많이 봤던것들.
null은 값을 비워둔 형태 (개발자가 명시적으로 설정)
undefined은 값이 정의되지않은 상태 (자바스크립트가 자동으로 설정)
typeof null // 👉 "object" ← 버그지만 유지됨
typeof undefined // 👉 "undefined"
5 - 1 user 정보를 담는 테이블의 비밀번호 타입은 뭔지
비밀번호가 암호화 되어있긴할텐데 supabase에선 계정을 알아서 관리해줘서 비밀번호 타입을 몰랐다
supabase에선 아이디의 UUID같은건가?생각했는데 해시와는 달랐다
비밀번호는 데이터베이스에 담을 때 해시값을 담는다.
argon2 이나 bcrypt 같은 알고리즘 함수로 비밀번호를 해시화한다.
해시화한 비밀번호는 데이터베이스에 저장되며
로그인할 때 bcrypt.compare(입력값, 해시값)
함수가 작동되면서 비밀번호가 맞는지 틀린지 검사한다.
중간에 왜 해시에대해서 물어보지 싶었는데
정답을 다 알려주면서 면접을 봤구나 곱씹어보니 친절한 면접이었다.
UUID (고유 식별자)였다.
딱히 해시화 된 건 아니었고 그냥 랜덤이나 시간 기반으로 만든 유일 ID 이다
5 - 2 user테이블을 짤 때 컬럼 생각나는 게 있는지
음.. 나는 보통 ERD작업을 많이했을텐데 진짜 하나도 생각나지 않았다
유저 이름 전화번호 주소 소속 뭐 등등 많았는데.... 진짜 하나도 기억이 안난다 ㅋㅋ
내가 최근에 짠 user테이블은 없다
당연하게도 supabase에선 user테이블을 나눌 필요가 없기 때문이다
브라우저에서 관리가 가능하다
그 외 질문
자신의 롤이 잇는지
나는 개발할 때 규칙을 물어보는 줄 알았다
알고보니 역할을 얘기하는 것이었다.
처음엔 개발할때 팀 규칙들을 설명하다가
중간에 정정해줘서 보통 맡은 역할을 말했다.
이미 자기소개서에도 있는 내용이지만.
회사를 퇴사한 이유
회사의 잘못이지만 너무 감정적이게 표현하지 않으려 노력했다
근데 좀 실패한듯.
회사에 대해서 질문이 있는지
없어서 질문을 못했다.
어떻게든 생각해낸 건 결과는 언제나오나 정도..
느낀 점
이미 기술면접으론 빵점이라 마지막까지 노력할 건 없었다 껄껄..
이론을 공부하지않고 보이는 것에 집중한 탓이었다.
많이 반성하게 되는 면접이었다.
그나마 이론적으로 공부한 건 c#이 제일 최근이고
웹 관련 이론공부는 3년전 풀스텍 개발자 과정을 들을 때 조금 들은 게 전부였으니 당연한 결과였다.
그래도 역시 보이는 게 완성되어야 면접이 잡히는 거니까
지금까지 내가 했던 개발들이 헛됐다고는 생각 안한다.
'개발 > 웹 개발' 카테고리의 다른 글
TailwindCSS, 개발자 도구에서 적용이 안 되는 이유 (0) | 2025.05.06 |
---|---|
왜 @supabse-js에서 User 타입을 가져올 수 있을까 (0) | 2025.04.25 |
React, Next.js 활용한 TODO리스트 만들기 - Supabase로 간단한 백엔드 서버 만들기 (0) | 2025.04.18 |
React, Next.js 활용한 TODO리스트 만들기 - CRUD만들기 (0) | 2025.04.12 |
React, Next.js 활용한 TODO리스트 만들기 - Next.js 프로젝트 생성 (0) | 2025.04.10 |