Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발새발

기술면접 본문

기술면접

기술면접

개발하는후추 2022. 11. 11. 12:21

Day 1.  자바 객체지향 프로그래밍(OOP)에 대해 설명해 주세요.

- OOP(Object Oriented Programming)이란 문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로, 객체들이 서로 유기적으로 상호작용하는 프로그래밍 이론입니다.  프로그래밍에서 객체란 데이터의 분산을 막기 위해 데이터와 기능을 하나로 묶은 그룹을 말합니다. 특성으로는 캡슐화, 추상화, 상속화, 다형성 네 가지 특성이 있습니다  장점으로는 미리 만들어둔 코드를 활용할 수 있기 때문에 코드의 재사용성이 증가하고, 생산성 향상 등이 있습니다. 단점으로는 객체지향적으로 코드를 쓰는 데 있어 난이도가 높으며, 그것에 따라 개발 속도가 느립니다.

캡슐화 - 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수, 메소드를 하나로 묶는 것을 의미, 가장 중요한 목적은 정보은닉이다.

추상화 - 객체의 공통적인 속성과 기능을 추출하여 정의하는것

상속 - 기존 상위 클래스에 기능을 가져와 재사용할 수 있으면서 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있는 것

다형성 - 상속과 연관 있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러 형태로 재구성되는 것 

Day 2. REST API란 무엇인가요? , 프로젝트에 REST API를 사용한 이유가 무엇인가요? 

- REST의 원리를 따르는 API입니다. REST란 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다. 즉, URI를 통해 자원을 명시하고 HTTP Method를 이용하여 자원에 대한 CRUD를 적용합니다

- 프로젝트에서 사용했던 이유는 REST API 메세지의 의도를 파악하기 쉽고, 주소와 메서드만 보고 요청의 내용을 알아볼 수 있다는 장점이 있어서 프런트엔드와 백엔드 간의 소통이 쉽기 때문에 사용하였습니다

Day 3. 스프링 MVC에서의 예외처리 기법에 대해서 설명해주세요

- 스프링 MVC에서 각 컨트롤러마다 @ExceptionHandler 어노테이션을 이용하여 예외처리를 하고 @ResponseStatus로 응답 상태를 지정해 줄 수 있습니다 하지만 각 컨트롤러마다 똑같은 작업을 반복해야 하는 번거로움과 코드중복이 발생하므로 AOP기법을 이용하여 @RestControllerAdvice, @ControllerAdvice 를 이용하여 공통된 예외처리를 한 번에 수행할 수 있습니다. 또 @ExceptionHandler 에 등록된 예외 클래스와 파라미터로 받는 예외 클래스가 동일해야 합니다 그렇지 않으면 런타임 시점에 에러가 발생할 수 있습니다

Day 4. OAuth 2 인증 시스템과 JWT를 이용한 인증 및 권한 부여 처리 흐름에 대해서 설명해 주세요.

OAuth2의 흐름은 먼저 Resource Owner가 Client 즉, 웹 사이트나 애플리케이션등에 로그인 요청을 하게 되면 Client는 Resource Server에 인가 코드를 요청하게 되고 코드를 받으면 다시 코드를 이용해 Access Token과 Refresh Token을 요청하게 됩니다 그럼 Resource Server는 인가 코드를 확인하고 일치하면 토큰을 발급해 줍니다. Client는 Access Token을 Resource Owner에게 넘겨주게 되고 토큰을 이용하여 Resource Server에 있는 Resource Owner의 정보에 접근이 가능하게 됩니다 JWT는 토큰기반 인증 시스템으로 클라이언트가 서버에 접속을 하면 서버에서는 DB와 조회해서 가입된 회원인지를 확인하고 서버측에서 Access Token을 발급해주고 사용자는 서버에 매 요청마다 header에 Access Token을 넣어 요청하게 됩니다 그럼 서버에서는 Token을 검증하고 올바르다면 요청에 응답합니다

Day 5.  JPA의 영속성 컨텍스트에 대해서 설명해 주세요.

