[2024.06.24 TIL] 내일배움캠프 48일차 (모의 기술 면접 질문 정리)

My_Code·2024년 6월 24일
0

면접

목록 보기
2/4
post-thumbnail

본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.


💻 TIL(Today I Learned)

📌 Today I Done

✏️ ERD를 작성할 때 Relation은 무엇이며, Relation의 종류 3가지를 예시를 들어 설명해 주세요.

  • Relation은 테이블 간의 관계를 표현한 것을 의미함

  • 1:1 관계 : 사용자 1명은 1개의 사용자 정보를 가질 수 있음

  • 1:N 관계 : 사용자 1명은 여러 개의 게시글을 작성할 수 있음

  • N:M 관계 : 사용자는 여러 게시물에 좋아요 할 수 있고, 게시물도 여러 명의 사용자에게 좋아요를 받을 수 있음


✏️ 비밀번호를 DB에 저장할 때 Hash를 이용했는데, Hash는 단방향 암호화와 양방향 암호화 중 어떤 암호화 방식에 해당할까요?

  • Hash는 복호화가 불가능한 단방향 암호화 알고리즘을 사용함

✏️ 비밀번호를 그냥 저장하지 않고 Hash 한 값을 저장 했을 때의 좋은 점은 무엇인가요?

  • 혹시나 중간에 탈취되어도 복호화가 불가능하기 때문에 평문 비밀번호가 탈취되었을 때보다 비교적 안전함

✏️ JWT(JSON Web Token)을 이용해 인증 기능을 했는데, 만약 Access Token이 노출되었을 경우 발생할 수 있는 문제점은 무엇일까요?

  • 노출된 Access Token을 통해 사용자의 인가 과정을 통과해서 개인 정보 탈취나 데이터 삭제 등의 문제가 발생할 수 있음

✏️ 위의 문제점을 보완하기 위한 방법으로는 어떤 것이 있을까요?

  • DB에서 관리하는 Refresh Token을 별도로 발급받아서 Access Token을 발급받기 위한 용도로 사용함

  • 그리고 토큰 발급시 Access Token의 유효 기한을 짧게 설정하고 Refresh Token의 유효기간을 길게 설정해도 탈취되더라도 피해를 최소화 시킴


✏️ JWT를 이용한 인증 시 Cookie를 이용한 방식과 Header를 이용한 방식이 있는데, 각각은 어떤 상황에 사용하는 것이 적합한가요?

  • 쿠키를 이용한 방식은 주로 웹 어플리케이션과 같은 브라우저 기반의 환경에 적합함

  • 헤더를 이용한 방식은 API 서비스나 다양한 플랫폼을 지원해야 하는 경우 적합함


✏️ 인증과 인가가 무엇인지 각각 예시를 들어 설명해 주세요.

  • 인증은 사용자가 인증된 사용자인지 검증하는 작업을 의미. 일반적으로 사이트 로그인이 이에 해당됨

  • 인가는 이미 인증된 사용자가 특정 작업을 수행할 권리가 있는지 검증하는 작업을 의미. 일반적으로 로그인된 사용자만이 게시글을 작성할 수 있는 경우가 이에 해당됨


✏️ Transaction이 무엇이며, 어떤 경우에 사용해야 하나요?

  • 트랜젝션은 DB의 상태를 변경시키는 작업의 단위로, 한꺼번에 수행되어야 하는 연산을 모아놓고 처리해야 하는 경우에 사용함

✏️ MySQL, Prisma로 개발했는데 MySQL을 MongoDB로 그리고 Prisma를 mongoose로 변경하게 된다면 많은 코드 변경이 필요할까요? 주로 어떤 코드에서 변경이 필요한가요?

  • 상당히 많은 코드가 변경되어야 함

  • 데이터베이스 연결, 스키마 정의, 기본적인 DB CRUD 작업 등에서 코드의 변경이 필요함


✏️ 만약 이렇게 DB를 변경하는 경우가 발생했을 때, 코드 변경을 보다 쉽게 하려면 어떻게 코드를 작성하면 좋을 지 생각나는 방식이 있나요? 있다면 작성해 주세요.

  • 의존성 주입을 통해서 어플리케이션 초기화 시점에서 데이터베이스 관련 객체를 주입함. 이를 통해서 한 곳에서 다른 레이어들에게 주어질 객체를 관리할 수 있음

✏️ Class와 Instance가 각각 무엇인지 설명해 주세요.

  • Class : 객체를 생성하기 위한 설계도, 객체의 데이터와 메서드를 정의

  • Instance : 클래스로부터 생성된 객체를 의미


