기술 면접 질문(1)

cptkuk91·2022년 7월 26일
1

Algorithm

목록 보기
42/161
  1. 앱 대신 웹을 선택한 이유에 대해서 설명하시오.

    Javascript를 지원하지 않는 브라우저에서 앱을 작동해야 하는 경우 웹 애플리케이션을 통해 문제를 해결할 수 있습니다.
    앱을 통해 개인화, 알림 전송이라는 기능적 제공이 가능하지만 사측 입장에서는 기능, 비용과 함께 고객에게 설치를 강요해야하는 문제점이 발생합니다. 따라서 웹을 선택했고, 사측의 사정 및 전략에 따라 합리적인 이유로 선택해야지 웹, 앱 무엇이 좋다고 확답할 수는 없습니다.

  2. DB 부하에 관련해 Update, Insert, Delete, Select 무엇이 가장 영향이 클까 설명하시오.

    select는 조건절 까지 함께 작성한다면 조회성이라 부담이 덜합니다.
    면적이 넓어진 상태에서 Update, Insert, Delete를 사용할 경우 Index 업데이트가 이루어져야 하기 때문에 부하가 걸릴 수 있습니다. Update에서는 Index에 대한 업데이트가 이루어질 수도 있고 않을 수도 있습니다. Delete에서는 부하를 줄이기 위해 데이터를 지운 후 마킹한 후 데이터 패치 작업을 통해 일괄적으로 Index를 Rebuild해 부하를 줄일 수 있기 때문에 Insert가 DB에 가장 큰 부하를 주게됩니다.

  3. (Ganada) Model 설계와 관련 한 합리적이 이유

    생각해볼 필요가 있다.

  4. HTTP / HTTPS 차이에 대해서 설명하시오.

    우선 가장 큰 목적인 보안적 차이가 중요하다고 생각합니다. 클라이언트 서버간 통신에 있어 보안 조치가 없다면 네트워크 신호를 가로채 HTTP 내용이 외부에 노출됩니다.
    HTTPS의 경우 SSL위에 HTTP를 얹어 보안이 보장된 통신을 하는 프로토콜입니다. 따라서 SSL 암호화 통신이라고도 합니다. SSL 암호화 통신은 공개키 암호화 방식이라는 알고리즘을 통해 구현되고 한쪽 키로 데이터를 암호화 했다면 다른 한쪽의 키로만 복호화를 할 수 있습니다. 따라서 HTTP / HTTPS의 차이는 보안적 차이가 있다고 설명할 수 있습니다.

  1. AWS 배포 과정에 대해서 설명하시오.

    • Route53: 사용 가능한 도메인 이름을 결정 후, Route53에 등록 (DNS 서비스)
    • CloutFront: 웹 사이트 컨텐츠를 유저들에게 효율적으로 전달하기 위한 서비스 (분산 네트워크)
    • Certificate Manager: AWS 인증 관련 매니지먼트 서비스입니다. 서비스 접근 도메인이 안전한 사이트인지 판별 후, 허가가 되면 인증서를 해당 도메인에 적용 시켜줄 수 있습니다.
    • EC2: AWS에서 제공하는 클라우드 컴퓨팅 서비스입니다. SSH를 사용해 linux 인스턴스에 연결해 사용할 수 있습니다.
    • RDS: 관계형 데이터베이스를 간편하게 설명, 운영 및 확장 할 수 있는 AWS 서비스입니다. RDS를 사용하는 이유는 패치, 백업, 복원, 장애 탐지, 복구 등 일반적인 데이터 베이스 작업이 수월하기 때문입니다.
  2. Token Process 과정에 대해서 설명하시오.

    JWT Token의 구성

    • header: 토큰 타입과 해시 암호화를 담습니다.
    • payload: 토큰에 담을 정보를 포함하고 있습니다.
    • signature: secret Key를 암호화한 정보를 담고 있습니다.
    1. 사용자가 Id, Password를 입력하여 로그인 요청
    2. 서버는 요청을 확인하고 secret Key를 통해 Access Token을 발급합니다.
    3. 클라이언트에 JWT를 전달합니다.
    4. 서비스 요청과 권한을 확인하기 위해 Header JWT를 전달합니다.
    5. JWT 서명을 체크하고 JWT에서 사용자 정보를 확인합니다.
    6. 클라이언트에 요청에 대한 응답을 전달합니다.
  3. 익명 채팅 서비스 구현을 위한 DB 설계해보시오.

    생각해볼 필요가 있다.

  4. map과 reduce에 대해서 설명하시오.

Map

let arr = [1,2,3,4,5];

let double = arr.map(function(el) {
	return el * 2;
});

let double2 = arr.map(el => el * 2);
console.log(double2);

console.log(double);

단순하게 펼친다는 것에 집중할 문제가 아니다. 배열의 길이를 바꾸지 않고, 배열 내 요소들에 변화를 주고 싶을 때 활용할 수 있다.

reduce

let arr = [1,2,3,4,5];

let sum1 = arr.reduce((acc, cur) => acc + cur);
let sum2 = arr.reduce((acc, cur) => acc + cur, 10);

console.log(sum1, sum2); // 15, 25

배열의 형태에서 원하는 형태로 값을 변환시키고 싶을 때 활용할 수 있다. initial Value를 설정해 시작점을 달리할 수 있다.
(accumulator, currentValue가 있고, 반환 값을 accumulator에 할당된다. accumulator는 배열 순회 중 유지되며, 모든 배열의 요소의 순회가 끝났을 때 결과를 반환한다.)

  1. 서버 과부하를 줄일 수 있는 방법에 대해서 설명하시오.

    I/O 부하가 걸리는 경우: 명령어에 대해서 확인 후 효율적인 코드 작성이 필요한지 검토합니다.
    해당 서버의 데이터 용량과 증설 가능한 메모리량을 비교해 검토합니다. (메모리 증설을 통해 캐시영역을 확대시킬 수 있는 경우 메모리를 증설하고, 메모리 증설이 힘든 경우 데이터를 분산하거나 캐시서버 도입등을 검토합니다.)
    Load Average를 통해 CPU 사용율을 측정하고 Load Average 값을 통해 분산 처리합니다.

  2. 유저들의 만족도를 높이기 위해서 피드백을 받을 수 있지만, 유저들이 피드백을 안해주는 경우가 많다. 이때 개발자 입장에서 유저를 만족시킬 수 있는 가장 합리적인 방법은 무엇일까?

    개발팀 내부에서 가장 효율적이고 효과적인 방법으로 개발합니다.
    단순화 된 사용자 경험을 제공하고, 본인 스스로 사용해보고 새로운 정보를 제공하자.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글