물리계층(Layer 1)
- 물리적 매체를 통해서 데이터 비트를 전송하기 위해 요구 되는 기능들을 정의하며 케이블 연결 장치 등 전송에 필요한 두 장치 간의 실제 접촉과 같은 기계적, 전기적 특성에 대한 규칙을 정의 한다.
- 전송 단위 : 프레임(Frame) 프로토콜 : 이더넷, MAC, PPP 등 장비 : 브릿지 스위치
데이터 링크 계층(Layer 2)
- 두 개의 개방 시스템들 간의 효율적이고 신뢰성 있는 정보 전송을 할 수 있도록 하며 오류의 검출과 회복을 위한 오류 제어 기능을 수행한다. 또한, 송신측과 수신측의 속도 차이를 해결하기 위해 흐름 제어(stop-and-wait & sliding window 방식으로 처리할 수 있는 패킷의 양보다 많은 경우) 기능을 하며 프레임의 시작과 끝을 구분하기 위한 프레임의 동기화 기능을 수행한다.
- 전송단위 : 프레임(Frame) 프로토콜 : 이더넷, MAC, PPP 등 장비 : 브릿지, 스위치
네트워크 계층(Layer 3)
- 다중 네트워크 링크에서 발신자로부터 목적지까지 책임을 가진다. 이전 계층인 데이터 계층은 노드 vs 노드 전달을 감독하는 것이고 네트워크 계층은 시작점에서 목적지까지 성공적으로 전달 되도록 하는 역할을 수행한다.
- 전송단위 : 패킷(Packet) 프로토콜 : IP, ICMP 등 장비 : 라우터, L3 스위치
전송 계층(Layer 4)
- 전체 메시지를 종단 vs 종단(End-to-End, 발신지에서 목적지)간 제어와 에러를 관리한다. 패킷의 전송이 유효한지 확인하고 전송에 실패된 패킷을 다시 보내는 것과 같은 신뢰성있는 통신을 보장한다. 주소 설정, 오류 및 흐름 제어, 다중화를 수행한다.
- 전송단위 : 세그먼트(Segment) 프로토콜 : TCP, UDP 등 장비 : 게이트웨이, L4 스위치
세션 계층(Layer 5)
- 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시송수신(Duplex), 반이중(Half-Duplex), 전이중(Full-Duplex) 방식의 통신과 함께 체크 포인팅과 유후, 종료, 다시 시작 과정 등을 수행한다. 통신 세션을 구성하며 포트 번호를 기반으로 연결한다.
- 프로토콜 : NetBIOS, SSH, TLS
표현 계층(Layer 6)
- 응용 계층으로부터 받은 데이터를 하위 계층인 세션 계층에 보내기 전에 통신에 적당한 형태로 변환하고 세션 계층에서 받은 데이터는 응용 계층에 맞게 변환하는 역할을 수행한다. 코드 변환, 구문 검색, 데이터 압축 및 암호화 등의 기능을 담당한다.
- 프로토콜 : JPG, MPEG, SMB, AFP
응용 계층(Layer 7)
- 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 응용 프로세스 간의 정보 교환, 전자메일, 파일전송 등의 서비스를 제공한다.
- 프로토콜 : DNS, FTP, HTTP
HTTPS 프로토콜이란?
- 웹 브라우저와 웹서버 간에 메세지 교환 프로토콜. 즉, 일종의 대화 규칙이며, 교환 방식은 복잡한 바이너리 데이터가 아닌 단순 텍스트를 통해 이루어진다.
- HTTP의 취약점(보안문제)을 보완하기 위해 주고받는 모든 메시지를 SSL 프로토콜로 암호화하며, 암호화 방식에 쓰이는 Key의 종류로는 크게 대칭과 비대칭 둘로 나뉘게 된다.
대표적인 웹 보안 취약점
1. 인젝션(Injection)
- SQL 인젝션, OS 인젝션 등의 취약점은 신뢰할 수 없는 데이터가 서버로 전달되는 명령어의 일부로서 보내질 때 발생할 수 있다. 공격자의 악의적인 데이터는 예상하지 못하는 결과를 초래할 수 있다. 예를 들어 데이터베이스에서 회원 정보를 전부 가져오도록 인젝션을 날릴 수도 있다.
위의 만화에 대해 설명하자면, 저 학교에서 입력한 명령은 다음과 같을 것이다.
INSERT INTO students (이름) VALUES ('학생 이름');
여기서 "Robert'); DROP TABLE students;--"학생을 "학생 이름" 자리에 넣을 경우 다음과 같은 명령문이 된다.
INSERT INTO students (이름) VALUES ('Robert');DROP TABLE students;--');
첫 번째 줄에서는 Robert라는 학생이 입력되었지만, 두 번째 줄에서 학생들의 데이터가 있는 테이블을 제거한다. 그리고 세 번째에서는 뒤에 오는 내용을 모두 주석 처리한다. 결과적으로 ‘모든 학생 기록을 삭제한다.’라는 뜻의 명령문이 완성된다.
- 인젝션 공격 같은 경우는 공격 난이도가 낮은 데 반해서 공격 피해가 심각하다는 점에서 굉장히 중요하다.
2. 인증 및 세션관리 취약점
- 인증이나 세션 관리가 제대로 되어 있지 않은 웹 애플리케이션의 경우 공격자에게 취약한 세션 값을 제공하여 다른 사람의 권한을 얻도록 할 수 있다. 예를 들어 인증 관리에서 실수를 하여 쿠키 값을 변조했더니 다른 사람의 아이디로 로그인이 되거나 하는 경우가 실제로도 비일비재한다. 다른 사용자의 권한을 얻을 수 있다는 점에서 개인 정보 등의 측면에서 굉장히 위협적인 공격이 될 수 있다.
다음의 사례가 대표적인 취약점 사례이다.
-
사용자 인증 정보가 저장될 때 해시 혹은 암호화를 사용하여 보호되지 않을 때
-
세션 ID가 성공적인 로그인 이후에 교체되지 않을 때
-
아이디, 비밀번호, 세션 ID 등이 암호화되지 않은 연결을 통해서 전송될 때
-
세션 ID가 URL에 노출될 때
- 예를 들어 URL에 자신의 세션 ID가 그대로 노출되어 있는 상황이지만 클라이언트는 이를 인지하지 못하고 친구에게 해당 URL 정보를 보낼 수 있습니다. 이 때 친구는 URL을 확인하고 해당 세션으로 로그인을 할 수도 있는 것이다.
- 공격의 난이도는 평균적인 수준이지만 영향도는 인젝션(Injection) 공격과 마찬가지로 심각한 수준에 이른다.
3. 크로스 사이트 스크립팅(XSS)
- XSS 공격은 웹 사이트에서 서버와 통신하는 부분에서 스크립트 문장을 심어서 공격을 하는 해킹 유형이다. 대표적으로 게시판의 게시글을 작성했을 때 서버 단에서 사용자가 입력한 게시글의 정보를 제대로 필터링 하지 않거나 아예 필터링을 하지 않는 경우 다양한 특수 문자를 포함한 스크립트 문장을 심어서 서버로 전송할 수 있다. 이러한 방법을 악용하여 다양한 공격이 가능하다.
다음 사례가 대표적인 취약점 사례이다.
**String page += request.getParameter("boardContent");**
- 위와 같은 경우 사용자는 boardContent라는 이름의 파라미터 변수에 스크립트 문장을 심어서 전송할 수 있고 서버는 제대로 이것을 필터링하지 않기 때문에 해킹이 제대로 적용될 수 있다. 대표적인 예시로 사용자는
데이터베이스의 정규화와 역정규화
정규화
- 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다.
역정규화
- 정규화된 데이터베이스에서 성능을 개선하기 위해 사용되는 전략을 역정규화(Denormalization)라고 한다.
데이터베이스의 인덱스 종류
1. 고유 인덱스(Unique Index)
- 고유 인덱스는 유일한 값을 갖는 컬럼에 대해서 생성하는 인덱스로 고유 인덱스를 지정하려면 UNIQUE 옵션을 지정해야 한다.
SQL> CREATE **UNIQUE** INDEX idx_ukempno_emp ON emp(empno);
2. 단일 인덱스(Single Index)
- 단일 인덱스는 한 개의 컬럼으로 구성한 인덱스를 말한다.
SQL> CREATE INDEX idx_ukempno_emp ON emp(empno);
3. 결합 인덱스(Composite Index)
- 결합 인덱스는 두 개 이상의 컬럼으로 인덱스를 구성하는 것을 말합니다. 부서 번호와 부서명을 결합하여 인덱스를 설정 해 보도록 하겠다.
SQL> CREATE INDEX idx_dept_com ON index_dept(deptno, dname);
4. 함수 기반 인덱스(Function Based Index)
- 함수 기반 인덱스는 SAL*12와 같이 컬럼에 어떠한 산술식을 수행했을때를 말한다.
- SAL컬럼에 INDEX가 걸려있다해도 SAL*12은 INDEX를 타지 못합니다. 이럴때 함수 기반 인덱스를 생성한다.
SQL> CREATE INDEX idx_annsal_emp ON emp(sal*12);
데이터베이스의 좋은 인덱스 설계란?
- 인덱스 설계시 중요한 두 가지 선택 기준 1. 조건절에 항상 사용되거나, 자주 등장하는 컬럼들을 선정한다. 2. '='조건으로 자주 조회되는 칼럼들을 앞쪽에 둔다.
데이터베이스 실행 계획이란?
실행 계획의 정의
- 실행계획(Execution Plan)이란 SQL에서 요구한 사항을 처리하기 위한 절차와 방법을 의미한다.
- 동일한 SQL에 대해 결과를 낼 수 있는 다양한 처리 방법(실행계획)이 존재할 수 있지만 각 처리 방법마다 실행 시간(성능)은 서로 다를 수 있다.
- 옵티마이저는 다양한 처리 방법들 중에서 가장 효율적인 방법을 찾아준다.(최적의 실행계획을 생성)
실행 계획의 구성 요소
- 조인순서(Join Order)
수행할 때 참조하는 테이블의 순서가
FROM A INNER JOIN B
일 때, 조인 작업을 위해 먼저 A테이블을 읽고 B 테이블을 읽는 작업을 수행한다면 조인 순서는 A -> B이다.
(논리적으로 가능한 조인순서는 n! 만큼 존재, n 은 FROM 절 다음에 나온 테이블 수)
- 조인 기법(Join Method)
두 개의 테이블을 조인할 때 사용할 수 있는 방법
NL Join, Hash Join, Sort Merge Join 등이 존재
- 액세스 기법(Access Method)
하나의 테이블을 액세스할 때 사용할 수 있는 방법
인덱스를 이용하는 인덱스 스캔(Index Scan)과 테이블 전체를 모두 읽는 전체 테이블 스캔(Full Table Scan) 등이 존재
- 최적화 정보(Optimization Information)
옵티마이저가 실행계획의 각 단계마다 예상되는 비용 사항을 표시한 것
최적화 정보에는 Cost, Card, Bytes가 존재
Cost : 상대적인 비용 정보
Card : Cardinality의 약자로서 주어진 조건을 만족한 결과 집합 혹은 조인 조건을 만족한 결과 집합의 건수를 의미
Bytes: 결과 집합이 차지하는 메모리 양을 바이트로 표시한 것
- 연산(Operation)
여러 가지 조작을 통해서 원하는 결과를 얻어내는 일련의 작업
연산에는 조인 기법, 액세스 기법, 필터, 정렬, 집계, 뷰 등 다양한 종류가 존재
':: IT > 기술면접' 카테고리의 다른 글
SW 테스트 방법론 (0) | 2020.08.10 |
---|---|
웹개발2 (0) | 2020.08.10 |
웹개발 (0) | 2020.08.10 |
파이썬 개발 (0) | 2020.08.10 |
[기술면접] 데브옵스 (0) | 2020.07.31 |