1. Network
라우터란 무엇인가
네트워크 상에서 다른 네트워크 혹은 네트워크 상의 다른 호스트에게 최적의 경로로 찾아서 Packet을 전송하는 장비.
라우터의 주요기능은 1) 네트워크 연결 기능, 2) 패킷 스위칭 기능, 3) 경로설정 기능이다. 4) 그밖에도 서로다른 네트워크를 식별하거나, 네트워크 Traffic을 분산시킬 수 있도록 로드밸런싱을 하거나, 연결된 경로들 중 하나가 이상이 생길 경우, 우회경로로 연결을 할 수 있도록 한다. 네트워크 연결기능은 목적지까지 패킷(TCP Segment) 또는 데이터그램(IP)을 전송하기 위해 네트워크 간 연결을 주관한다는 의미, 경로 설정 기능은 네트워크 상에서 목적지까지의 최적의 경로를 산정할 있다는 것 패킷 스위칭의 경우, 전달받은 패킷을 결정된 경로대로 다른 포트로 전송하는 기능
라우터를 왜 쓰는가?
IP Layer에서 통신을 할 때는 IP주소(Lan 카드의 논리적 주소, IPv4, IPv6)를 이용하는데, 라우터가 이러한 IP주소를 이용하여 네트워크 통신이 가능하게 해준다.
라우터 대신 L3 스위치를 쓴다는데?
스위치의 경우 MAC(Lan 카드의 물리적 주소)을 이용하여 네트워크 통신을 수행함. Layer 2로 IP Layer보다 하위이나, Router가 소프트웨어기반인 반면 Switch는 하드웨어 기반이기 때문에, 성능상의 이유로 L3처리가 가능한 스위치를 사용한다고 한다. 그리고 라우터는 비싸다. 스위치는 싸다고도 한다. 그런데.. 찾아보니 과거에 라우터가 했던 기능(Dynymic Routing)을 이제는 L3 스위치도 거의 동일하게 사용할 수 있다고 한다. 따라서 현재 라우터와 L3 스위치를 구분하는 것이 거의 무의미하다고 한다. 잘모르겠다.
L2, L3, L4, L7스위치는 뭔가?
Lan카드의 Mac 값을 이용하여 통신을 수행하는 것이 Switch이며, L2 스위치는 Layer2에서 Mac을 읽고 처리하는 녀석, L3 스위치는 IP 주소를 읽고 처리하는 녀석, L4 스위치는 Port를 읽고 처리하는 녀석이다.
L2 스위치는 Mac을 읽어서 해당 호스트에게 전달하는 역할을 수행하는 것이고, L3 스위치는 IP주소와 IP 데이터그램을 읽어서 경로를 설정하고, 패킷을 전송하는 역할을 한다. L4스위치는 TCP Segment를 읽어서 현재의 Traffic을 고려하여 여러 서버들에 균등하게 할당할 수 있다.(로드 밸런싱), 또한 L4스위치는 이중화된 서버에서 한쪽 서버에 장애가 발생할 경우, 다른 서버로 스위칭하여 처리할 수 있도록 Fail-Over 기능을 지원한다. L7 스위치도 존재하는데, L4 스위치가 TCP Header를 읽고 Port를 식별하여, 로드밸런싱을 한다면, L7 스위치는 메시지를 읽고 메시지 패턴에 따라서 스위칭이 가능하게 한다고 한다. 메시지를 읽을 수 있기 떄문에, DOS 등의 공격에 방어가 가능하다.
L4 스위치와 스티키 세션(Sticky Session)
Sticky Session은 처음에 접속했던 Server에 다음에 접속시에도 접속할 수 있도록 하는 방식이다. Session TimeOut 시간이 지나지 않은 동안, 동일한 사용자는 하나의 서버로 접속할 수 있게 한다. 스티키 세션을 쓰는 이유는 매번 접속시마다 세션을 서버에서 만드는 데도 비용과 자원이 들기 때문에, 한번 만들어진 세션을 이용하여 통신을 수행할 수 있도록, 즉 오버헤드를 최소화하는데 있다. 문제는 스티키 세션방식은 L4의 로드밸런싱을 방해할 수도 있다는 것이다. 다만 그 해결책에 대해서는 찾기가 어렵다. 그냥 사용하는 듯. 요즘에는 L4룰 중에 Least 방식을 쓴다는데.. 이건 뭘까나
참고할 것.
http://enter.tistory.com/91
http://www.ktword.co.kr/abbr_view.php?m_temp1=448
http://cloudlab.tistory.com/entry/Router%EC%9D%98-%EC%97%AD%ED%95%A0
http://egloos.zum.com/koreahojin/v/2341317
https://m.blog.naver.com/PostView.nhn?blogId=nackji80&logNo=220228728915&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
http://suns.tistory.com/entry/L2-L3-L4-%EC%8A%A4%EC%9C%84%EC%B9%98%EB%8A%94-%EB%AC%B4%EC%8A%A8-%EA%B8%B0%EB%8A%A5%EC%9D%84-%ED%95%A0%EA%B9%8C
https://en.wikipedia.org/wiki/LAN_switching#Layer_2_switching
http://freeism.co.kr/tc/657
http://finerss.tistory.com/entry/L4-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1
Gateway란 무엇인가?
컴퓨터 네트워크 상에서 네트워크 간 통신을 가능하게 하는 하드웨어, 소프트웨어
SSO(Single Sign Object)란 무엇인가.
DNS 란 무엇인가.
서브넷마스크란 무엇인가
방화벽이란 무엇인가
2. HTTP
HTTP와 HTTPS의 정의와 연결과정
HTTP(Hyper Text Transfer Protocol)는 HTML을 전송하기 위한 통신규약이나, 실제로는 거의 모든데이터의 전송이 가능하다. HTTPS(Hyper Text Transfer Protocol on Secure Socket Layer)는 HTTP에서 일반 문자열을 Socket에 실어 보내는 것과 달리, SSL, TLS(SSL 3.0) 프로토콜을 이용해 암호화하여 전송하는 방식이다. HTTP, HTTPS 모두 3way HandShaking으로 세션(TCP Header에 정보가 있음)을 연결하며, 종료시에는 4way Handsahking을 한다. 세션의 연결과 종료는 PORT 기준이다. TCP Header에 Source, Destination Port 정보가 담겨있다.
3way Handshaking, 4way Handshaking
세션을 맺기 위해, Client가 TCP Header에 SYN을 Server에 전송, SYN을 받은 Server는 잘받았다고, ACK와 SYN을 함께 Client에 보낸다. Client는 Server의 ACK를 잘받았다고 다시 Server에 ACK를 보내고 이제부터는 세션이 ESTABLISEHD 상태가 된다. 세션을 종료하기 위해 Client가 FIN을 Server에 전달하면(FIN_WAIT1) Server는 ACK를 보내고(FIN_WAIT2) Server측 연결의 종료를 기다린다.(TIME_WAIT) Server의 연결이 종료되면, Client에 FIN을 보내고, Client는 다시 Server에 ACK를 보낸다. 이로써 세션은 CLOSED 되고 세션연결이 종료된다.
HTTPS와 SSL, TLS
SSL은 Secure Socket Layer의 약자이며, TLS는 Transport Layer Security이다. SSL 3.1을 발표하면서 공식적으로 표준화한 이름이 TLS이며, TLS 1.0이 SSL 3.1, TLS 1.1이 SSL 3.2 TLS 1.2가 SSL 3.3이다. 확인해보니 현재 TLS .1.3(Draft)까지 나와있다. 암튼 HTTPS는 SSL/TLS 위에서 데이터를 전송하는데, 비대칭키와 대칭키 알고리즘을 모두 사용하여 세션을 연결하고 데이터를 전송한다. 기본적으로 비대칭키는 공개키와 개인키 모두 암복호화를 수행하고, 대칭키는 하나의 키로 암복호화를 수행한다. 대칭키는 속도면에서 비대칭키에 비해 우수하나, 배포의 문제점이 있다.(손으로 쓰고 007 가방으로 옮기지 않는한), 따라서 대칭키를 안전하게 교환할 수단이 필요했고, 비대칭키 알고리즘은 대칭키를 교환하는데 사용된다. Handshake 과정에서 Client는 Server에게 SYN을 보내면서 Client의 Client Nonce를 Server에 함께 전달한다. Server는 ACK를 전달하면서 Server Nonce, Server 인증서를 Client에 반환한다. Client는 전달된 인증서가 CA(Certificate authority)가 발급한 것이 맞는지, 미리 저장하고 있는 CA 목록의 공개키를 이용하여 Server 인증서를 복호화한다. 전달된 인증서가 CA가 발급한 인증서가 아닌경우, 사설인증서라는 뜻이고, 복호화를 패스할 수도 있다.(Verify ALL). Client는 Client에서 생성한 Nonce와 Server에서 생성한 Nonce를 조합해서 Key를 하나 생성한다(Pre master secret). 생성된 Key는 서버가 전달한 인증서에서 공개키를 추출하여 비대칭 암호화하고, Clietn의 ACK와 함께 Server로 전달된다. Server는 전달받은 Key를 Server 개인키로 복호화화여 저장하는데, 이렇게 해서 HTTPS의 세션연결이 완료되었다. 이후의 데이터들은 각자 나눠 가진 대칭키(Mast secret)를 이용하여 암호화하여 전달한다.
참고할 것
http://mohwaproject.tistory.com/entry/HTTPS%EB%9E%80
http://sostarzia.tistory.com/184
http://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake
https://opentutorials.org/course/228/4894
https://blog.cloudflare.com/introducing-tls-1-3/
세션과 쿠키의 정의 및 차이점
쿠키는 과자입니다. HTTP 통신에서 사용자가 WebServer에 접속한 이력, 계정정보 등을 담고있는 텍스트파일이다. 쿠키가 필요한 이유는 HTTP 통신이 Steadless 특성을 갖고 있기 때문이다.(모든 연결은 독립적이고, 연결이 종료되면 세션이 종료됨, 따라서 동일한 사용자의 연속적인 동작을 확인하기 위해서는 별도의 방법이 필요함.) 쿠키는 사용자가 Server에 세션 연결시에 함께 전송되며, Server는 쿠키를 읽어 해당 사용자의 이전동작 등을 확인할 수 있다. 1개의 쿠키의 길이는 보통 4096 바이트의 길이제한이 있다. 과거에는 로그인 ID, 비밀번호를 쿠키에 저장했었고, (사용자 편의성을 위해) 이를 악용하는 경우가 있었다. 따라서 쿠키 대신에 Session을 사용하기 시작하였다. Session의 경우 민감한 사용자 정보는 Server에 저장하고, 해당 Session에 접근가능한 메타정보만을 Client에 넘겨주는 방식이다. 쿠키에 민감한 사용자정보가 아닌, Session의 접근자 정보만 전달하므로 악용될 소지가 줄어들게 된다. Session 전달시에는 Server에서 생성한 Session임을 의미하는 식별 키 값, Session간 식별이 가능하도록 Session ID 값, 도메인 주소 등이 함께 전달된다.
참고할 것.
https://www.microsoft.com/Korea/MSDN/columns/Contents/ASPdotNET/vbtchASPNETCookies101/
http://luna79.tistory.com/39
http://m.blog.naver.com/franken82/130142391126
클러스터링 (ex.세션클러스터링)
HTTP Version 별 차이점
크로스사이트인젝션
TLS는 무엇인가, TLS의 버전별 차이(SSL과 TLS의 차이)
TLS 맺는 과정
Ajax란 무엇인가.
부트스트랩이란 무엇인가
Active X란 무엇인가
3. Socket 통신
Socket 통신이란 무엇인가
Socket Connecion이 맺어지는 과정
LITTELE ENDIAN과 BIG ENDIAN
타임아웃의 종류와 차이
올바른 타임아웃 설정법
메시지 큐(MQ?)란 무엇인가
싱크/어싱크 차이점
NIO란?
4. JAVA
JVM 메모리 구조 및 각 영역의 역할(STACK과 HEAP, STATIC)
JVM은 Method Area(Perm 영역), Heap Area, Stack, Natvice Method Stack, PC Register가 있고, Perm 영역의 경우, Byte Code로 Compile된 Java Class들(.class)을 비롯한 메타 정보들이 ClassLoader에 의해 저장되는 영역이다. PC Register는 Thread 생성시 할당받는 영역이며, 내부적으로 관리되는 영역이기 때문에 별 관심이 없다. Stack이라는 것은 Exceute Engine이 Code를 한줄씩 실행하면서 Method 내의 참조변수, 연산결과 등을 저장하는 영역인데, LIFO 방식이다. 만약에 So 파일 등 다른 언어로 Complie된 소스코드를 JNI를 이용하여 실행할 경우, 해당 소스코드의 Method 내의 정보들은 Native Method Stack에 저장되고 관리된다. Heap은 Young과 Old로 구분할 수 있다. Method Area에 저장되어 있는 Class의 객체(Instance)를 생성하여 먼저 young에 저장한다. 객체에 접근하기 위한 참조변수가 Method 내의 로컬 변수라면 Stack에 저장되지만, Static 변수인 경우에는 Method Aread의 Runtime Constant Pool이란 곳에 저장된다. Young에 저장된 Instance가 GC로부터 살아남고 일정 시간이 지나면 Old로 이동하는데, 상술하자면, 최초의 Instance는 Young의 Eden에 생성되고, 일정 이상 Eden 영역이 채워지면 GC(Minor)가 발생한다. 이때 Instance들 중 참조관계가 유효한 것들은 GC의 대상에서 제외되는데, 일부는 Old에 나머지는 Survivor 0/1로 이동한다.(오래된 녀석이 Old) Survivor 영역은 0과 1이 있으며, Eden의 GC로부터 살아남은 녀석들이 저장되는 곳이다. Survior 영역에서도 GC(Minor)가 발생하며, Survivor 영역이 다 찼을 때, 발생한다. Survivor 영역은 한번에 하나만 쓰는데(0 or 1), Survivor에서 GC 발생시 참초관계가 유효한 Instance들 중 오래된 녀석들은 OLD로 나머지는 다른 Survivor 영역으로 넘어간다. Old 영역에서도 GC(Major)가 발생한다. CG방식은 여러가지가 있으나, Java 7 이상에서는 ParallOld / G1 GC를 많이 사용하는 것 같다. CMS는 조각모음 이슈가 있어서 일반적으로 사용하기 어려울 수 있다.(이건 후술). Perm 영역에서도 GC를 발생시킬 수 있다.(설정 추가)
JAVA 8 JVM 변화
Java 8이 되면서 JVM의 Perm 영역(Method Area, Class Area)이 사라지고, MetaSpace라는 새로운 영역이 생겼다. 저장되는 정보는 대동소이하지만 가장 큰 차이점은 MetaSpace 영역은 OS Native Memory로 부터 동적으로 할당받기 때문에, 한계까지 자동으로 Memory 사용량을 늘릴 수 있다는 것이다. Java8 이전에는 설정해둔 메모리 이상으로 클래스를 로딩하거나, 상수를 엄청 많이 만들거나, Hot Deploy를 통해서 사용하지 않는 Class 들의 정보가 제거되지 않거나 할 경우 Perm 영역의 용량이 부족하다고 OOM이 발생하였었다. JAVA 8에서는 해당 문제가 발생하지 않을 것으로 보인다. 또한 Perm 영역에 저장되던 일부 정보들이 Heap 영역으로 이동하였다.(추가 정보 조사할 것). 따라서 Legacy 시스템이 Java8로 전환을 할 경우, Heap 메모리 재설정을 고려해봐야할 듯 하다.
POJO란 무엇인가 Spring Bean과는 무슨 차이가 있는가
POJO는 Plain Java Old Object의 준말이며, 말 그대로 특정 도메인이나, 서비스에 종속되지 않은 느슨한 결합도를 가진 자바 객체이다. EJB(Enterprise Java Bean)와 대비되는 개념이다. POJO는 Overhead가 많은 EJB의 문제의 해결책으로 제시되었으며, 특정 기술이나 규약에 종속도지 않기 때문에 객체지향 원리에 충실하다고 할 수 있겠다. POJO를 이용하면 코드가 간결해진다. 환경 종속적이지 않기 때문에, 테스트도 어렵지 않고, POJO에 어떤 설정을 주입하는가에 따라 다양한 형태로 구현이 가능하기 때문에, 재사용성과 확장성이 뛰어나다고 할 수 있겠다. Spring Bean은 POJO 기반 Framework인 Spring의 Contailner에 의해서 제어되는 Component를 의미하며, Spring의 Bean은 XML을 통해 의존성을 주입받게 된다.(일종의 환경설정, 혹은 특정 클래스에 대한 참조설정 등으로 이해하고 있다). 의존성을 주입받은 POJO를 개발자는 호출하기만 해도, XML에 설정해둔 대로 동작하게 된다. 따라서 모든 Bean등을 의존성 주입이 가능한 POJO 형태로 되어 있다.
참고할 것.
http://bobr2.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%A3%BC%EC%9A%94-%EA%B0%9C%EB%85%90-%EC%9A%A9%EC%96%B4-1-Beans-%EC%99%80-POJO
https://github.com/changhwa/reserve/wiki/Chapter-1.-%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90
토비의 스프링 해설서 (파자..) http://isstory83.tistory.com/94
J유닛,로드러너, 레드마인은 무엇이며, 각각 어떻게 동작하는가
디자인패턴의 종류와 활용법
싱글톤이란 무엇인가, Singleton의 사례
오버라이드 와 오버로딩의 차이
추상클래스와 인터페이스의 차이
fork와 join
에러와 익셉션의 차이 및 Check Exception과 Unchecked Exception의 차이
OOM 발생원인 및 대처
StackOverFlow 발생원인 및 대처
Call by Value Call by Reference란 무엇인가
Java7 변경점
Java8 변경점
시리얼라이즈블 인터페이스란 무엇이며, 어떻게 쓰는 것인가
5.Spring Framework
Spring IOC란 무엇인가
SPring DI란 무엇인가
Spring AOP란 무엇인가
Spring Bean이란 무엇인가
Spring 제어역전이란 무엇인가
Spring Annotaion의 의미 및 활용법
6.암복호화
주요 암/복호화 알고리즘의 종류 및 분류(대칭/비대칭/해쉬 등)
단방향암호화 장단점 밎 극복방안
인코딩과 디코딩(+Encryption과의 차이)
PKCS 알고리즘의 의미
Padding의 의미
aes128에서 128의 의미
7.Web/WAS
Proxy, Reverse Proxy
웹서버와 WAS서버
Connection Pool이란 무엇인가, 사용하는 이유
IIS란 무엇인가
내부망/외부망/DMZ에 대한 정의 및 특징
NAS란 무엇인가 (파일 업다운용으로 쓰는 서버인건 알겠는데… )
NAT IP란 무엇인가 Ellastic IP는 또 무엇인가, 일반 IP와의 차이점.
SSL/SSH 방식에 대한 정의
in-bound, out-bound란 무엇인가
로드 밸런싱, Round-Robin, Hash
이더넷, LAN, WLAN
PORT (포트의 개념. 왜 나누는 것이며, 무한정한 것이며, 흔히 쓰는 443, 8080, 8800 등.. 무슨 의미인지.. )
이중화(server) Active-Standby
Hang이 걸리다의 의미 및 사례 / 대처방안
캐시란 무엇인가
서블릿이란 무엇인가
Fail over와 Fail back
8.DB
이중화(DB,Session), Master, Slave
DB인덱싱
UNION 과 UNION ALL
스키마
데이터 마이닝
트리거란 무엇인가
공부하자
Ref :