상세 컨텐츠

본문 제목

[BACKEND] 매일매일 준비하는 백엔드 기술면접 1/29-1/31

취준/1. 기술면접

by ranlan 2022. 2. 3. 12:32

본문

728x90

[망나니 개발자 Mangky's Diary] 기술 면접 준비를 위한 문제 구독 서비스 https://mangkyu.tistory.com/200

 

[기술면접] CS 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!)

1. 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!) [ 서비스 소개 ] 개발자가 되기 위해 또는 새로운 회사로 이직하기 위해 기술 면접 준비는 필수입니다. 많은 분들이 기술 면접을 준

mangkyu.tistory.com

 

 

2022/01/29

1. [SPRING] AOP에서 Aspect, Advice, Pointcut 및 Joinpoint에 대해 설명해주세요

AOP(관점지향 프로그래밍)공통적인 관심을 분리해 모듈화시켜 핵심 로직에 영향을 미치지 않고 중복을 제거하는 방법론이다.

  • Aspect
    (Advice+Pointcut) 흩어진 기능들을 모은 모듈, 여러 객체에 적용될 공통 관심 기능
  • Advice
    언제 공통 관심 기능을 핵심 로직에 적용할지(Aspect가 무엇을 언제 적용할 지) 정의
    공통기능을 담은 구현체
  • Poincut
    조인포인트들의 부분 집합, 특정 조건에 의해 필터링된 조인포인트로 실제로 어드바이스가 적용되는 조인포인트이다.
    공통 기능이 적용될 대상을 결정한다.
  • Joinpoint
    특정 작업이 실행되는 시점으로 어드바이가 적용될 수 있는 후보 지점 혹은 호출 이벤트들, 포인트컷의 후보들
    * 스프링에서는 메서드만이 Joinpoint로 제공됨
  • Target
    실질적인 비즈니스 로직을 구현하고 있는 코드, 어떤 관심과도 관계를 맺지 않는다.
  • Weaving
    관점을 필요한 시점에 주입하는 작업, 조인포인트를 어드바이스로 감싸는 과정
    지정된 객체에 Aspect를 적용하여 새로운 프록시 객체를 생성하고 적용하는 것으로 공통코드를 핵심 로직 코드에 삽입하는 과정
  • Proxy
    타겟의 요청을 대신 받아줌

https://swingswing.tistory.com/m/272
https://devbox.tistory.com/entry/spring-AOP-%EC%9A%A9%EC%96%B4-%EC%84%A4%EB%AA%85

https://sjh836.tistory.com/157 


2. [PROGRAMMING] 프레임워크라이브러리의 차이에 대해 설명하고, 본인이 사용해 본 것들에 대해 설명해주세요

  • 프레임워크란 소프트웨어 문제 해결 시 기반이 되는 뼈대나 골조로 필수적인 코드나 알고리즘, 데이터베이스 연동 등 기본적인 기능의 뼈대를 제공한다.
  • 예) 스프링 프레임워크자바 어플리케이션 개발을 위한 오픈소스 프레임워크이다. 동적 웹페이지 개발을 위한 여러가지 기본 기능을 제공하여 보다 쉽게 개발할 수 있도록 도와준다.
  • 라이브러리는 개발자가 개발하는데 필요한 도구를 모아둔 것으로 코드, 변수, 함수 등의 집합이다.
  • 예) 제이쿼리(jQuery)는 자바스크립트 언어를 간편하게 사용할 수 있도록 단순화시킨 오픈소스 기반의 자바스크립트 라이브러리이다.
    웹 페이지상에서 엘리먼트를 쉽게 찾고 조작할 수 있고 웹 브라우저에 대한 호환성이 뛰어나다. 관련 플러그인들이 웹 상에 공개되어 있으며 플러그인을 직접 구현하거나 확장할 수 있다.
    하지만 최근 웹 표준 API의 확장과 웹 브라우저의 세대 교체와 렌더링 발전으로 인한 양질의 어플리케이션 구현 가능, 가상 DOM을 이용하는 라이브러리 등장 등의 원인으로 인기를 잃고 있다.
  • 예2) OpenLayers는 브라우저 위 지도 데이터를 표현하기 위한 자바스크립트 라이브러리이다.

 

