본문 바로가기

CS110

[네트워크] TCP(Transport Control Protocol) TCP(Transport Control Protocol) - TCP는 전송계층에서 사용하는 프로토콜로 연결형 서비스 - 장치들 사이에 논리적인 접속을 성립하기 위해 연결을 설정해 신뢰성을 보장 - 연결을 설정/해제하는 과정 필요 1) 3-way-handshake - TCP 통신에서 연결을 설정하는 과정 (1) Client -> Server : SYN - 접속 요청 프로세스(Client)가 연결 요청 메시지 전송(SYN) - 송신자가 최초로 데이터를 전송할 때 Sequence Number을 난수로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트 전송 (2) Server -> Client : SYN + ACK - 접속 요청을 받은 프로세스(Server)가 요청을 수락했으며, 접속 요청 프로세스(Clie.. 2020. 6. 24.
[네트워크]TCP와 UDP TCP와 UDP 전송 계층에서 사용하는 프로토콜 TCP(Transmission Control Protocol) - 인터넷 상에서 데이터를 세그먼트로 보내기 위해 IP와 함께 사용하는 프로토콜 - 연결형 서비스로 가상회선방식 사용(3-way-handshake, 4-way-handshake) - 흐름제어와 혼잡제어 제공 - 높은 신뢰성 보장 - UDP에 비해 느린 속도 - 전이중(Full-Duplex), 점대점(Point-to-Point) 방식 - 멀티캐스팅이나 브로드캐스팅을 지원하지 않음 UDP(User Datagram Protocol) - 데이터를 데이터그램 단위로 처리하는 프로토콜 - 비연결형 서비스로 데이터그램방식 제공 - 데이터를 주고받기위해 연결을 설정/해제하는 과정을 거치지 않음 - 각 패킷은 .. 2020. 6. 24.
[네트워크] TCP/IP 프로토콜(Protocol) - 네트워크 상에서 지켜야할 통신 규약 - 데이터 송신측과 수신측이 사용하는 규칙을 정한 뒤 데이터를 송수신해야하는데, 이 규칙을 프로토콜이라 함 1) 프로토콜이 하는 일 (1) 데이터의 내용을 결정 (2) 데이터의 헤더를 결정 (3) 데이터를 주고받는 순서 결정 TCP/IP 1) IP(Interent Protocol) - 인터넷에서 컴퓨터의 위치를 찾아 데이터를 전송하기 위해 지켜야할 규약 - 모든 컴퓨터가 인터넷을 하기위해 서로 구별할 수 있도록 논리적인 주소 IP Address라고 함 2) TCP(Transmission Control Protocol) - IP로 컴퓨터의 위치를 찾은 다음 정보를 전달 - 인터넷을 패킷을 통해 정보를 전달하므로 패킷을 전달하는 규약이 필요 .. 2020. 6. 24.
[네트워크] OSI 7 계층 OSI 7 계층(Open System Interconnection 7 Layer) - 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것 - 게층을 나눔으로써 통신이 진행되는 과정을 단계별로 파악 가능 1) 물리 계층(Physical Layer) - 전기적, 기계적, 기능적 특성으 이용해 통신 케이블로 데이터 전송 - 데이터 전송만을 담당 - 통신 장비로는 케이블, 리피터, 허브 등이 있음 - 전송 단위는 비트(bit) 2) 데이터 링크 계층(Datalink Layer) - 물리적인 연결을 통해 장치 간 신뢰성있는 정보 전송 - 에러 검출, 흐름 제어, 프레임 동기화 수행 - 물리적인 주소 값인 Mac Address 할당 - 대표적으로 이더넷이 있음 - 전송 단위는 프레임(Frame) 3) 네트워크 계.. 2020. 6. 24.
[데이터베이스] 객체관계매핑(ORM, Object-Relational Mapping) 영속성(Persistence) 1) 영속성(Persistence) - 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성 - 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하고 프로그램 종료돠 동시에 사라지게 됨 2) 영구적인 객체(Object Persistence) - 메모리 상의 데이터를 파일 시스템, RDB 등을 활용해 영속성을 부여해 영구적으로 존재하는 데이터 3) 영속성을 부여하는 방법 (1) JDBC (2) Persistence Framework 4) Persistence Layer - 프로그램 아키텍처에서 데이터에 영속성을 부여하는 계층 5) Persistence Framework - JDBC 같은 복잡한 프로그래밍 없이 간단한 작업만으로 영속성을 부여할 수 있도록.. 2020. 6. 24.
[데이터베이스] Statement와 Prepared Statement Statement와 Prepared Statement - SQL문을 실행할 수 있는 객체 - 가장 큰 차이점은 캐시 사용 여부 1) SQL 실행 단계 (1) 쿼리 문장 분석 (2) 컴파일 (3) 실행 2) Statement String sqlstr = "SELECT name, memo FROM TABLE WHERE name = " + num Statement stmt = conn.credateStatement(); ResultSet rst = stmt.executeQuery(sqlstr); - 쿼리문을 수행할 때마다 SQL 실행 단계 1) ~ 3)의 과정을 거침 - SQL문을 수행하는 과정에서 매번 컴파일을 하게 때문에 성능상 이슈 발생 - 실행되는 SQL 문을 확인 가능 3) Prepared State.. 2020. 6. 24.
[데이터베이스] 인덱스(Index) 데이터베이스 인덱스(Database Index) - 지정한 column을 기준으로 메모리 영역에 일종의 색인을 생성하는 것. - 데이터베이스의 레코드가 늘어날수록 table full scan의 속도는 느려진다. 인덱스를 사용하면 빠른 탐색이 가능하다. - 하지만 인덱스는 키 값을 기준으로 정렬된 상태를 유지하기 때문에 검색속도는 빨라질 수 있지만, 삽입, 삭제, 갱신을 느려진다. 1) 인덱스 구조 (1) B-Tree 인덱스 - B-Tree 인덱스는 역트리 형태의 자료구조 - Root와 Branch 노드에는 키 값으로 하위노드들의 데이터 값 범위가 저장되며, value에는 하위노드를 찾는데 필요한 주소 정보가 저장된다. - Leaf노드의 key 값으로는 해당 데이터의 인덱스 키 값이 저장되며, value에.. 2020. 6. 24.
[데이터베이스] 샤딩(Sharding) 샤딩(Sharding) - 수평 파티셔닝 - 데이터베이스 테이블에 저장된 레코드의 수가 늘어남에 따라 검색 성능이 떨어지거나 용량에 커짐 - 샤딩이란 테이블을 row 단위로 나눠서 저장해 DB 용량을 줄이고 검색을 성능을 올리는 기법 - 즉, 기존 테이블와 똑같은 스키마를 가지는 샤드라는 작은 단위로 나눠 저장하는 방식이다 - '샤드키'는 나눠진 샤드 중 어떤 샤드를 선택할 지 결정하는 키로, 샤드키 결정 방식에 따라 샤딩 방법이 나뉘게 된다. 1) 해시 샤딩(Hash Sharding) - 해시 함수를 사용해 샤드 키를 나누는 방식 (+) 구현이 간단 (-) 샤드가 늘어나게 되면 해시 함수를 재설정해야하고, 해시 함수를 바꾸게 되면 기존에 저장된 샤드 키도 전부 바꿔야함 (-) 즉, 확장성이 좋지 않음 .. 2020. 6. 24.
[데이터베이스] 파티셔닝(Partitioning) 파티셔닝(Partitioning) - Scale Out 방법 중 하나 - 큰 테이블이나 인덱스를 관리하기 쉬운 Partition이라는 작은 단위로 분할 1) 종류 (1) Pysical Partitioning - 서버를 여러 개 두어 부하 분산 (2) Logical Paritioning - 한 테이블의 각 레코드 또는 컬럼을 여러 테이블로 분산 2) 장점 - Partition 단위의 백업 및 복구 가능 - Partition 단위의 삽입/삭제/갱신으로 부하를 줄임 - 데이터 가용성 향상 3) 단점 - Table 간 Join 비용 4) 파티셔닝 방법 (1) 수평 파티셔닝(Sharding) - 테이블을 행 단위로 분할 - 하나의 테이블의 각 행을 여러 테이블에 분산 저장 - 스키마가 같은 테이블을 두 개 이상 .. 2020. 6. 24.
[데이터베이스] SQL Injection SQL Injection - 대표적인 웹 해킹 기법 - 웹 애플리케이션에서 데이터베이스에 질의하는 과정에 악의적인 SQL 문을 삽입해 인증을 우회하거나, 악의적인 쿼리문을 수행하는 공격법 1) 공격 유형 (1) 인증우회(AB, Auth Bypass) - 일반적으로 로그인 페이지를 타겟 - SQL 문의 True / False 논리적인 연산의 오류를 이용 - ex. 패스워드에 "or 1 = 1"을 삽입해 인증을 우회 (2) 데이터 노출 - 해당 웹 애플리케이션의 데이터 절취를 목적 - 악의적인 쿼리문으로 에러를 유발시켜 데이터나 데이터베이스의 정보를 노출시킴 2) 방어 방법 (1) 특수문자 검사 - 로그인 페이지처럼 사용자의 입력을 통해 쿼리문을 수행할 때, 특수문자 여부를 검사하는 로직을 수행 - 자바스크.. 2020. 6. 24.
[데이터베이스] 데이터베이스 풀(Database Pool) 데이터베이스 풀(Database Pool) - Connection Pool - 애플리케이션의 스레드에서 데이터베이스에 접근하기위해 Connection이 필요 - 데이터베이스와 Connection한 객체들을 미리 생성해 Pool에 저장해두었다가, 클라이언트의 요청이 들어올 때마다 사용/반환하는 방식 1) 데이터베이스 접근 과정 (1) 웹 컨테이너가 실행되면 데이터베이스와 연결된 Connection 객체들을 미리 생성해 Pool에 저장 (2) 클라이언트 요청 시 Pool에서 Connection 객체를 가져와 데이터베이스 접근 (3) 요청 처리가 끝나면 사용된 Connection 객체를 다시 Pool에 반환 2) 장점 - 매 연결마다 Connection 객체를 생성/제거하는 비용 감소 - 미리 생성된 Conn.. 2020. 6. 24.
[데이터베이스] 옵티마이저(Optimizer) 옵티마이저(Optimizer) 인덱스의 유무, 데이터 분산 또는 편향 정도의 통계 정보를 참조해 여러 실행 계획을 세우고 비용의 연산해 가장 낮은 비용을 가진 실행 계획을 선택하는 DBMS의 핵심 엔진 1) 실행 계획 - SQL에서 요구한 사항을 처리하기 위한 절차와 방법 - 동일한 SQL에 대해 결과를 내는 방법은 여러 가지지만 각 비용은 서로 다름 2) 사용 이유 - DB에서 데이터 조회나 저장에 많은 시간을 소모 - 그러므로 옵티마이저를 통해 쿼리에 소요되는 시간을 줄이고 DB 성능을 향상 3) 한정된 통계 자료로 최적화를 못할 경우? 수동으로 해줘야함 4) 옵티마이저의 목표 a. 전체 처리속도 최적화 b. 최초 응답속도 최적화 5) SQL 최적화 과정 a. 쿼리 수행을 위해 후보군이 될만한 실행 .. 2020. 6. 24.