CS

·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에서 키는 데이터의 효율적인 구성 및 검색을 가능하게 하는 필수 구성 요소이다. 앞서 설명했던 것처럼 키를 통해서 데이터의 위치나 관계 등과 같은 것들을 보장할 수 있기 때문이다.또한, 키를 사..
·CS/네트워크
SOP(Same Origin Policy, 동일 출처 정책)동일 출처 정책은 한 출처(Origin)의 문서 및 스크립트가 다른 출처의 리소스와 상호작용하는 방법을 제한하는 브라우저 보안 기능이다. 즉, 동일한 출처에서만 리소스를 공유할 수 있게 제한하는 정책이다. Origin(출처)동일 출처 정책과 이후에 정리할 CORS에도 똑같은 정책이라는 용어가 들어가는데 그렇다면 출처(Origin)는 대체 어떤 것을 의미하는 것일까?출처를 먼저 알아보자면 출처는 프로토콜(스키마), 포트, 호스트로 정의할 수 있다.동일 출처 정책에서 동일 출처에 대한 의미는 URL에서 위의 세 가지(프로토콜, 포트, 호스트)가 모두 동일한 경우 동일한 출처로 간주된다.예를 들어 http://www.example.com/test/te..
·CS/네트워크
REST(Representational State Transfer) APIREST API는 HTTP 요청을 사용하여 데이터에 접근하고 이를 사용 또는 인터넷을 통해 안전하게 교환하는 API 아키텍처이다. 즉, REST API는 두 컴퓨터 시스템이 통신하는 방법이라고 생각해 볼 수 있다.REST는 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌는데 이를 기반으로 대규모의 고성능 통신을 안정적으로 지원할 수 있게 되었다. API(Application Programming Interface)API는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한 것이다. REST 설계 원칙균일한 인터페이스동일한 리소스에 대한 모든 API 요청은 요청의 출처와 관계 없이 동일하게 표시..
·CS/네트워크
로드 밸런싱(Load Balancing)로드 밸런싱은 네트워크 또는 서버에 가해지는 부하(로드)를 분산해주는 기술을 의미한다.로드 밸런싱을 제공하는 서비스 또는 장치(로드 밸런서)는 클라이언트와 네트워크 트래픽이 집중되는 서버들 또는 네트워크 허브 사이에 위치하게 되는데 이를 통해서 부하가 특정 한곳에 집중되지 않고 트래픽을 균형 있게 분산하여 서버나 네트워크 허브들의 성능을 높일 수 있다. 로드 밸런싱의 이점1. 가용성만약 서버가 단 한대로 이루어져있다면 해당 서버가 여러 가지 문제로 인해 다운될 시 사용자는 더 이상 서비스를 이용할 수 없게 된다.하지만 로드 밸런싱을 통해 여러 서버로 부하를 분산하면 특정 서버에서 문제가 발생하여도 전체 서비스에 영향이 적고, 어떤 서버에 문제가 발생하고 있는지 파악..
Hosae905
'CS' 카테고리의 글 목록