- 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻으로, 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 합니다. 엔티티 메니저를 통해 엔티티를 저장하거나, 조회하면서 영속성 컨텍스트에 엔티티를 보관하고 관리합니다.

Day 6. 제네릭에 대해서 설명하고, 컬렉션 클래스에서 왜 제네릭을 사용하는 지 설명해주세요.

- 제네릭은 데이터 타입을 하나로 지정하지 않고 사용할 때마다 지정하는 것을 말합니다, 사용하는 이유는 잘못된 객체를 넣을시 컴파일 단계에서 막아주기 때문에 런타임 단계에서 문제가 발생할 여지를 막아줍니다

Day 7. 탐욕(Greedy) 알고리즘을 사용하기 위해 성립해야 하는 조건에 대해 설명해주세요.

-  탐욕 알고리즘은 현재 상황에서 최선의 선택을 고르는 알고리즘 입니다. 조건으로는 현재선택이 안전해야하다 입니다 즉 현재의 선택이 다음 선택에 영향을 주지 않아야 합니다. 또 최적 부분 구조 조건입니다 문제에 대한 최종 해결 방법이 부분 문제에 대해서도 최적의 해결방법이라는 조건입니다

Day 8. DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요.

- DI란 의존 관계 주입으로, 어떤 객체가 사용하는 의존 객체를 직접 만들어서 사용하는게 아닌 외부로 부터 주입받아 사용하는 것입니다. 방식은 생성자주입, 필드주입, 수정자주입 등이 있습니다. DI를 사용 하는것의 장점은 객체간의 결합도를 낮출수 있으며, 가독성이 증진되고, 코드 중복을 방지하면서 유지보수가 용이해집니다.

Day 9. List, Set, Map의 차이에 대해서 설명해주세요

- 컬렉션 프레임워크로 List는 순서가 있고 중복을 허용하며, 크기가 가변적입니다. Set은 데이터의 집합이며 순서가 없고 중복된 데이터를 허용하지 않습니다. 중복되지 않는 데이터를 구할때 유용합니다. Map은 Key/Value 한쌍으로 이루어진 데이터 집합으로 Key에 대한 중복이 없으며 순서를 보장하지 않습니다

Day 10. 스프링 컨테이너(Spring Container)에 대해 설명해주세요.

- 스프링에서 자바 객체들을 관리하는 공간입니다. 자바 객체를 스프링에선 빈이라 부르며, 스프링 컨테이너에서 빈의 생명주기를 대신 관리해줍니다.

Day 11. 자바 데이터 타입 중 기본형과 참조형의 차이에 대해 설명해주세요.

- char, int, long, float, double, boolean, byte, short 8가지를 기본형 타입이라고 부르며 기본형 변수 안에 값을 직접 넣을 수 있고, 스택 영역에 저장됩니다. 이 8가지를 제외한 것을 참조형 변수라고 하며, 참조형 변수 안에는 값들을 저장하고 있는 객체를 가르키는 주소를 가지고 있습니다.

Day 12. 트랜잭션에 대해 설명해주세요.

- 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야 할 일련의  연산들을 의미합니다. 특징으로는 원자성, 일관성, 격리성, 영속성이 있습니다

원자성(Atomicity) - 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다

일관성(Consistency) - 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다

격리성(Isolation) - 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다흔 트랜잭션의 연산이 끼어들 수 없다

영속성(Dutablility) - 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다

Day 13. Spring에서 사용하는 Rest Client에 대해서 설명해주세요.

-  Rest Client랑 Rest API서버에 HTTP 여청을 보낼 수 있는 라이브러리이며, Spring에서 외부 API를 호출 할 때 사용하며 RestTrmplate와 WebClient가 있습니다. RestClient는 동기 방식이며, WebClient는 비동기 방식입니다.

Day 14. 세션과 쿠키 그리고 토큰 인증 방식에 대해 설명해 주세요.

