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를 이용한다.
테스트 주도 개발(TDD)는 자동화된 테스트 케이스 작성 후 실제 코드를 개발하여 리팩토링 과정을 거친다. 반복적인 수정과 테스트를 통해 고품질의 소프트웨어를 개발한다.
테스트 코드를 먼저 작성함으로써 보다 명확하게 프로그램의 구조와 기능을 설계할 수 있다. 테스트를 위해 코드의 재사용을 염두해두고 프로그래밍하기 때문에 객체지향적인 프로그래밍이 가능하다.
기능의 예외와 문제들을 미리 확인해보며 설계, 구조적 문제를 파악하기 쉽기 때문에 설계 수정 시간이 단축된다.
디버깅 시간이 단축된다.
유지보수가 쉽다.
정확한 테스트 근거 자료가 되며 테스트 문서를 대신할 수 있다.
2022/01/31
1. [SERVER] 대칭키, 비대칭키 암호화 방식에 대해 설명하세요.
대칭키(비밀키) 암호화키와 복호화키가 동일하여 키를 공개하지 않은채 교환하여 데이터 암복호화를 진행한다.
SEED, AES, ARIA, DES 등
수행시간이 짧다.
키가 탈취될 수 있기 때문에 안전한 키 교환이 요구된다. 관리하는 사람이 많아질수록 키 관리가 어려워진다.
비대칭키(공개키) 암호화키와 복호화키가 동일하지 않다. 암호화에 필요한 키는 공개되어있고 복호화에 필요한 키는 비밀키로 암호화키에 대응되는 비밀키(개인키)를 가진 사람만이 데이터를 복호화할 수 있다.
RSA, DSA, ECC 등
키 교환 과정이 필요없고 데이터의 기밀성과 인증, 부인방지 기능이 제공된다.
속도가 느리다.
SSL과 HTTPS 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
댓글 영역