목차
- 배열에서 요소 제거(remove) 관련 논의와 배열 vs 리스트의 철학적 차이
- TypeScript 클래스 테스트 시 프로퍼티 출력 문제와 Jest 환경 이슈
- React Native 헤드업 푸시알림 권한 및 동작 문제
- 닉네임 소재 대화 및 재미 있는 소소한 이야기
- UUID 활용 및 고유 코드 생성 방법
- 대기업과 중견기업 개발자 선택 고민
- React Query SSR 적용과 에러 바운더리 처리
- 오픈 프로필, 개발 커뮤니티 문화와 인사
- 리액트 UI UX: 카테고리 스크롤 버튼 및 드랍다운 토론
- Axios 인터셉터와 리프레시 토큰 이슈 해결 경험 공유
1. 배열에서 요소 제거(remove) 관련 논의와 배열 vs 리스트의 철학적 차이 🎯
- JS 배열에는 remove 함수가 없고, 요소 제거에는 splice 또는 filter를 주로 사용함.
- 파이썬은 리스트에 remove() 함수가 있어 요소 직접 삭제 가능.
- 배열(Array)과 리스트(List)의 근본 개념 차이:
- 배열: 고정 크기 메모리 공간을 할당하며, 메모리 연속성이 중요함. 예를 들어, 정수 배열은 모든 슬롯이 초기화 되어 있기 때문에 삭제 후 크기 변경이 쉽지 않음.
- 리스트: 동적 크기로 요소들을 컨테이너처럼 담음. 크기 조절 및 요소 삭제가 자연스러움.
- JS의 배열은 동적 배열 개념이라 length가 가변적이지만, 기본적인 배열 철학은 고정 크기임.
- 언어 설계에서 length vs size 구분하는 것도 이러한 철학적 차이를 반영.
- Set 같은 자료구조는 중복 없는 집합이라 remove 함수가 존재하며, 리스트보다는 Set에 이러한 함수가 적합함.
- 배열에 remove가 쉽지 않은 이유는 인덱스 기반이고, 크기를 줄이는 과정이 비효율적일 수 있기 때문임.
- 개발자들 사이에서 이 주제는 '자료구조 철학'까지 논의가 심오하게 이어질 정도로 관심거리임.
2. TypeScript 클래스 테스트 시 프로퍼티 출력 문제와 Jest 환경 이슈 🧪
- TypeScript 클래스에서 옵셔널 프로퍼티를 선언했을 때, new로 인스턴스 생성 후 Jest에서 출력 시 { prop: undefined } 형태로 보이는 문제 제기.
- 실제 JavaScript 트랜스파일 결과, 클래스 필드가 초기화 되지 않았더라도 프로퍼티가 undefined로 존재할 수 있음.
- Jest 테스트 환경과 실제 개발 환경 간 동작 차이가 발생하는 경우가 있음.
- 이를 해결하려면:
- 테스트 코드를 어떻게 작성했는지, 어디서 로그를 찍었는지 정확히 확인해야 함.
- Jest가 사용하는 트랜스파일러(예: ts-node, swc, tsc) 설정에 따라 결과가 다를 수 있음.
- 최근 SWC 컴파일러에서 이와 관련된 이슈가 올라와있고, 직접 이슈 등록 및 커뮤니티 반응 있음.
- 이 문제는 타입스크립트 및 자바스크립트 트랜스파일러 동작에 익숙하지 않은 초보 개발자에게 혼란을 줄 수 있음.
3. React Native 헤드업 푸시알림 권한 및 동작 문제 📱
- 실제 알림은 도착하지만 헤드업(팝업) 알림이 뜨지 않고, 권한 허용 팝업도 나오지 않는 현상 발생.
- React Native 환경에서 헤드업 알림은 OS 설정과 권한 부여, 알림 구현 방식에 크게 의존함.
- 에뮬레이터에서도 실험 가능하나 실제 디바이스 권한 설정을 항상 점검 필요.
- 관련 좋은 자료와 구현 방법 찾기가 어려워서 커뮤니티에 질문이 올라옴.
- 권장사항:
- 실제 디바이스 권한 요청 코드 확인
- OS 버전별 정책 파악
- 문서 및 공식 예제 참고
4. 닉네임 소재 대화 및 소소한 개발자 문화 이야기 😄
- 닉네임 후보로 '제이슨', '세바스찬', '다이슨' 등에 대한 유쾌한 토론.
- 닉네임이 주는 이미지나 연상 효과에 대해 재미있게 의견 공유.
- 커뮤니티 내 인사 문화, 키워드 알림 설정, 자동채팅 기능 활용 등 소통 방식에 대한 경험담 공유.
- 개발자들 간 친밀감과 유쾌한 분위기가 전달되는 부분.
5. UUID 활용 및 고유 코드 생성 방법 🆔
- 거래처 코드 고정 및 고유 식별자를 만드는 방법으로 node-uuid 라이브러리 사용 제안.
- UUID v1은 시간 기반으로 생성되어 타임스탬프 기준 고유값 생성에 적합하나, 구현이 까다롭다는 의견도 있음.
- 실제 현업에서는 상황에 맞게 UUID, 날짜시간 조합, 난수 등 다양한 방법 사용.
- UUID는 중복 가능성이 극히 낮아 여러 시스템에서 고유 식별자로 널리 활용됨.
6. 대기업과 중견기업 개발자 선택 고민 💼
- 대기업 게임회사 백오피스 프론트엔드 개발과 중견기업 서비스 개발 중 고민.
- 대기업은 업무 범위가 세분화되고 시스템이 체계적이라는 장점.
- 중견기업은 업무 범위가 넓고 다양한 경험을 할 수 있다는 점.
- 개인의 관심사, 경력 목표, 워라밸 등 여러 요소를 고려해 선택 권장.
- 급여, 회사 문화, 성장 가능성 등도 중요한 판단 기준임.
7. React Query SSR 적용과 에러 바운더리 처리 ⚛️
- React Query에서 SSR(Server Side Rendering) 적용법과 에러 바운더리, 서스펜스(suspense) 처리에 관한 질문과 답변.
- SSR 환경에서 React Query를 사용하면 클라이언트와 서버 데이터 관리 일관성 유지에 도움이 됨.
- 에러 바운더리(Error Boundary)는 React 컴포넌트 중 에러 발생 시 대체 UI를 보여주는 기능.
- React Query의 suspense 모드 활용 시 로딩 상태 핸들링이 가능해 UI가 부드러워짐.
- 참고 자료 링크 공유됨.
8. 오픈 프로필, 개발 커뮤니티 문화와 인사 🤝
- 커뮤니티에서 오픈 프로필 이용자들에 대한 인상과 이벤트 같은 소소한 이야기.
- 신규 입장자에게 진심 어린 환영 인사 및 매일 아침 문안 인사 문화 존재.
- 실명, 사진 등 개인 프라이버시를 존중하는 분위기.
- 이런 소소한 문화가 개발자 커뮤니티의 활성화와 긍정적 분위기 조성에 기여함.
9. 리액트 UI UX: 카테고리 스크롤 버튼 및 드랍다운 토론 🎨
- 모바일에서 가로 스크롤이 자연스럽지만 PC 특정 해상도에서 방향키로 좌우 조작 필요성 대두.
- 드랍다운과 드래그 UI에 대해 사용자 선호도 차이 토론.
- overflow-x: scroll 속성을 사용해 넘치는 콘텐츠를 숨기고 한 줄로 정리하는 방법 소개.
- UI 설계 시 보편성, 직관성, 접근성 고려 중요.
- < > 버튼처럼 익숙한 UI가 호평 받는 이유도 언급됨.
10. Axios 인터셉터와 리프레시 토큰 이슈 해결 경험 공유 🔄
- Axios interceptor에서 만료된 토큰 시 리프레시 호출 후 새 액세스 토큰으로 API 재호출 구현 과정.
- 새로고침할 때 토큰 만료 오류가 간헐적으로 발생하는 문제 발견.
- 문제 원인은 return await axios(originalRequest) 호출 위치 때문으로 추정됨.
- then 체인 내 호출 시 비동기 처리 순서 문제 가능성 있음.
- 개발자들이 서로 경험 공유하며 코드를 개선, 문제를 해결한 사례.
- 비슷한 이슈를 가진 분들은 interceptor 비동기 흐름을 꼼꼼히 점검해보길 권장.
면접팁⚡
- 배열 vs 리스트 차이 알고 있기: 프로그래밍 면접에서 자료구조의 기본 개념과 차이를 묻는 경우가 많음. 특히 배열이 고정 크기인 이유, 리스트가 동적이면서 삭제가 가능한 이유 등을 명확히 이해하면 좋음.
- TypeScript 클래스 인스턴스 생성과 프로퍼티 동작: Jest 테스트 시 프로퍼티가 undefined로 나오거나 출력되지 않는 문제를 접할 수 있고, 트랜스파일러 설정 차이 해결 경험은 좋은 인상 줌.
- Axios 인터셉터와 토큰 리프레시 흐름 이해: JWT 토큰 갱신 및 API 요청 재실행 문제 해결 경험을 구체적으로 말할 수 있으면 실무 역량 강조 가능.
- React Query SSR 및 에러 바운더리 사용 경험: 최신 React 관련 라이브러리 활용 경험은 프론트엔드 면접에서 좋은 어필 요소임.
링크🔗
- React Query SSR 적용 및 서스펜스 참고: https://velog.io/@eomttt/React-Query-%EC%99%80-SSR
- SWC GitHub 이슈 (TS 클래스 Jest 테스트 문제 관련): https://github.com/swc-project/swc/issues/8160
- TypeScript Playground 예제 (클래스 필드 초기화 차이):
https://www.typescriptlang.org/play?ts=5.3.0-dev.20231020#code/AQYwNghgzlwILAN4FgBQwMYA4FcBGYAliMAB4D8AXMFAC4BOhAdgOYDcamGIA9k3fRwhaPegApmhWlWAAFCPVqEIYADxwAfAEoknLvoDyeAFYBTYQDpoUQiyZjaAC0JQANMEm0tHdFwC+aAGoaJzg1sAAQsCmpLSmTAAmsAgovpi4BMTAeDICzOyBIei8-DxgphZgPCxiTKYA7pFiWt5AA
#JavaScript#TypeScript#ReactNative#ReactQuery#Jest#Axios#배열#클래스테스트#개발커뮤니티#UUID