CS

·CS/자료구조
Set이번에 공부해 볼 자료구조는 Set이다. Set은 간단하게 설명하면 집합을 의미한다.그럼 집합에 대해서 조금 살펴보면 임의의 대상이 집합에 속하는지 여부를 명확히 하고 집합 위에는 순서나 연산 따위의 구조가 주어지지 않는다라고 설명한다.여기서 중요한 포인트는 집합에 속하는지 여부와 순서나 연산을 고려하지 않는다는 점이다.집합에 속하는지 여부를 판단하는 것은 하나의 집합 안에 중복된 요소를 허용하지 않는다로 이해할 수 있다.만약 위의 그림과 같이 A라는 집합이 있고 3이라는 숫자를 추가한다고 가정해보자.3이라는 새로운 숫자는 A 집합에 이미 존재하기 때문에 추가될 수 없게 된다.또 다른 부분을 살펴보면 현재 A 집합에 들어있는 숫자들은 어떤 순서를 가지지 않고 여기저기 흩어져 있는 상태로 보인다.이렇..
함수 종속(Functional Dependency)정규화를 알아보기 전에 먼저 함수 종속을 알아야 한다. 함수 종속(FD)이란 한 테이블에 있는 두 개의 속성 집합 사이의 제약을 의미한다.만약 특정 X 값에 따라서 Y 값이 유일하게 결정될 때 X가 Y를 함수적으로 결정한다라고 하고, 반대로 Y가 X에 함수적으로 의존한다고 말한다. 이러한 제약 관계를 함수 종속(FD)라 하며 기호로는 X -> Y로 표현한다.함수 종속을 파악하기 위해서는 테이블의 스키마를 보고 의미적으로 파악해야 한다. 특정 상태에 따라서 파악하게 되면 중복되는 속성 값이 있을 수도 있기 때문에 상태가 아닌 스키마를 보고 함수 종속을 파악한다. 자명 함수 종속(Trivial Functional Dependency)X가 Y를 결정할 때 Y가..
·CS/자료구조
B-트리(B-Tree) B-트리는 이진 탐색 트리(BST)의 일반화한 트리 형태를 의미하며 다른 자가 균형(Self-Balancing) 이진 탐색 트리와 같이 스스로 균형을 유지하는 트리이다.이러한 Self-Balancing을 통해서 데이터를 조회하는데 더 좋은 성능을 가질 수 있게 된다.하지만 B-트리가 Self-Balancing을 한다고 다른 Self-Balancing BST와 같은 것은 아닌데 B-트리의 의미처럼 이진 탐색 트리를 일반화한 것이기 때문이다.이진 탐색 트리는 자식 노드를 최대 2개까지만 가질 수 있다는 특징이 있다. 하지만 그 보다 더 많은 자식 노드를 가지고 싶다면 어떻게 해야 될까?많은 자식 노드를 가지기 위해서는 자녀 노드가 가질 수 있는 값의 범위를 지정해줘야 한다.위의 그림과..
·CS/보안
SQL InjectionSQL Injection 공격은 입력 값 검증의 취약점을 이용한 공격이다.흔히 웹 개발을 하게 되면 특정 입력 값에 대해서 SQL 문을 실행하게 되는데 이러한 점을 이용하여 입력 값으로 SQL 문을 삽입해 의도치 않게 SQL 문을 실행하게 된다.OWASP라는 웹 애플리케이션 보안을 담당하는 비영리 단체에서 4년마다 보안 취약점 TOP 10을 제공하고 있다. 위의 결과를 보면 2021년도에 SQL Injection 공격이 3위에 랭크되어 있다. OWASP Top Ten | OWASP FoundationThe OWASP Top 10 is the reference standard for the most critical web application security risks. Adopti..
·CS/네트워크
프록시(Proxy)프록시는 클라이언트와 서버 사이에서 중개 역할을 하는 중개자로 이러한 프록시를 서버로 이용할 수 있다.프록시 서버는 클라이언트의 요청을 받아 웹 서버에 전달하고, 웹 서버의 응답을 프록시 서버가 클라이언트에 다시 반환한다.프록시 개념을 도입하게 되면 상당히 많은 역할을 부여할 수 있다. 웹 프로젝트를 진행할 때도 프록시 서버를 자주 다뤘는데 내가 가지고 있는 프록시 지식이 아주 적은 부분인 것 같아서 한 번 정리를 해보려고 한다.프록시 서버는 어디에 위치하는지에 따라서 Forward Proxy, Reverse Proxy로 구분된다. Forward ProxyForward Proxy 방식은 클라이언트 앞에 프록시 서버가 위치하는 형태로 클라이언트가 직접 웹 서버와 연결하는 대신, 프록시 서..
·CS/네트워크
SSL(Secure Sockets Layer)최근에 사람들이 주로 사용하는 웹 사이트들은 모두 HTTPS 형식의 통신을 하는 것을 알 수 있다.이러한 HTTPS 통신은 기존의 HTTP 통신에 SSL 프로토콜을 결합한 통신 프로토콜인데 그렇다면 왜 굳이 SSL 프로토콜을 결합해서 통신을 하는 것일까?기존의 HTTP 통신에서는 한 가지 중요한 문제가 있는데 그것은 바로 HTTP 통신으로 데이터를 전달하게 되면 아무런 보안 장치 없이 있는 그대로 데이터를 보낸다는 것이었다.중요한 정보가 담긴 데이터를 보낸다고 했을 때 중간에 공격자가 해당 데이터를 확인하면 어떤 내용인지 바로 확인할 수 있어 굉장히 큰 보안 문제를 야기할 수 있다.이러한 문제를 해결하기 위해서는 데이터를 전달할 때 다른 사람에게 노출되어도 내..
·CS/알고리즘
암호화 알고리즘암호화 알고리즘은 말 그대로 어떤 데이터를 특정 알고리즘을 사용하여 암호화시켜 보안을 높이는 것으로 개발을 공부하면서 중요하다고 생각되는 부분이다.요즘 거의 대부분의 업무나 연락은 PC 혹은 스마트폰으로 처리하게 된다. 중요하지 않은 내용도 주고받지만 공개되서는 안 되는 중요한 내용이나 문서, 파일 등을 다른 사람이나 시스템으로 보내는 일이 자주 생기게 된다.이때 필요한 것이 데이터 암호화로 악의적인 목적을 가진 사람이 정보를 탈취하거나 몰래 훔쳐보는 등의 공격을 방지할 수 있게 해 준다.본격적인 암호화 알고리즘에 대해서 알아보기 전에 간단히 용어를 먼저 살펴보고 정리해 보자.평문(Plaintext): 평문은 해독이 가능한 형태의 데이터 즉, 암호화를 하기 전 원본 데이터를 의미한다.키(K..
·CS/보안
XSS(Cross Site Scripting)최근에 과제 테스트를 본 적이 있는데 만족스럽다고 생각하고 제출했지만 당일에 xss 공격으로 뚫려버렸다.웹 개발자를 희망하면서 이런 취약점도 생각하지 못하고 과제를 제출했다는 게 정말 부끄럽고 내가 많이 부족하다는 것을 다시 깨닫게 되었지만 한편으로는 이번 경험을 계기로 xss에 대해 공부해 보며 한 단계 더 성장할 수 있다는 약간의 기쁜(?) 감정이 들었다.내가 열심히 만든 과제를 바로 뚫어버린 xss란 녀석은 대체 뭔지 살펴보며 어떻게 대응할 수 있는지도 같이 살펴보자.xss 공격이란 공격자가 입력한 악성스크립트가 사용자 측에서 응답하는 취약점을 말한다.공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹 사이트를 변조하거나..
스키마(Schema)데이터베이스에서 스키마(Schema)는 관계형 데이터베이스 내에서 데이터가 어떻게 구성되는지 정의하는 것으로 테이블 이름, 필드, 데이터 유형 및 엔티티 간의 관계와 같은 논리적 제약 조건이 포함된 논리적인 데이터베이스를 의미한다.이러한 스키마를 표현하는 프로세스를 데이터 모델링이라고 하며 데이터베이스의 뼈대를 구축하는데 중요한 메타데이터를 담고 있다. 스키마의 3 계층스키마는 하나의 데이터베이스를 사용자의 관점에 따라 3 계층으로 구분할 수 있다.각 계층에 대해서 하나씩 살펴보자. 외부 스키마(External Schema)외부 스키마는 같은 데이터베이스에 대해서 서로 다른 관점을 정의한 것을 의미한다.외부 스키마의 또 다른 의미로는 프로그래머나 사용자의 입장에서 데이터베이스의 모습을..
인덱스(Index)엄청나게 큰 규모의 데이터에서 원하는 데이터를 찾는다는 것은 쉽지 않다.실제로 몇 GB의 데이터에서 원하는 데이터를 select 쿼리문을 통해 조회하게 되면 엄청 느린 속도로 조회되거나 혹은 아예 동작을 안 할 수도 있다.그렇다면 어떻게 하면 요청된 데이터를 빠르게 조회할 수 있을까?이럴때 사용되는 도구가 바로 인덱스(Index)이다.인덱스라고 하면 가장 많이 나오는 예시가 바로 책이다.책을 한 번이라도 읽어본 사람은 책의 앞부분에 목차가 있다는 것을 알 것이다.이러한 목차는 내가 원하는 정보를 바로 찾을 수 있게 해 주는데 만약 목차가 없었다면 내가 원하는 정보를 페이지 하나씩 넘겨보며 찾아야 될 것이다.또 다른 예시를 들어보면 만약 자바를 공부하기 위해 자바 언어에 대한 책을 구입했..
동시 제어에서 발생하는 이상 현상이전에 동시성 제어에 대해서 알아보았다. 데이터베이스 - 동시성 제어동시성 제어(Concurrency Control)이전에 살펴본 트랜잭션의 개념 중 ACID 속성에서 Isolation(독립성)을 다시 생각해 보자.독립성은 트랜잭션을 병렬적으로 처리하면서 다른 트랜잭션에 영향을 미치지hotechstory.tistory.com트랜잭션을 병렬적으로 처리할 수 있게 되면서 많은 이점을 가져갈 수 있지만 반대로 그에 따른 이상 현상이 발생할 수 있다.대표적인 3가지 이상 현상을 알아보고 그에 따른 고립화 수준(Isolation Level)과 다른 이상 현상까지 알아보자. 대표적인 현상 3가지Dirty readDirty read 어떤 트랜잭션에서 commit 되지 않은 데이터를 다..
동시성 제어(Concurrency Control)이전에 살펴본 트랜잭션의 개념 중 ACID 속성에서 Isolation(독립성)을 다시 생각해 보자.독립성은 트랜잭션을 병렬적으로 처리하면서 다른 트랜잭션에 영향을 미치지 않아야 한다. 하지만 병렬적으로 실행하면 항상 문제가 되는 것이 있는데 바로 공유하고 있는 자원에 대해서 동시에 접근하게 되는 문제이다.또한, 하나의 데이터베이스에서 하나의 작업만 수행할 수 있기 때문에 병렬적으로 처리되는 트랜잭션들을 순차적으로 수행할 필요가 생기게 되고 이러한 것을 제공하기 위해 나온 개념이 스케줄링이다.스케줄링을 통한 동시성 제어는 DBMS 분야에서 중요한 구성 요소이다. 시스템에서 병렬로 실행되는 여러 트랜잭션 간의 일관성, 무결성 및 독립성을 유지하는 데 도움이 되..
트랜잭션(Transaction)트랜잭션(Transaction)은 데이터베이스에서 수행되는 논리적 작업 단위이다.트랜잭션에 대해서 찾아보면 대표적인 예시로 송금 작업이 있다.송금하려는 사람의 계좌에 잔액을 먼저 확인하고 일정 금액을 상대방에게 송금한 후 상대방의 잔액을 조회하는 일련의 작업들을 묶은 것을 트랜잭션이라고 한다.송금 예시는 일반 사용자가 사용하는 입장이고 실제 데이터베이스를 생각해 보자. 실제 데이터베이스에서 이루어지는 작업이라고 하면 읽기, 쓰기, 갱신 등 여러 작업이 있을 것이다.각각의 작업들을 개별적으로 처리하게 된다면 하나의 작업이 완료된 후 다음 작업이 실행되기 때문에 효율적이지 못할뿐더러 중간에 정보가 바뀌는 문제가 발생할 수도 있다. 트랜잭션은 이러한 삽입, 갱신, 삭제 등 여러 ..
ERD(Entity Relationship Diagram)ERD(Entity Relationship Diagram)는 엔티티가 시스템 내에서 서로 어떻게 관련되어 있는지 보여주는 일종의 플로우차트로 엔티티와 엔티티 간의 관계를 그래픽으로 표현한 것이다.그러면 관계나 다이어그램은 알 것 같은데 엔티티는 뭘까?엔티티의 사전적인 의미는 저장되는 데이터를 나타내는 객체 또는 개념이다. 조금 쉽게 말해보자면 표현하고자 하는 대상을 의미한다고 생각하면 될 것 같다.예를 들면 엔티티를 사람, 장소, 사물로 표현할 수 있다. 그리고 각 엔티티마다 속성이라는 것을 갖게 되는데 사람을 예로 들면 사람의 이름, 거주하는 거주지, 전화번호 등 그 사람을 표현할 수 있는 것을 속성이라고 한다.그럼 다시 ERD에서 살펴보자면 식..
키(Key) 방대한 양의 데이터를 관리한다고 생각해 보자. 각 데이터가 정확히 있어야 할 위치에 있는지, 데이터 간의 관계가 유지되는지, 중복이 없는지 등과 같은 것을 어떻게 보장할 수 있을까?내가 생각했을때 데이터가 어디에 위치해 있는지, 어떤 관계를 맺고 있는지, 중복은 없는지 등과 같은 것을 여러 가지로 어떤 표시를 해두면 쉽게 보장할 수 있을 것 같다고 생각한다.이러한 특정 표시는 데이터를 관리할 수 있는 시스템인 DBMS(Database Management System)에서 키(Key)라고 부른다.DBMS에서 키는 데이터의 효율적인 구성 및 검색을 가능하게 하는 필수 구성 요소이다. 앞서 설명했던 것처럼 키를 통해서 데이터의 위치나 관계 등과 같은 것들을 보장할 수 있기 때문이다.또한, 키를 사..