3. [OS] 4코어 서버에 싱글 쓰레드 애플리케이션 4개로 클러스터를 구성했을 때 어떠한 문제가 발생할 수 있을까요?

  •  

 

2022/01/30

1. [SPRING] 스프링에서 예외 처리를 어떻게 하였나요.

  • 메서드 단위 Try/Catch 사용
    예외가 발생할 수 있는 코드 블럭을 Try로 지정하고 예외가 발생하였을 때 Catch 블럭의 코드를 수행하여 처리한다.
  • ResponseStatusExceptionResolver
  • 컨트롤러에서 @ExceptionHandler 사용
    @Controller, @RestController가 적용된 빈에서 발생하는 예외를 잡아 하나의 메서드에서 처리해주는 기능을 제공한다.
    두 컨트롤러에서만 등록해 사용 가능하다.
    주로 파라미터는 Exception이고 반환 타입은 자유롭게 정의하여 사용할 수 있다.
  • 컨트롤러에서 @ControllerAdvice 사용
    @Controller, 전역에서 발생할 수 있는 예외를 잡아 처리한다.
    * @ControllerAdvice를 통해 모든 컨트롤러에서 발생하는 예외를 잡고 @ExceptionHandler를 통해 예외 종류마다 처리할 매서드를 정의한다.
  • 커스텀 Exception 생성하여 사용

 

2. [NETWORK] XSS에 대해 설명하고 XSS를 막기 위한 방법들에 대해 설명해주세요.

권한이 없는 사용자가 악의적인 스크립트를 삽입하는 것이다.

  • 정규식이나 관련 메서드(contains, indexOf 등)를 이용해 입력값을 필터링한다.
  • XSS Filter를 적용한다.
  • 패킷을 중간에서 가로채는 패킷 스니핑을 방지하기 위해 데이터를 암호화하여 주고받는 https를 이용한다.
  • 보안 취약점을 예방하기위한 라이브러리를 사용한다.


3. [PROGRAMMING] TDD(Test-Driven-Devlopement)가 무엇인지 설명해주세요.

테스트 주도 개발(TDD)는 자동화된 테스트 케이스 작성 후 실제 코드를 개발하여 리팩토링 과정을 거친다. 반복적인 수정과 테스트를 통해 고품질의 소프트웨어를 개발한다.

  • 테스트 코드를 먼저 작성함으로써 보다 명확하게 프로그램의 구조와 기능을 설계할 수 있다. 테스트를 위해 코드의 재사용을 염두해두고 프로그래밍하기 때문에 객체지향적인 프로그래밍이 가능하다.
  • 기능의 예외와 문제들을 미리 확인해보며 설계, 구조적 문제를 파악하기 쉽기 때문에 설계 수정 시간이 단축된다.
  • 디버깅 시간이 단축된다.
  • 유지보수가 쉽다.
  • 정확한 테스트 근거 자료가 되며 테스트 문서를 대신할 수 있다.

 

 

2022/01/31

