UMC 5기 면접 질문 정리

Minjae An·2023년 9월 11일
0

ETC

목록 보기
2/7

본 게시물은 기록용으로 부정확할 수 있음을 미리 고지드립니다.

내가 받았던 질문

SpringBoot가 무엇인지 설명해주세요

나의 답변
외부 라이브러리 의존성 관리, 톰캣 내장 서버 등등 개발외 환경적인 세팅을 편리하게
해주어 개발자가 본질적인 개발 업무에 집중할 수 있게 해주는 스프링 플랫폼에서
제공하는 도구

정석
스프링 부트는 기본적인 설정과 보일러 플레이트 코드(여러 곳에서 재사용되는 코드)
작성을 최소화하고, 자동 설정과 컨벤션을 통해 개발자들이 빠르게 애플리케이션을
개발할 수 있도록 지원하는 스프링 프레임워크이다. 주요 특징은 다음과 같다.

  • 간결한 설정 : 기본 설정을 자동으로 처리
  • 내장 서버 : Tomcat, Jetty 등의 내장 서버를 제공하여 배포/관리 간편화
  • 의존성 관리 간소화 : starter 의존성 통합 모듈 제공, 버전 관리 간편
  • 운영 편의성 : 애플리케이션 상태 모니터링, 로깅, 보안 설정 등 운영 필요 기능 제공

DTO, DAO가 무엇인지 설명해주세요

나의 답변
DTO는 Data Transfer Object, DAO는 Data Access Object의 약자로
DTO는 클라이언트에 데이터를 원하는 형태로 가공하여 전달할 때 쓰이는 클래스,
DAO는 데이터베이스에서 원하는 데이터를 조회할 때 쓰는 클래스이다.
계층형 아키텍처에서 데이터베이스 접근 계층에서 비즈니스 로직 계층에 데이터를
전달할때 DAO를 사용하고, 비즈니스 로직 계층에서 프레젠테이션 계층에 데이터를
전달할때 DTO를 활용하는 것으로 알고 있습니다.

정석
DAO는 DB의 데이터에 접근하기 위한 객체를 가리키며, DB 접근하는 로직을 분리하기
위해 사용합니다. DB에 접근하여 CRUD 등 조작할 수 있는 기능을 수행하며 MVC 패턴의
Model에서 이러한 일을 수행합니다.

DTO는 계층 간 데이터 교환을 위한 Java Bean을 의미합니다. DTO는 로직을 가지지
않는 데이터 객체이고, getter/setter만을 가진 클래스를 의미합니다.

DI(의존성 주입)이 무엇인지 설명해주세요

나의 답변
(모호하게 답변하였다)
의존성은 한 클래스의 필드나 메서드로 다른 클래스가 사용되는 것을 의미하며,
의존성 주입은 해당 클래스를 생성할 때 이러한 의존하는 클래스를 제공해주는 것을 의미합니다.
(이외에 스프링에서 @Autowired 등으로 주입해주는 얘기를 좀 곁들었던 걸로 기억)

정석
의존성 주입이란 외부에서 두 객체간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를
사이에 두어 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로
주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다. 정리하면 다음과 같다.

  • 두 객체간의 관계라는 관심사의 분리
  • 두 객체 간의 관심도를 낮춤
  • 객체의 유연성을 높임
  • 테스트 작성을 용이하게 함(런타임에 유연하게 구현체 주입)

API와 시스템 콜의 개념과 차이점에 대해 알려주세요

나의 답변
API란 Application Programmable Interface의 약자로 특정 서비스에서 데이터를
클라이언트에 데이터를 제공하기 위한 경로의 집합을 지칭합니다.

시스템 콜이란 좀 더 로우 레벨의 작업들을 처리하기 위해 OS의 네이티브 메서드등을 호출하는
행위를 의미합니다.

정석
하드웨어에 접근하기 위해선 운영체제의 핵심적인 기능들을 담당하는 부분인 커널에게
필요한 작업을 요청해야 합니다. 이런 작업들은 커널내에 '커널 함수'의 형태로 구현되어 있으며
이 커널 함수를 호출하는 행위를 시스템 콜이라 정의합니다. 위와 같이 OS의 권한이 필요한
작업은 오직 시스템 콜을 통해서만 요청될 수 있습니다.