- 세션은 사용자의 정보를 서버에 저장하여 활용하는 방식이고, 서버에서 발급된 세션ID를 쿠키에 담아 클라이언트에게 인증정보를 넘겨주는 것이 쿠키 방식입니다 토큰은 엑세스토큰을 http헤더에 담아 클라이언트에게 넘겨주고 요청을 할때 토큰을 이용하여 서버에 넘겨줍니다 토큰은 시간 제약이 있어 엑세스 토큰이 만료되면 서버에 저장된 리프래시 토큰을 이용하여 재발급 받습니다

Day 15. 자바의 메모리 영역에 대해 설명해주세요.

- 자바의 메모리 공간은 크게 Method 영역, Stack 영역, Heap 영역으로 구분되고, 데이터 타입에 따라 할당됩니다.

Method 영역 - 전역변수와 static변수를 저정하며, Method 영역은 프로그램 시작부터 종료까지 메모리에 남아있습니다.

Stack 영역 - 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. LIFO 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.

Heap 영역 - new 키워드로 생성되는 객체, 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어 진다.

Day 16. Static 키워드에 대해 설명하고, static를 언제 사용해야 하는지 설명해주세요.

- static은 고정된 이라는 의미를 가지고 있습니다. static 키워드를 사용하여 정적필드와, 정적메소드를 만들 수 있고, 이 둘을 합쳐서 정적멤버 또는 클래스멤버라고 합니다. 정적필드와 정적메소드는 객체에 소속된 멤버가 아닌 클래스에 고정된 멤버이기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리되고, 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있습니다.

- static은 전역적으로 쉽게 재사용하는 멤버나 잘 변하지 않는 변수, 메소드를 사용할때 주로 사용합니다. 클래스 호출, 객체 생성을 따로 할 필요없이 바로 사용할 수 있기 때문에 사용성이 좋습니다

Day 17. Foreign Key와 Primary Key에 대해 설명해주세요.

- primary key는 기본키로 데이터 테이블에 있는 유일하게 구분되는 것으로 중복값을 가질 수 없고 null일 수 없습니다. 

- foreign key는 한 테이블과 참조되는 다른 테이블 간의 연결되는 primary key column을 외래키라고 합니다. 참조관계의 기본키와 같은 속성을 가집니다

Day 18. @SpringBootTest와 @WebMvcTest의 차이점을 설명해 주세요.

- 특정 레이어를 테스트할 때는 레이어에 해당하는 빈만 들고오기 때문에 의존관계에 있는 다른 레이어는 Mock을 이용해서 테스트를 해야합니다. 기본적으로 통합테스트를 할때는 @SpringBootTest를 붙여서 테스트를 진행하면되고, 원하는 레이어만 테스트 할때는 @MockMvcTest 와 같이 특정 레이어를 테스트하기 위한 애노테이션을 사용합니다.

- @SpringBootTest는 전체적인 Flow가 제대로 작동하는지 검증하기 위해 사용되기 때문에 테스트 단위가 커서 디버깅이 어렵고 시간이 오래 걸립니다.

- @WebMvcTest는 보통 컨트롤러가 예상대로 작동하는지 테스트하기 위해 사용됩니다. WebApplication과 관련된 빈들만 등록하기 때문에 빠르고, 슬라이스 테스트가 가능합니다.

Day 19. 이너클래스의 장점과 단점을 말해주세요.

- 내부클래스의 장점으로는 내부 클래스에서 외부 클래스의 멤버에 쉽게 접근할 수 있으며, 서로 관련있는 코드를 묶어서 코드의 캡슐화를 증가시키고, 외부에서는 내부 클래스에 접근할 수 없기 때문에 코드의 복잡성을 줄일 수 있습니다.

- 단점으로는 참조값을 담아야 하기 때문에, 인스턴스 생성시 시간적, 공간적으로 성능이 낮아지고, 외부 인스턴스에 대한 참조가 존재하기 때문에, 가비지 컬렉션이 인스턴스 수거를 하지 못하여 메모리 누수가 생길 수 있습니다.

Comments