기술면접 질문 모음
- jpa란?
어플리케이션 class 와 RDB 의 테이블을 연결하는 것.
ORM 을 기술 표준으로 사용하는 인터페이스 모음.
인터페이스이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현한다.
- 장점 : SQL문이 아닌 Method 를 통해 DB를 조작할 수 있어, 개발자는 로직을 구성하는 데에만 집중가능.
- 단점 : 프로젝트 규모가 크고 설계가 잘못된 경우 속도 저하 및 일관성을 무너뜨릴 수 있음. 복잡한 쿼리는 SQL로 써야할 수 있음.
- rest api 란?
개발 아키텍처 스타일중에 하나.
웹사이트의 모든 자원에 고유 ID 인 URI를 부여하여 사용하기 쉽다.
- 트랜잭션 성질?
ACID 라는 특성을 가지고 있다.
Atomicity(원자성) - 한 트랜잭션이 모두 성공하거나 모두 실패하거나 하는 성질.
Consistency(일관성)
Isolation(고립성)
Durability(지속성)
- DML DDL 차이
dml - select insert update delete 등으로 조회하거나 데이터를 변형시키는 문법
ddl - create alter drop rename truncate 테이블과 같은 데이터 구조를 정의하는데 사용하는 명령어
- MVC 컨트롤러 구조
모델 뷰 컨트롤러로 이루어진 디자인 구조. 모델은 dao 처럼 디비 조작, 뷰는 프론트, 컨트롤러는 서비스부분 백엔드 부분으로 알려짐.
- 디스패처 서블릿(dispatcher servlet)에 대해 설명
프론트에서 백엔드로 데이터 넘길때 가장 먼저 받아주는 곳. 공통적으로 진행되야 할 작업들을 우선적으로 처리. 대표적으로 한글 인코딩같은 것들이 있다.
- hibernate 에 대해 설명
자바언어를 위한 ORM 프레임 워크. JPA의 구현체. JPA는 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스.
- jdbc란?
db 작업을 위한 표준. jdbc 라아이버란 dbms 회사들이 자신들의 데이터베이스 시스템에 접근할 수 있도록 표준 jdbc 인터페이스에 명시된 메소드를 구현한 것. 따라서 jdbc api 를 사용할 경우 jdbc 를 사용하는 어떤 종류의 관계형 db에도 접근이 가능.
- 리액트의 장점은?
가상 돔을 사용하여 브라우저에서 한번만 수행을 한다. 싱글페이지 어플리케이션에서 성능을 최적화.
- concurentHashmap 동작원리는?
concurrency 레벨에 기반하여 map 을 여러파트로 나누어 두고 업데이트 동작이 일어나는 동안 오직 그부분만 lock을 수행한다.
읽기가 쓰기보다 많을 때 적합하다.
- JVM에 대해 설명, 가비지 컬렉터에 대해 설명
jvm 은 자바 프로그램을 실행하는 방법. 프로세스 자바 앱에 대한 리소스를 대표하고 통제하는 서버.
가비지 컬렉션은 자바에서 사용하지 않는 메모리를 지속적으로 찾아내서 제거. jvm 내부에서 일어난다.
- 프레임워크와 라이브러리와의 차이점
프레임워크는 여러 클래스나 컴포넌트로 구성
라이브러리는 단순 활용가능한 도구들의 집합.
차이점 : 체어 흐름에 대한 주도성이 누구에게 있는가. 프레임워크는 전체적인 흐름을 스스로가 가지고 있다. 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓴다.
쉽게말해서 라이브러리는 톱, 망치, 삽 같은 연장이다. 사람이 주체가 되서 통제가 가능. 규격이 없다.
반면 프레임워크는 차, 비행기, 배 같은 탈것. 사람이 타서 엔진켜고 핸들돌리고 조정해야함. 규격이 있다.
-웹소켓이란?
서버와 클라이언트 간의 효율적인 통신을 실현하기 위한 구조. 이를 이용하면 하나의 http 접속으로 양방향 메시지를 자유롭게 주고받을 수 있다.
-CORS 오류?
서로 다른 url에서 서버 요청을 할 때 발생. 프론트는 3000포트인데 백엔드는 8080포트일때 발생
해결방법 : 크롬에서 allow cors 설치 (로컬 통신만 가능), 서버에서 Access-Control-Allow-Origin 세팅하기.
-동기, 비동기방식
동기 : 요청과 결과가 동시에 일어난다는 약속, 바로 요청하면 그 자리에서 결과가 주어져야한다.
비동기 : 요청과 응답이 다른 시간대 존재하기 때문에 요청내용에 대해 지금 바로 응답받지 않아도 된다.
동기는 간단하지만 결과가 주어질때까지 아무것도 못하고 대기. 하지만 비동기는 자원을 효율적으로 사용가능. 비동기의 대표(Ajax)
- 네트워크 상에서 blocking 과 nonblocking
동기, 비동기와 헷갈리는 개념
급하게 답을 물어봐야 하는 상황
전화로 즉답을 얻는다 - 동기
이메일로 물어보앗지만 답은 언제올지 모른다 - 비동기
전화를 햇는데 상대방이 너무바빠 전화를 받지 않는다, 전화를 받을때까지 계속 대기 - 동기 + 블록킹
전화를 햇는데 상대방이 안받음, 전화를 끊었다가 다시 나중에 전화함. 계속 반복하다가 나중에 답을 얻음 - 비동기 + 논블로킹
- 코루틴이란?
필요에 따라 일시정지 할 수 있는 함수를 말한다.
- 인덱스에 대해 설명, 왜 많이 안쓸까?
- 인덱스는 데이터 베이스 테이블에 대한 검색속도를 향상시켜주는 자료구조.
- 규모가 큰 테이블이나 삽입수정삭제 작업이 자주 발생하지 않는 칼럼에 대해 인덱싱을 해야한다.
- 삭제 작업이 자주 발생하는 칼럼에 대해 인덱싱 하게 되면 문제다.
- 스프링에서 DI란?
아래 질문
- 스프링을 사용한 이유는?
pojo기반이라 자바 언어를 그대로 사용가능
DI 의존성 주입을 통한 객체 관계 구성
예를 들어 MemberController 의 생성자에 @Autowired를 붙임으로써, 스프링은 스프링이 저장하고 있는 memberService 객체를 컨트롤러가 생성될 때 가져온다. 즉 생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI 라고 한다.
- 깊은 복사 얕은 복사 차이점?
- call by value VS call by reference? 차이
- 메모리의 stack heap 등 영역에 대해 설명
stack 영역은 주로 지역변수 와 매개변수가 저장되는 영역.
주로 함수의 호출과 함께 할당. 함수의 호출이 완료되면 소멸.
heap 영역은 긴생명주기를 갖는 데이터들이 저장. 오브젝트 들이 주로 저장된다.
- TCP UDP 에 대해 설명
- 3way handshaking 이란?
- 우선순위큐에 대해 설명하고 어떻게 구현할 것인가?
- 우선순위 큐에서 힙을 쓰지 않고 배열을 쓴다면 장단점은?
- 배열 정렬시 복잡도는?
- 교착상태가 무엇인지? 피하기 위해서는 어떻게 할 수 있을지?
- osi 7 계층설명, 왜 나뉘어 있는지
- 유클리드 호제법에 대해 설명
최대 공약수를 구하는 알고리즘. 큰수 를 a 작은 수를 b로 두고 임시변수 c 를 생성 후 a%b = c 이고 그 뒤 c 가 0이 될때까지 b%c = c^1 이런식으로 재귀를 돌린다.
- get post 차이
get 은 url 끝에 ? 를 붙이고 쿼리 스트링을 전송
ex) www.example.com/show?name1=value1&name2=value2 이렇게 보낸다.
단점 : 길이제한, 중요한정보 누출
post 는 전송할 데이터를 http 메시지 body 부분에 담아서 서버로 보낸다.
장점 : 데이터길이에 제한없다. 보안성이 있다.
차이점 : get은 조회 위주 post 는 수정 삭제 생성 위주.
- post 로 데이터 보낼 때 가로채려는 사람을 귀찮게 하는 방법
- http 서버 상태 오류코드에 대해 설명
- 프록시 서버에 대해 설명
서버와 클라이언트 사이에서 요청과 응답을 처리해주는 것.
사용목적
- 캐시데이터를 사용하기 위해
- 보안목적
- 우회목적
- MSA가 무엇인지 설명
마이크로 서비스 아키텍처의 줄임말
마이크로 서비스는 완전히 독립적으로 배포가 가능하고, 다른 기술스택이 사용 가능함.
예시) 스프링을 이용할 경우 블록체인 기술을 추가할 때 node.js 를 이용하는 것이 일반적이다. 그러나 JAVA로는 구현하기가 힘들다. 이러한 문제점을 보완하기 위해 MSA 가 등장. 클라우드 환경을 이용하여 서버를 구성. MSA는 API를 통해서만 상호작용이 가능하다.
- www.naver.com 치면 어떤 일이 일어나는지
- 객체지향의 특징
추상화 - 실제 지형보다 지하철역간의 상대위치가 중요하게 정리된 지하철 노선도가 예시. 객체들의 공통적인 속성과 기능을 중심으로 추상화
캡슐화
다형성
상속
- 로드밸런싱이 무엇인가?
서버가 처리해야할 업무 혹은 요청을 여러대의 서버로 나누어 처리하는 것을 의미한다.
두 가지 방식
scale -up : 기존의 서버 성능을 확장하는 방식
scale -out : 서버를 증설해서 여러대의 서버로 트래픽을 균등하게 분산
scale-out 시 서버의 상황에 맞게 방법이 나뉜다.
- 라운드 로빈 방식
- 가중 라운드로빈 방식
- 트랜잭션의 격리수준 4개
- 격리 뜻은 트랜젝션 수행시 다른 트렌젝션이 끼어들지 못하게 한다.
- 리드 언커밋(롤백, 커밋 전에도 다른 트렌젝션에서 조회가 되어버린다. 이는 더티리드 발생, 개발자 혼란시킴) -> 리드 커밋 -> 리핏터블 리드 -> 시리얼리제이션(가장 엄격, 한 트렌젝션에서 읽고쓰는 레코드를 다른 트렌젝션에서 절대 접근 불가능)
- MES 는 무엇인가
제품주문에 의한 착수에서 완성품의 품질검사까지 전 생산활동을 관리하는 시스템 - 통합 생산관리 시스템
ERP 시스템과 연동하여 자재의 입고, 출고 관리를 바코드 등으로 관리하여 작업자와 관리자의 빠른 의사결정을 돕는 시스템.
-ERP 는 무엇인가
재무, 인사, 제조 공급망, 서비스, 구매조달 등의 프로세스를 포함한 비즈니스 전반을 효율적으로 운영할 수 있도록 하는 소프트웨어 시스템.
-SCM 은 무엇인가
Supply chain management
공급망 관리
고객에게 원자재에서 포장에 이르는 모든과정, 원산지와 지속가능성에 대한 정보를 제공하는 것.
-WMS 은 무엇인가
창고관리 시스템으로 물류센터에서 이루어지는 과정을 통합하여 관리하는 일을 말한다.
- NoSQL, RDBMS 차이
NoSQL 은 업데이트가 자주 일어나지 않는 경우 사용
RDBMS는 업데이트가 자주 일어나는경우 사용
- CDN은 무엇인가(contents delivery network)
은행을 가기위해 본점을 가는거 말고 집앞에 ATM 을 가는 것처럼 근처 프록시 서버에 캐싱한 후 컨텐츠를 다운로드 하는 기술
예) 뉴욕에 있는 사용자가 런던에 있는 업체의 웹사이트를 들어가고싶다. CDN은 이런 문제를 해결하기 위해 전세계 여러곳의 PoP(Points of Presence)에 저장한다.
Push 방식과 Pull 방식으로 나누어진다.
Push 방식 : 개발자가 직접 PoP서버로 콘텐츠를 Push 하는 방식
Pull 방식 : PoP 서버가 원본 서버에서 콘텐츠를 가져오는 방식
분산형 아키텍처 : 사양이 낮은 서버를 구성, 특정 지역에 PoP 여러 개를 밀집해 운영. 지연 시간을 최소화 할 수 있는 장점. 하지만 비용이 비싸다는 단점
통합형 아키텍처 : 고용량 서버로 구성된 소수의 PoP를 주요 데이터센터에 배치해 운영. 시간이 많이 걸리고 신속하게 확장하기 어려운 단점. 하지만 비용 절감의 장점.