API는 프로그램에서 어떤 데이터나 기능을 제공하는 창구같은 개념을 말합니다. 즉, 커널의
API는 시스템 콜이라고 볼 수 있습니다.

CORS가 무엇인지 설명해주세요

나의 답변
제대로 답변하지 못함

정석
CORS란 Cross Origin Resource Sharing의 약자로 직역하면 교차 출처 리소스 정책
이라고 해석할 수 있다.

우선, Origin이란 URL에서 발견할 수 있는 프로토콜 + 호스트 + 포트를 모두 합친
URL을 의미한다. 이런 Origin과 관련하여 SOP(Single-Origin Policy)라는 정책이
존재한다. 이는 '동일한 출처에서만 리소스를 공유할 수 있다'라는 법률을 가지고 있다.

동일 출처가 아닌 경우 접근을 차단하는 이유는 이러한 제약이 없다면 해커가 다른 출처의
코드 등을 통해 개인 정보 등을 가로채는 문제가 발생할 수 있기 때문이다.
따라서 이런 악의적인 경우를 방지하기 위해, SOP 정책으로 동일하지 않은 다른 출처의
스크립트가 실행되지 않도록 브라우저에서 사전에 방지한다.

허나, 개발을 하다보면 불가피하게 다른 출처 간의 상호작용을 해야하는 케이스가 발생한다.
CORS는 다른 출처의 리소스에 대한 허용/비허용 정책을 의미한다. SOP를 위반하여도
CORS 정책을 따르면 다른 출처의 리소스라도 허용한다는 의미이다.
이런 CORS는 보통 아래 절차에 따라 적용된다.

  1. 클라이언트에서 HTTP 요청의 헤더에 Origin을 담아 전달
  2. 서버는 응답 헤더에 Access-Control-Allow-Origin을 담아 클라이언트로 전달
  3. 클라이언트에서 Origin과 서버가 보내준 Access-Control-Allow-Origin을 비교, 판단

결국 CORS의 동작은 브라우저를 통하지만, 서버의 허용이 있어야 한다.

프로젝트중 마주했던 가장 큰 갈등 상황이나 난관이 있었다면
어떻게 그 난관을 해결하였는지 말씀해주세요

답변
프로젝트 진행 중 불가피한 인원 이탈로 인해 기존에 분담했던 업무보다 더 많은 업무를
백엔드 파트 팀원들이 부담하게된 상황에서 같은 파트에 있던 팀원의 러닝커브로 인해
리팩터링 작업시 개발 생산성이 저하되는 문제가 발생했습니다. 이에 따라 해당 팀원이
어려움을 겪는 지점을 수시로 컨택하여 해소해주며 리드하여 작업을 제한된 기한안에
소화할 수 있도록 도왔습니다.

옆 면접자분이 받으셨던 질문

애노테이션이 무엇인지 설명해주세요

애노테이션은 다른 코드(프로그램)에게 유용한 정보를 제공하기 위해 사용되는 것으로
주석과 같은 의미를 가진다.
어노테이션을 통해 컴파일러에게 문법 에러를 체크하기 위한 정보나 프로그램 빌드시
코드를 자동 생성, 런타임에 특정 기능을 실행할 수 있게 하는 정보 등을 제공할 수 있다.

게시물과 태그가 존재하고 게시물에 여러 태그가 달릴 수 있고, 한 태그가 여러 게시물에 달릴 수 있을 때 데이터베이스를 어떤 식으로 설계할 수 있을지 말씀해주세요

게시물과 태그는 M:M 관계를 띄므로 다대다 관계로 정의할 수 있을 것 같습니다. 실무에서
다대다 관계를 그대로 구현하는 것은 쿼리의 복잡도 증가, 유지보수 난이도 상승 등의 이유로
권장되지 않는 것으로 알고 있습니다. 따라서 구현시에는 다대다 관계를 두 개의 일대다 관계로
풀어낼 수 있는 중계테이블 '게시물 태그'를 정의하고, 게시물의 PK와 태그의 PK를 외래키
필드로 가지는 구조를 채택하는 것이 효율적이라 판단됩니다.

profile
집념의 개발자

0개의 댓글