1. [SERVER] 대칭키, 비대칭키 암호화 방식에 대해 설명하세요.

  • 대칭키(비밀키)
    암호화키와 복호화키가 동일하여 키를 공개하지 않은채 교환하여 데이터 암복호화를 진행한다.
    • SEED, AES, ARIA, DES 등
    • 수행시간이 짧다.
    • 키가 탈취될 수 있기 때문에 안전한 키 교환이 요구된다. 관리하는 사람이 많아질수록 키 관리가 어려워진다.
  • 비대칭키(공개키)
    암호화키와 복호화키가 동일하지 않다. 암호화에 필요한 키는 공개되어있고 복호화에 필요한 키는 비밀키로 암호화키에 대응되는 비밀키(개인키)를 가진 사람만이 데이터를 복호화할 수 있다.
    • RSA, DSA, ECC 등
    • 키 교환 과정이 필요없고 데이터의 기밀성과 인증, 부인방지 기능이 제공된다.
    • 속도가 느리다.
  • SSLHTTPS
    HTTPS는 HTTP프로토콜에 보안 계층이 추가된 것이다. 여기서 SSL이 사용되는데 SSL은 클라이언트와 서버간 통신을 위해 공인된 제 3업체(CA)에서 발급하는 전자문서(인증서)이다. 대칭키와 비대칭키를 혼합하여 사용한다.
    (1) 웹 브라우저가 웹 서버에 요청을 보낸다.
    (2) 웹 서버는 웹 브라우저에 인증서와 함께 응답을 보낸다. 인증서에는 CA의 개인키(비밀키)로 암호화된 정보와 공개키가 들어있다.
    (3) 웹 브라우저는 이미 갖고있는 CA의 비밀키로 데이터를 복호화한다.
    (4) 웹 브라우저는 실제 데이터 암호화에 사용될 비밀키를 생성하고 인증서에서 꺼낸 웹 서버의 공개키로 암호화하여 웹 서버로 보낸다.
    (5) 웹 서버는 브라우저에서 받은 암호화된 대칭키를 개인키로 복호화하여 확인한다.
    (6) 웹 서버는 복호화한 대칭키를 통해 데이터를 주고받는다.

 

2. [JAVA] 자바에서 제공하는 List, Set, Map에 대해 설명하세요.

컬렉션 프레임워크는 다수의 데이터를 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스들의 집합이다.

  • List
    인덱스를 부여하여 일렬로 늘어선 데이터의 순서를 기억한다. 리스트 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 주소를 참조한다. 동일한 값 저장이 가능하며 동일한 값이 입력되는 경우 새로 주소를 참조하지 않고 동일한 주소를 참조한다. 널값 저장도 가능한데 널의 경우 해당 인덱스는 객체를 참조하지 않는다.
    예) ArrayList, LinkedList, Vetor
  • Set
    리스트와 달리 순서가 저장되지 않아 인덱스 사용이 불가하다. 또한 중복 데이터 저장이 불가하고 널값은 허용한다(널 중복은 불가).
    예) HashSet, TreeSet
  • Map
    {키: 값}으로 구성된 자료구조이다. 키는 중복될 수 없으나 값은 중복이 가능하다. 중복된 키에 접근하는 경우 최근의 값으로 갱신된다.
    예) HashMap, HashTable, LinkedHashMap, TreeMap

(참고 - 2022.02.01 - [backend] - [BACKEND] 백엔드 개발 기술면접 준비(1) 객체지향프로그래밍과 자바)

 

3. [SPRING] Spring MVC에 대해 설명하고 어떠한 흐름으로 요청이 처리되는지 설명하세요.

(참고 - 2022.02.01 - [backend] - [BACKEND] 백엔드 개발 기술면접 준비(2) 스프링프레임워크(어노테이션 포함))

스프링은 웹 모듈을 MVC로 나눠 처리한다.

  • M(Model)서버에서 동작하는 로직을 담당하며 데이터 자체를 의미한다.
  • V(View)결과를 출력하여 사용자에게 보여준다.
  • C(Controller)사용자 요청에 대해 흐름을 제어한다.

(1) 클라이언트로부터 요청이 들어오면 핸들러매핑을 통해 요청 URL에 매핑된 컨트롤러를 조회한다.

(2) 해당 컨트롤러에서 서비스 로직 처리 후 ModelAndView를 반환한다.

(3) 컨트롤러에서 해당 결과를 반환할 View를 찾아 매핑한다.

(4) 찾은 View를 랜더링하여 사용자에게 보여준다.

 

MVC 패턴에는 MVC1, MVC2 두 가지가 있다. 둘의 차이는 클라이언트의 요청 사항을 모듈화되지 않은 하나의 파일로 처리할 지, 기능을 담당하는 모듈들이 역할을 분담하여 처리할 것인지로 결정된다.

  • MVC1
    JSP에서 View, Controller 역할을 모두 담당하며 JSP가 클라이언트 요청 처리를 모두 담당한다.
  • MVC2
    JSP는 비즈니스 로직 처리 없이 View만을 담당한다.
728x90

관련글 더보기

댓글 영역