✏️ Class의 Method는 화살표 함수(Arrow Function) 형태로 구현하지 않았을 때 발생할 수 있는 문제와 해당 문제를 해결할 수 있는 다른 방법을 적어주세요. (Hint: this)

  • 클래스의 메서드를 화살표 함수로 구현하지 않고, 일반 함수형태로 구현할 경우 그 안에서 사용하는 this가 정확히 어떤 것을 참조하는지 알 수 없음

  • 그래서 화살표 함수를 통해 선언된 위치의 this를 상속 받아 사용 가능함


✏️ 3-Layered Architecture에서 각 Layer(Controller, Service, Repository)가 하는 역할을 적어주세요.

  • Controller : 사용자로부터 받은 데이터의 유효성 검사를 진행하고 데이터를 Service로 전달함

  • Service : Controller로부터 받은 데이터의 논리적 유효성 검사를 진행하고, 필요한 비즈니스 로직을 수행함. 그리고 DB 접근을 위해 Repository의 메서들를 호출함

  • Repository : DB 조작(CRUD)


✏️ 3-Layered Architecture의 장점과 단점을 아는대로 적어주세요.

  • 장점 : 각 기능마다 모듈화하기 때문에 코드의 재사용성과 유지 보수성이 높아짐. 그리고 각 계층은 독립적이기에 특정 계층을 변경하기 용이함

  • 단점 : 계층이 분리되어 있기 때문에 구조가 많이 복잡해지고, 그로 인해 초기 설계, 구현 단계에서 시간과 노력이 많이 필요함


✏️ res(Request 객체)를 사용하지 않는 Service, Repository Layer에서는 에러 발생 시 어떻게 사용자에게 전달할 수 있는지 과제에서 구현한 방법을 설명해 주세요.

  • 에러 처리를 위한 Error 클래스를 정의해서 다양한 에러를 처리함

  • throw를 통해 발생한 에러에 대한 인스턴스를 만들어서 에러처리 미들웨어로 반환해 에러에 대한 상태와 메세지를 반환함


✏️ 의존성 주입(DI, Dependency Injection)이 무엇이며, 사용해야 하는 이유를 설명해 주세요.

  • 의존성 주입은 객체가 필요한 의존성을 외부로부터 주입받은 방식을 의미함

  • 단위 테스트와 같은 테스트 진행 시 각 클래스의 결합도를 줄여서 관리에 용이하게 만들기 위해 사용함


✏️ 테스트 코드 작성의 장점과 단점을 아는대로 적어주세요.

  • 장점 : 일종의 문서화 역할을 하고 테스트 코드를 통해 원하는 동작을 하는지 확인해 코드 품질 향상을 도모함

  • 단점 : 많은 시간과 비용이 필요함


✏️ 테스트 코드 작성 시 GIVEN-WHEN-THEN 패턴을 이용하면 코드 작성을 조금 더 쉽게 할 수 있습니다. 이 3가지가 의미하는 것은 각각 무엇인지 설명해 주세요.

  • GIVEN : 설정 구간, 코드가 동작하기 위한 변수, 결과값 등을 설정하는 구간

  • WHEN : 실행 구간, 실제 코드를 실행하는 구간

  • THEN : 테스트 구간, 실행된 코드들을 실제로 테스트 하는 구간


✏️ 테스트 코드 작성 시 Mocking을 이용하는 이유를 설명해 주세요.

  • 실제로 동작하는 코드들은 외부로부터 많은 의존성이 존재하기에 모킹을 통해서 이러한 외부 의존성을 격리하고 독립적으로 테스트가 진행되도록 하기 위해 사용함

✏️ 테스트의 종류 3가지와 각각이 무엇인지 간단히 설명해 주세요.

  • 단위 테스트 : 가장 작은 규모의 기능을 테스트 ex) 서비스 단위

  • 통합 테스트 : 다양한 기능을 합쳤을 때 생기는 문제를 방지하기 위한 테스트 ex) 하나의 API 기능

  • E2E 테스트 : 백엔드부터 사용자에게 보여지는 웹페이지 전체가 원하는 대로 동작하는지 테스트



📌 Tomorrow's Goal

✏️ TypeScript 문법 종합 강의 시청 및 모의 면접

  • 오늘 시청한 내용은 JavaScript에 대한 소개와 TypeScript에 대한 소개에 대한 내용이 주를 이룸

  • 내일부터 본격적인 TypeScript에 대한 내용을 배울 예정

  • 오전에는 모의 면접을 진행해야 하기에 면접이 끝나고 부터 시청할 예정



📌 Today's Goal I Done

✔️ 모의 기술 면접 질문 정리

  • 지난 숙련, 심화 주차의 개인과제에서 주어진 질문들을 사용

  • 대부분 머리속으로 간략하게 아는 내용들이기 때문에 생각들을 면접에서 사용할 대답으로 정리함


profile
조금씩 정리하자!!!

0개의 댓글