Node.js 주니어 코딩 면접
새 면접Q. JavaScript 배열에서 find()와 findIndex()의 차이점을 설명하고, 각각 어떤 상황에서 사용해야 하는지 설명해주세요. 또한 요소를 찾지 못했을 때 반환값은 무엇인지 설명해주세요.
find()는 조건을 만족하는 첫 번째 요소 자체를 반환하고, findIndex()는 해당 요소의 인덱스(위치)를 반환합니다. find()는 요소의 값이나 객체 자체가 필요할 때 사용하고, findIndex()는 배열에서 해당 요소의 위치를 알아야 할 때 사용합니다. 요소를 찾지 못하면 find()는 undefined를, findIndex()는 -1을 반환합니다. 실무에서는 객체 배열에서 특정 조건의 객체를 찾거나, 해당 객체를 삭제/수정하기 위해 인덱스가 필요할 때 각각 사용됩니다.
- • find()는 요소 자체 반환, findIndex()는 인덱스 반환
- • 못 찾으면 find()는 undefined, findIndex()는 -1 반환
- • 객체 배열에서 특정 객체 찾기에 유용
배열에서 조건을 만족하는 모든 요소를 찾고 싶다면 어떤 메서드를 사용해야 할까요?
Q. 이메일 주소 문자열에서 '@' 기호를 기준으로 사용자명과 도메인을 분리하고, 도메인에서 최상위 도메인(.com, .net 등)만 추출하는 로직을 구현할 때 어떤 JavaScript 문자열 메서드들을 사용해야 하는지 단계별로 설명해주세요.
먼저 split('@')를 사용해 이메일을 사용자명과 도메인으로 분리합니다. 분리된 배열에서 인덱스 0은 사용자명, 인덱스 1은 도메인이 됩니다. 도메인에서 최상위 도메인을 추출하려면 다시 split('.')을 사용해 도메인을 점으로 분리하고, 배열의 마지막 요소를 가져오기 위해 배열의 length-1 인덱스에 접근하거나 pop() 메서드를 사용합니다. 또는 lastIndexOf('.')로 마지막 점의 위치를 찾고 substring()이나 slice()로 그 이후 문자열을 추출할 수도 있습니다.
- • split('@')로 사용자명과 도메인 분리
- • split('.')로 도메인을 점 단위로 분리
- • lastIndexOf()와 substring() 조합 또는 배열 인덱싱으로 최상위 도메인 추출
이메일 주소의 유효성을 검증하려면 어떤 방법을 사용할 수 있을까요?
Q. Node.js에서 3개의 외부 API를 순차적으로 호출해야 하는 경우와 병렬로 호출해야 하는 경우의 차이를 설명하고, 각각 어떤 방법으로 구현해야 하는지 설명해주세요. 두 방식의 실행 시간 차이는 어떻게 되나요?
순차 호출은 이전 API의 응답이 다음 API 호출에 필요한 경우 사용하며, async/await를 연속으로 사용하거나 then()을 체이닝하여 구현합니다. 병렬 호출은 API들이 서로 독립적일 때 사용하며, Promise.all()에 모든 프로미스를 배열로 전달하여 구현합니다. 순차 호출은 각 API의 응답 시간을 모두 합한 시간이 걸리고(예: 1초+1초+1초=3초), 병렬 호출은 가장 느린 API의 응답 시간만큼만 걸립니다(예: max(1초, 1초, 1초)=1초). 실무에서는 의존성이 없는 API는 병렬로 호출하여 성능을 개선합니다.
- • 순차 호출: 의존성 있을 때, await를 연속 사용
- • 병렬 호출: 독립적일 때, Promise.all() 사용
- • 병렬 호출이 훨씬 빠름 (합 vs 최대값)
Promise.all()을 사용할 때 하나의 API가 실패하면 어떻게 되나요? 일부만 실패해도 성공한 결과를 받으려면 어떻게 해야 할까요?
Q. JavaScript에서 객체의 키(key) 목록을 배열로 가져오는 방법과 값(value) 목록을 배열로 가져오는 방법을 설명하고, 객체를 키-값 쌍의 배열로 변환하는 방법을 설명해주세요. 각각 어떤 메서드를 사용하나요?
Object.keys(객체)를 사용하면 객체의 모든 키를 배열로 반환합니다. Object.values(객체)를 사용하면 객체의 모든 값을 배열로 반환합니다. Object.entries(객체)를 사용하면 [키, 값] 형태의 2차원 배열로 반환합니다. 예를 들어 {name: '홍길동', age: 25}에 대해 Object.entries()를 사용하면 [['name', '홍길동'], ['age', 25]]가 반환됩니다. 실무에서는 객체를 순회하거나 변환할 때 for...in 대신 이 메서드들과 forEach, map을 조합하여 사용합니다.
- • Object.keys()로 키 배열 추출
- • Object.values()로 값 배열 추출
- • Object.entries()로 [키, 값] 쌍 배열 추출
Object.entries()로 얻은 배열을 다시 객체로 변환하려면 어떤 메서드를 사용해야 할까요?
Q. Node.js의 fs 모듈에서 파일 존재 여부를 확인하는 방법을 설명하고, 파일이 존재하지 않을 때 새로 생성하고 존재할 때는 내용을 추가하는 로직을 구현하려면 어떤 메서드들을 사용해야 하는지 설명해주세요. 동기와 비동기 방식의 차이도 함께 설명해주세요.
fs.existsSync(경로)로 동기적으로 파일 존재 여부를 확인하거나, fs.promises.access(경로)를 try-catch로 감싸 비동기적으로 확인할 수 있습니다. 파일이 없으면 fs.writeFile()로 새로 생성하고, 있으면 fs.appendFile()로 내용을 추가합니다. 동기 방식(Sync)은 작업이 완료될 때까지 코드 실행이 멈추고, 비동기 방식(콜백, 프로미스)은 작업이 백그라운드에서 실행되어 다른 코드가 계속 실행됩니다. 실무에서는 서버 성능을 위해 비동기 방식을 선호하며, 초기화 스크립트 등 순차 실행이 필요한 경우에만 동기 방식을 사용합니다.
- • fs.existsSync() 또는 fs.promises.access()로 존재 확인
- • writeFile()로 생성, appendFile()로 추가
- • 비동기 방식이 서버 성능에 유리
파일을 읽고 쓰는 작업 중간에 에러가 발생했을 때 안전하게 처리하려면 어떤 방법을 사용해야 할까요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!