시간복잡도와 공간복잡도에 대해 설명해주세요
알고리즘의 성능을 측정하는데 사용합니다.
- 시간복잡도
- 알고리즘의 수행시간을 빅오 표기법으로 나타낸 것.
- 공간복잡도
- 알고리즘이 실행되는 동안 사용되는 메모리 공간을 말한다.
최악의 경우의 시간을 계산하는 빅-오(Big-O) 표기법을 주로 사용합니다.
대칭키, 비대칭 암호화 방식에 대해 설명해주세요
- 대칭키 암호화 방식
- 암호화, 복호화에 사용하는 키가 동일하며, 이때 사용하는 키를 비밀키라고한다.
- 공개키 암호화 방식에 비해 연산 속도가 빠르지만, 키를 교환하는 과정에서 유출되는 키 교환문제가 발생할 수 있다.
- 대표적으로 DES, AES가 있다.
- 비대칭키 암호화 방식
- 암호화, 복호화에 사용하는 키가 서로 다르며, 이때 사용하는 키를 공개키, 비밀키라고 한다.
- 키 교환문제를 해결하여 더 안전하지만, 암호화와 복호화를 위해 복잡한 수학 연산을 수행하기 때문에 대칭키 알고리즘에 비해 속도가 느리다는 단점이 있다.
- 대표적으로 RSA가 있다.
- 사용용도에 따라 암복호화에 서로 다른 키를 사용할 수 있다.
- 암호화에 상대방의 공개키를 사용할 때
- 상대방의 공개키로 암호화를 하는 것은 비밀키로만 복호화를 할 수 있기 때문에 데이터의 보안을 중시할때 사용한다.
- 암호화에 자신의 비밀키를 사용할 때
- 자신의 비밀키로 암호화를 하는 것은 누구든지 공개키로 복호화를 할 수 있기 때문에 데이터의 보안 보다는, 데이터의 출처를 검증하기 위해 사용한다.
- 단방향 암호화 알고리즘은?
- 암호화된 데이터를 복호화할 수 없는 암호화 기법이다. 주로 해싱을 사용한다.
- 동일한 평문은 동일한 암호문으로 암호화되지만 이를 바탕으로 평문을 복원할수는 없다.
- 대표적으로 MD5 와 SHA가 있다.
- 단방향 암호화 알고리즘의 단점은?
- 암호학적 해시 함수는 알고리즘을 이용하여 원본데이터를 해시화 하는것이기 때문에 언젠가는 충돌이 발견되고 공격이 성공될 수 있다.
- 단점을 보완하기 위해서는?
- 키스트레칭과 솔팅을 사용한다.
- 키스트레칭은 해싱을 여러번 반복하는 것이고, 무차별 공격을 방지한다.
- 솔팅은 암호화할 값에 솔트라는 특정 문자열을 넣고 해시값을 만드는 것으로, 레인보우테이블 공격을 방지한다.
TCP, UDP 차이에 대해 설명해주세요
TCP와 UDP는 전송계층의 프로토콜입니다.
- TCP
- TCP는 연결지향 프로토콜이며, 신뢰성있는 데이터 송수신, 순차적인 데이터 전송, 흐름제어, 혼잡제어 기능을 제공합니다.
- UDP
- UDP는 비연결형 프토콜이며, TCP가 제공하는 기능을 수행하지는 않지만 데이터 전송속도가 빠르다는 장점이 있다.
- 흐름제어란?
- 리시버의 처리속도에 맞춰서 센더가 데이터의 양을 조절하는 것을 말한다.
- 흐름제어 기법의 종류는?
- Stop-And-Wait 기법은 전송한 패킷에 대한 확인 응답을 받아야만 그 다음 패킷을 전송한다.
- Sliding Window 기법은 리시버에서 설정한 윈도우 사이즈만큼 센더가 패킷을 전송하고, 각 패킷에 대한 확인 응답을 받으면 윈도우를 옆으로 슬라이딩하면서 그 다음 패킷을 전송한다.
- 혼잡제어란?
- 네트워크의 혼잡을 피하기 위해 센더가 보내는 데이터의 전송 속도를 제어하는 기법이다.
- 혼잡제어의 종류는?
- AIMD (Addictive Increase Multicative Decrease)는 전송 패킷 수를 하나씩 늘려가다가 패킷 손실이 발생하면 윈도우 사이즈를 반으로 줄이는 방법이다. 윈도우 사이즈를 하나씩 늘리기 때문에 초기 네트워크의 큰 대역폭을 사용하기 까지 오래걸린다.
- Slow Start 전송 패킷 수를 배수로 늘려가다가 패킷 손실이 발생하면 윈도우 사이즈를 1로 줄는 방법이다.
Spring Framework에 대해서 설명해주세요
Spring은 자바진영의 웹 프레임워크를 말한다.
- POJO란 무엇인가?
- 스프링 프레임워크의 특징은?
- 관점지향프로그래밍(AOP)는 핵심로직에서 공통 로직을 분리하는 방법이다.
- 제어의역전(IOC)은 인스턴스의 생성부터 소멸까지 라이프사이클을 개발자가 아닌 컨테이너가 대신 관리해주는 것을 말한다.
- 의존성 주입(DI)은 의존하는 객체를 직접 생성(new)하지 않고, 스프링 컨테이너에서 의존하는 객체를 전달(주입) 받는 것
- PSA(Portable Service Abstraction)는 어노테이션 같이 하나의 추상화로 여러 서비스를 묶어둔 것을 말한다.
- Bean은?
- IoC 컨테이너(스프링 컨테이너)가 관리하는 자바 객체를 의미한다.
- DI의 종류는?