1. TCP 와 UDP 차이점과 장단점을 설명해주세요.
TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램단위로 전송하는 프로토콜 입니다.
TCP는 가상 회선을 만들어 신뢰성을 보장하도록(흐름 제어, 혼잡 제어, 오류 제어) 하는 프로토콜로 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느린편입니다.
그래서 파일전송과 같은 신뢰성이 중요한 서비스에 사용되고, UDP는 스트리밍과 같은 실시간 전송이 중요한 서비스에 사용됩니다.
2. 3,4-way handshake 에 대해 설명해주세요.
우선,
3-way handshake 는 client 와 server 간의 TCP connection 을 할때 사용이 되고 4-way handshaek 는 connection close 할때 사용됩니다.
3-way handshake 는 TCP 연결을 하는 단계입니다. 클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 할 수 있는지 확인하는 과정입니다.
4-way handshake는 TCP연결을 해제하는 단계로, 클라이언트는 서버에게 연결해제를 통지하고 서버가 이를 확인하고 클라이언트에게 이를 받았음을 확인합니다.
3. HTTP와 HTTPS의 차이점에 대해 설명해주세요.
HTTP 는 서로 다른 시스템들 사이에서 통신을 주고받게 하는 가장 기본적인 프로토콜 입니다.
서버에서 브라우저로 데이터를 전송하는 용도로 가장 많이 사용합니다.
HTTP 는 암호화를 거치지 않아 중간 패킷을 가로 채질 수 있는 위험이 있습니다.
이를 보완하기 위해서 나온것이 바로 HTTPS 입니다.
HTTPS 는 HTTP에 암호화 계층인 SSL이 추가되어 패킷을 암호화합니다.
4. HTTPS 에 대해서 설명하고 SSL Handshake에 대해서 설명해보세요.
HTTPS는 HTTP에 보안계층을 추가한 것입니다. HTTPS는 제3자 인증, 공개키 암호화, 비밀키 암호화를 사용합니다.
SSL 은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버와 브라우저가 민감한 정보를 주고받을 때 해당 정보가 도난당하는 것을 막아주는 역할을 합니다.
( SSL 질문은 추후에 작성 )
5. GET 과 POST 의 차이점에 대해서 설명해보세요.
GET 요청은 서버에 존재하는 정보를 가져오는 요청입니다.
주로 조회를 할때 사용이 되며 body에 데이터를 실지 않는다는 특징이 있습니다.
POST 요청은 서버에 새로운 정보를 추가하는 요청입니다.
주로 삽입을 할때 사용이 되며 body에 데이터를 실어서 보냅니다.
6. HTTP 메소드를 설명하고 HTTP 메소드의 종류를 설명해주세요.
HTTP 메소드는 클라이언트가 웹 서버에게 보내는 요청의 목적을 알리는 수단입니다.
자주 쓰이는 HTTP 메소드는 GET, POST, PUT, PATCH, DELETE 가 있으며
다른 메소드들은 HEAD, OPTIONS, CONNECT, TRACE 가 있습니다.
7. REST에 대해 아는대로 설명해주세요.
Representational State Transfer 의 약자로 자원의 표현에 의한 상태 전달을 의미합니다.
간단하게 말하면 아키텍처 스타일이라고 생각합니다.
가장 좋은 예시로 url에 자원을 표시하여 url만 보고도 어느정도 예측을 할 수 있게 해주는 이점이 있습니다. HTTP를 잘 활용하기 위한 원칙이기도 합니다.
8. REST API에 대해 아는대로 설명해주세요.
REST 기반으로 API를 구현하는것을 말합니다.
9. RESTful에 대해 아는대로 설명해주세요.
REST 규칙을 지켜 API 를 만드는것을 말하는데 명확한 표준이 존재하지 않는다는 단점이 있습니다.
10. CORS에 대해 설명해주세요.
웹 개발을 하다가 흔히 만날 수 있는 이슈입니다.
서로 다른 도메인, 프로토콜, 포트 등이 자원을 공유하는 것을 뜻합니다.
CORS 는 출처가 다른 도메인에서의 요청도 서버 단에서 데이터 접근 권한을 허용하는 정책입니다.
1. 데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요.
2. 트랜잭션에 대해서 설명해주세요
트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업의 단위입니다.
트랜잭션에서 하나의 작업이 실패하면 완전히 실패하는 것이고 완전히 성공해야지 성공입니다.
3. ACID에 대해 설명해주세요.
트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질입니다.
Atomicity, Consistency, Isolation, Durability 로 각각 원자성,일관성,독립성,지속성을 뜻 합니다.
4. 트랜잭션 격리 수준(Transaction Isolation Levels)에 대해서 설명해주세요.
동시에 DB에 접근할때 그 접근을 어떻게 제어할지 설정하는 것입니다.
READ UNCOMMITED 는 다른 트랜잭션에서 커밋되지 않은 내용도 참조 할 수 있습니다.
READ COMMITTED 는 다른 트랜잭션에서 커밋된 내용만 참조 할 수 있습니다.
REPEATABLE READ 는 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있습니다.
SERIALIZABLE 는 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 합니다. 가장 성능이 떨어지는 격리수준입니다.
5. 정규화에 대해 설명해주세요.
정규화는 데이터의 중복의 방지, 무결성을 충족시키기 위해 데이터베이스를 설계하는 것을 의미 합니다.
6. JOIN에 대해 설명해주세요.
JOIN 은 DB 에서 여러 테이블의 레코드를 조합하여 하나의 결과 집합으로 만드는 것입니다.
INNER JOIN 은 A 테이블과 B 테이블에 함께 존재하는 데이터를 가진 필드만을 가져옵니다.
LEFT OUTER JOIN 은 ON 절의 조건을 만족하고 만족하지않는 B 테이블의 필드들은 null 값을 가져옵니다.
RIGHT OUTER JOIN 은 ON 절의 조건을 만족하고 만족하지않는 A 테이블의 필드들은 null 값을 가져옵니다. FULL OUTER JOIN 은 양쪽 모두에 조건이 일치하지 않는것까지 모든 필드를 가져옵니다.
7. DBMS 에 대해 설명해주세요.
사용자와 데이터베이스 사이에서 사용자의 요구에 따라서 정보를 생성해주고 데이터베이스를 관리해 주는 소프트웨어 입니다.
8. RDBMS 와 NOSQL에 대해 설명해주세요.
RDBMS는 데이터베이스를 이루는 객체들의 릴레이션 즉, 관계를 통해서 데이터를 저장하는 관계형 데이터베이스입니다.
RDBMS는 외래키를 사용하여 테이블관의 관계를 나타내고 이 외래키로 조인을 할 수 있다는게 RDBMS의 가장 큰 특징 입니다.
반면에, NOSQL 은 테이블의 외래키도 존재하지 않아 테이블간의 JOIN도 맺을 수 없습니다.
NOSQL의 종류에는 Key-Value, Document, Graph Database 들이 있습니다.
1. 컴포넌트와 모듈의 차이
모듈과 컴포넌트는 비슷하지만 모듈이 컴포넌트보다 큰 단위라고 생각합니다.
컴포넌트는 하나의 부품입니다. 보통 작은 영역에서 서로 연관되어 있고 다용도로 사용이 가능하게 만듭니다. UI를 제어하는 타이머같은 Back단에서 스레드를 보조하는 컴포넌트로 예를 들 수 있습니다. 모듈은 조금 작은 범위의 조각입니다. 외부 인터페이스가 없는 복합적인 수요기능에서 실행될 수 있는 단위 입니다.
데이터베이스나 이메일 같은 통합적인 기능을 제공하면서 라이브러리처럼 사용될 수 있는 것들 입니다. 그리고 호환성이 더 좋습니다.
2. 자바란 무엇인가
자바는 객체지향프로그래밍 언어로서 보안성이 뛰어나며 컴파일한 코드는 다른 운영체제에서 사용될 수 있도록 클래스(.class 파일)로 제공됩니다. C++언어의 객체지향적인 장점을 살리면서 분산환경을 지원해 효율적입니다.
3. 자바의 구동원리
자바로 작성한 코드는 [.java]라는 확장자를 가지며 자바에 존재하는 javac라는 전용컴파일러가 [.java]로 끝나는 자바코드를 컴퓨터가 이해할 수 있도록 기계어로 변경하게 되면 [.class]라는 확장자를 가진 파일이 생성되는데 [.class]파일은 JVM을 통해서 실행하게 됩니다.
4. JVM의 특징
자바 가상머신(Java Virtual Machine) 이라 불리며 자바소스로부터 만들어진 바이너리파일 즉 [.class]파일을 실행하기 위해 필요합니다.
java가 OS에 구애받지 않고 재사용가능하게 해줍니다. 그리고 자동메모리 관리기법인 Grabage Collection을 수행합니다.
- JRE : 자바실행환경. JVM으로 자바프로그램을 동작시킬 때 필요한 파일들을 가지고 있습니다.
- JDK : Java를 개발하기 위해 필요한 환경입니다. JDK에는 JRE가 포함되어 있습니다.
5. 객체지향과 절차지향의 차이점
절차지향 프로그래밍이란 물이 위에서 흐르는 것과 같이 순차적인 처리가 중요시 되는 프로그래밍 기법입니다.
장점으로는 컴퓨터의 처리구조와 유사해 실행속도가 빠릅니다.
단점으로는 유지보수가 어렵고 실행순서가 정해져있어 코드의 순서가 바뀌면 결과값이 달라질 수 있고 디버깅이 어렵습니다.객체지향은 실제세계를 모델링하여 소프트웨어를 개발하는 기법입니다.
마치 컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법입니다.
장점으로는 코드의 재활용성이 높고 디버깅이 쉽습니다.
단점으로는 처리속도가 절차지향보다 느리고 설계에 많은 시간이 소요되는 단점이 있습니다.
6. 객체지향 언어의 특징
캡슐화 : 데이터와 코드의 형태를 외부로부터 알 수없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법입니다.
상속 : 이미 작성된 클래스를 이어받아 새로운 클래스를 생성하는 기법으로 기존 코드를 재활용해서 사용합니다.
다형성 : 하나의 이름으로 많은 방법에 대처하는 기법입니다.
( 좋은 자료 : https://radait.tistory.com/4 )
7. 상속과 구현의 차이점과 특징 및 장단점
상속은 조상의 클래스를 상속(extends) 받아서 추가적으로 상속을 받은 자식 클래스는 확장을하여 사용하는 의미이다.
자바에서는 다중 상속이 불가능 하다.구현은 interface를 사용하여 역할을 만들고 implements를 사용하여 구현을 한 후 @Override를 사용해서 재정의 한다.
( 좋은 자료 : https://debugdaldal.tistory.com/171 )
8. 오버라이딩과 오버로딩의 차이점과 특징
오버로딩은 '많은 것을 싣는다.', 오버라이딩은 '재정의한다'는 사전적인의미를 가지고 있습니다.
오버로딩은 하나의 클래스 안에서 인스턴스 개수나 형식이 다른 동일한 이름의 메소드를 여러개 정의하는 것이고 정적 바인딩 입니다.
오버라이딩은 상속을 했을 경우에 적용할 수 있고, 기존의 내용에 틀만 가져와서 재정의 하는 것이고 동적 바인딩 입니다.
9. 기본형 변수와 참조형 변수는 무엇일까?
자바가 제공하는 기본형 변수는 총 8가지로 char,byte,short,bollean,int,long,float,double 이 있습니다.
참조형은 값이 저장된 곳의 메모리 주소를 저장하는 공간으로 객체의 주소를 저장합니다.
자바에서 기본형 변수 8가지를 제외하고는 모두 참조형 입니다.
10. 스택 오버플로우가 왜 일어나는가?
스택포인터가 스택의 경계를 넘어 설 때 발생합니다. 호출 스택은 제안된 양의 주소공간을 이루며 프로그램 시작 시 결정됩니다.
11. 메모리 누수란 무엇인가?
우선 프로그래밍에서 메모리 누수란, 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상을 말합니다.
자바에서 메모리 누수는 더 이상 사용하지 않는 객체가 가비지컬렉션(GC)에 의해 회수되지 않고 누적되는 현상입니다. old 영역에서 누적된 객체로 인해서 메이저 GC가 빈번히 발생하게 되고 프로그램의 응답속도가 늦어지다 결국 Out of memory 오류로 프로그램이 종료됩니다.
( 좋은 자료 : https://junghyungil.tistory.com/133 )
12. 메모리 누수를 막기위한 방법
가장 좋은 방법은 참조값을 갖는 변수가 최소한의 유효범위 안에 있도록 하는 것입니다. Local변수로 만들 경우 자동으로 GC의 대상이 되는 것을 예로 들 수 있습니다.
13. Static 이란 무엇인가?
자바에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 끝날 때 까지 그 메모리에 값이 유지된다는 것을 의미합니다. 쉽게 말해 특정한 값을 공유해야하는 상황이라면 Static 사용 시 메모리의 이점을 얻을 수 있습니다.
14. 싱글톤 패턴이란 무엇인가? 디자인 패턴이란?
어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴을 말합니다.
- 사용하는 이유 :
- 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비 방지
- 인스턴스가 한개만 존재하는걸 보증하고 싶을 때
- 두번째 이용부터 객체로딩시간이 줄어 성능 향상
- 문제점 : 싱글톤 인스턴스가 너무 많은 일을 하면 결합도가 높아져 '개방-폐쇄' 원칙 위반(= 객체지향 설계 원칙에 어긋남 )
디자인 패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고절적인 문제들이 또 발생했을 때 재사용할 수 있는 휼륭한 해결책을 말합니다.
15. 익명클래스와 익명객체란?
익명클래스란 클래스의 이름이 없는 것을 말합니다. 인터페이스를 구현하기 위해 해당 인터페이스를 구현할 클래스를 생성해야하는데 일회성이고 재사용할 필요가 없다면 굳이 클래스를 만들필요없이 익명클래스를 사용합니다.
16. JAVA문자열 검색
indexOf("문자열"), contains("문자열"), matches(정규식포함문자열)
17. 자료구조 특징, 장단점
18. 스레드는 무엇이고 언제 쓰이는가?
하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업단위를 말하며 세부적으로는 운영체제에 의해 관리되는 하나의 작업(task)를 의미합니다.
JVM에 의해 하나의 프로세스가 발생되고 main()안의 실행문들이 하나의 스레드입니다. main() 이외의 스레드를 만드려면 Thread클래스를 상속하거나 Runnable 인터페이스를 구현합니다.
19. 멀티스레드와 스레드의 차이점
여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법을 말합니다. 메모리 공유로 시스템 자원 소모가 줄어들고 동시에 두가지 이상 작업이 가능하지만 서로 자원을 소모하다 충돌할 가능성이 있고 코딩이 복잡해져 버그가 생길 가능성이 있습니다.
20. 제네릭은 무엇인가?
제네릭은 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일시의 타입체크를 해주는 기능입니다. 즉 클래스 내부에서 사용할 데이터타입을 나중에 인스턴스를 생성 할 때 확정하는 것을 제네릭이라고 합니다.
21. Filter와 Spring Interceptor
Filter는 Servlet Filter로써 javax.servlet 스펙에 포함되는 클래스입니다.
Interceptor는 Spring MVC 스펙에 포함되어 있는 클래스입니다.
Filter는 Servlet에서 전후처리를 담당하며, Interceptor는 Spring에서 Handler를 실행하기 전후나, ViewResolver를 통해 컨트롤러에서 리턴한 View Name으로부터 렌더링을 담당할 View 오브젝트를 준비해 돌려준 후 실제 View를 렌더링한 후에 어떠한 처리를 담당합니다.
Filter는 Web Application(Tomcat을 사용할 경우 web.xml)에 등록하며, Interceptor는 Spring의 Application Context에 등록합니다.
Filter는 Method Signature에 있는 Argument인 HttpServletRequest 혹은 HttpServeltResponse를 ServletRequest, ServletResponse 등으로 교체할 때 사용하거나, 데이터 변환(다운로드 파일의 압축 및 데이터 암호화 등), XSL/T를 이용한 XML 문서 변경, 사용자 인증, 자원 접근에 대한 로깅 등에 사용합니다.
Interceptor의 경우 AOP를 흉내내거나, Spring 애플리케이션에서 전역적으로 전후처리 로직에서 예외를 사용하도록 하거나, Handler Method에서 사용자의 권한을 체크해서 다른 동작을 시켜준다거나 할 때 사용합니다.