💡 Q1. 재귀 함수와 반복문의 차이점
- 재귀함수는 함수 자체를 호출하는 것이고, 반복문은 프로그램 내 똑같은 명령을 반복적으로 수행하는 것이다.
- 재귀함수는 함수를 반복적으로 호출하기 때문에 스택 메모리를 사용한다. 반면 반복문은 메모리 힙을 사용한다.
💡 Q2. Stack과 Queue의 차이점
- Stack은 선입후출, Queue는 선입선출
- ﹢ 예시?
- Stack : 자바의 스택 메모리 영역, 후위 표기법 계산, 웹 브라우저 방문기록,DFS 구현
- Queue : 프린터의 인쇄 대기열, OS의 스케줄러, BFS 구현
💡Q3. 인접 행렬과 인접 리스트의 차이점
- 인접 행렬은 2차원 배열을 그래프로 표현한 것이고, 인접 리스트는 연결 리스트를 사용해 표현한 것이다.
- 인접 행렬은 간선정보 확인과 업데이트가 빠르고, 인접 리스트는 메모리 사용량이 적고 노드 추가와 삭제가 빠르다.
💡Q4. 탐욕(Greedy) 알고리즘을 사용하기 위해 성립해야 하는 조건
- 전체 문제의 최적 문제 해결은 부분문제의 최적 문제 해결로 구성되어있다. 앞의 선택은 이후의 선택에 영향을 미치지 않아야 한다.
💡Q5. 이진 탐색 알고리즘(BST)이 데이터를 효율적으로 찾기 위해 탐색하는 과정
- 배열의 중간 값을 가져오고, 중간 값과 검색 값을 비교한다. 중간 값보다 검색 값이 크다면 중간값 기준 배열의 오른쪽 구간을 대상으로 탐색하고, 작다면 중간값 기준 배열의 왼쪽 구간을 대상으로 탐색한다. 값을 찾을 때까지 절반씩 줄여나가며 탐색하는 것이다.
💡Q6. 웹 브라우저에서 CORS 이슈가 발생하는 원인은 무엇이며, 서버에서 어떻게 해결할 수 있는가?
- CORS는 한 도메인 또는 Origin의 웹 페이지가 다른 도메인을 가진 리소스에 액세스 할 수 있게하는 보안 메커니즘이다.
- CORS는 최신 브라우저에서 구현된 동일 출처 정책(same-origin policy) 때문에 등장했다. 동일 출처 정책은 동일한 출처의 리소스에만 접근하도록 제한하는 것이다.
- @CrossOrigin 어노테이션 사용하거나, CorsFilter를 사용해 해결할 수 있다.
💡Q7. URL과 URI의 차이점?
- URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다. 인터넷에 있는 자원을 나타내는 유일한 주소이다.
- URL은 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다.
URI는 식별하고, URL은 위치를 가르킨다.
💡Q8. DNS의 정의와 DNS가 필요한 이유
- Domain Name System의 약자로, 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템을 의미한다.
- IP주소를 인간이 기억하기 편한 언어체계로 변환할 수 있고, IP가 변경될 경우에도 지속적으로 관리할 수 있다.
💡Q9. REST API란?
- 데이터나 자원을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
- ﹢ REST API URI 규칙?
- 소문자를 사용한다.
- 언더바대신 하이픈을 사용한다.
- URI의 마지막에는 슬래시를 포함하지 않는다.
- 계층관계를 나타낼 때는 슬래시 구분자를 사용해야 한다.
- 파일 확장자는 URI에 포함시키지 않는다.
- 전달하고자 하는 자원의 명사를 사용하되, 컨트롤 자원을 의미하는 경우 예외적으로 동사를 허용한다.
- URI에 작성되는 영어를 복수형으로 작성한다.
💡Q10. Client Side Rendering 과 Server Side Rendering 의 차이점
- CSR과 SSR의 주요 차이점은 페이지가 렌더링되는 위치이다. SSR은 서버에서 페이지를 렌더링하고, CSR은 브라우저(클라이언트)에서 페이지를 렌더링한다.
💡Q11. 트랜잭션
- 트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 의미한다.
- 데이터베이스 트랜잭션은 ACID라는 특성을 가진다.
💡Q12. Foreign Key와 Primary Key
- primary key는 테이블 내의 고유한 키로 각 레코드를 구별할 수 있는 역할을 한다.
- foreign key는 다른 테이블의 primary key를 참조하는 키를 의미한다.
💡Q13. IOC
- 제어의 역전을 뜻하며, 애플리케이션 흐름의 주도권이 Framework나 서블릿 컨테이너 등 외부에 있는 것을 의미한다.
💡Q14. Spring에서 AOP가 필요한 이유
- OOP 방식의 프로그래밍을 했을 때, 여러 곳에서 공통적으로 사용되는 부가 기능의 중복 코드가 발생하게 된다. 이러한 불필요한 반복을 해결하기 위해 AOP를 통해 핵심 기능과 부가 기능을 분리할 수 있다.
💡Q15. 스프링 컨테이너(Spring Container)
- 스프링 컨테이너는 내부에 존재하는 애플리케이션 Bean의 생명주기를 관리한다. Bean의 생성, 관리, 제거 등의 역할을 담당한다.
💡Q16 DI(Dependency Injection)에 대한 설명과 해당 기술의 장점
- DI는 의존관계를 외부에서 주입하는 것이다.
- 즉, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임시에 관계를 동적으로 주입한다.
- 장점은 Unit Test가 용이하고, 코드 재활용성이 높으며, 의존성과 결합도를 낮출 수 있고, 가독성이 좋아진다.