본문 바로가기
면접준비

[기술 면접] 스프링 / 보안

by 킹명주 2022. 12. 23.

스프링으로 할 수 있는 질문이 너무 많기 때문에 일단 대표적인 것들만 소개하고자 한다. 그리고 최근 spring sequrity를 많이 사용하고 있기 때문에 간단한 보안 지식 정도는 숙지해야한다. 그래서 이와 관련된 예상 질문을 뽑아보자.

 

👉 예상질문

Spring

1. Spring DI/IoC는 어떻게 동작하나요?

더보기

IoC(제어의 역전)은 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것으로 코드의 최종호출은 개발자가 제어하는 것이 아닌 프레임워크의 내부에서 결정된 대로 이루어집니다.

 

DI(의존성 주입)은 Spring 프레임워크에서 지원하는 IoC의 형태로 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해줍니다.

 

(컨테이너: 스프링에서 자바 객체들을 관리하는 공간, 자바 객체의 생명 주기를 관리)

 

2. Spring Bean에 대해서 알고있는 것을 설명해주세요.

더보기

Bean은 IoC 컨테이너 안에 들어있는 객체로 필요할 때 IoC컨테이너에서 가져와서 사용하는 것입니다.

Bean은 객체 생성 -> 의존 설정 -> 초기화 -> 사용 -> 소멸 과정의 생명주기를 가지고 있습니다.

스프링은 기본적으로 모든 bean을 singleton으로 생성하여 관리하는데 이는 하나의 bean 정의에 대해서 IoC Container 내에 단 하나의 객체만 존재하는 것입니다. 이 외에도 prototype, request 등의 스코프가 존재합니다.

 

@참고

Bean은 스프링 컨테이너에 의해 생명주기를 관리하며 빈 초기화방법은 @PostConstruct 를 빈 소멸에서는 @PreDestroy 를 사용합니다.

prototype: 컨테이너에게 빈을 요청할 때마다 매번 새로운 객체를 생성해주는 것

request: 웹 요청이 들어왔을 때 빈이 생성되고 종료되는 것

 

3. Spring에서 CORS 에러를 해결하기 위한 방법을 설명해주세요.

더보기

Controller에서 @CrossOrigin 이라는 어노테이션을 추가하여 해결할 수 있습니다.

그리고 스프링의 WebMvcConfigurer을 상속받아 allowedOrigins 옵션에서 origin을 허용할 범위를 수정할 수 있습니다.

 

4. DI 종류는 어떤 것들이 있나요?

더보기

의존성 주입에는 세가지 방법이 있습니다. 생성자 주입, Setter 주입, 필드 주입이 있습니다.

생성자 주입은 생성자 호출시점에 딱 1번만 호출되는 것을 보장하며 불변, 필수 의존관계에 사용합니다.

Setter 주입은 선택, 변경 가능성이 있는 의존관계에 사용되며 스프링빈을 선택적으로 등록이 가능합니다.

필드 주입은 '@Autowired'를 사용하는데 외부에서 변경이 불가능하며 DI 프레임워크 없이는 사용할 수 없습니다.

 

5. DAO, DTO, VO에 대해서 설명해주세요.

더보기

DAO는 Data Access Object로 주로 DB의 data에 접근하기 위한 객체입니다.

DTO는 Data Transfer Object로 레이어간 데이터를 전송하기 위해 정의된 객체입니다. 주로 json과 같은 직렬화에 사용되는 객체입니다.

VO는 DTO와 유사하지만 DTO와 달리 Read-Only라는 속성을 가지고 있는 객체입니다.

 

6. Spring AOP에 대해서 설명해주세요.

더보기

공부 필요..

 

보안

1. 비대칭키(공개키) 암호화와 대칭키 암호화에 대해 설명해주세요.

더보기

대칭키는 어떤 정보를 암호화, 복호화 할 때 사용하는 키가 동일한 경우입니다. 즉, 암호화 된 정보를 전달하고 확인하기 위해서는 송수신자 둘 다 똑같은 키를 가지고 있어야 합니다. 공개키 암호화 방식에 비해 속도가 빠르다는 장점이 있지만, 키를 교환할 때 탈취 가능성이 있다는 단점이 있습니다.

 

공개키는 어떤 정보를 암호화, 복호화 할 때 사용하는 키가 서로 다른 경우입니다. 공개키는 외부에 공개되어 있고 비밀키는 자신만 가지고 있기 때문에 대칭키보다 비교적 안전(기밀성,인증,부인방지 제공)하지만 대칭키 암호화 방식에 비해 속도가 느린편입니다.

 

2. JWT에 대해서 설명해주세요.

더보기

JWT란 토큰 인증 방식으로 헤더, 페이로드, 시그니쳐로 구분됩니다. 헤더는 토큰의 타입, 암호화 알고리즘을 담고 있고, 페이로드는 토큰의 정보를 담는 부분이며, 시그니처는 토큰의 정보가 신뢰할 수 있는것인지 판단할 수 있도록 합니다.

 

3. JWT와 SESSION의 차이점은 무엇인가요?

더보기

세션기반 인증은 서버에서 세션 정보를 데이터베이스에 관리해야하는 비용이 들게됩니다. 그렇기 때문에 분산환경에서도 관리하기 어렵습니다. 하지만 JWT는 토큰 자체로 정보를 가지고 있기 때문에 따로 관리하지 않아 세션에 비해 관리 비용이 적고 분산환경에서도 사용할 수 있습니다.

 

4. OAuth에 대해서 설명해주세요.

더보기

OAuth는 제3자 인증방식으로 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준입니다.

 

5. CSRF에 대해서 설명해주세요.

더보기

CSRF(Cross Site Request Forgery)는 웹 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법입니다.

이를 해결하기 위해서는 대표적으로 캡처 방식이 있습니다. 여러 이미지를 보여주고 이미지에 해당하는 문자를 선택하게 하는 것입니다.

 

6. 단방향 암호화와 양방향 암호화에 대해 설명해주세요.

더보기

양방향 암호화는 암호환된 암호문을 복호화 할 수 있는 것을 의미하고 단방향은 암호화는 수행하지만 절대로 복호화가 불가능한 것을 의미합니다.

양방향의 대표예로는 공개키, 대칭키가 있습니다. 단방향의 대표예로는 Hash를 사용하는 것입니다.

 

'면접준비' 카테고리의 다른 글

[기술 면접] 데이터베이스  (0) 2022.12.22
[기술 면접] 자료구조  (0) 2022.12.21
[기술 면접] 운영체제  (0) 2022.12.20
[기술 면접] 네트워크  (0) 2022.12.19
[기술 면접] 객체 지향 프로그래밍  (0) 2022.12.16