분류 전체보기

·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..
·자바
Call By Value와 Call By ReferenceCall By Value는 함수의 인자를 전달할 때 값을 전달하는 방식으로 실제 인자로 전달되는 값은 복사된 형태로 전달되어 호출자의 원래 변수에는 영향을 미치지 않는다.Call By Reference 함수의 인자를 전달할 때 값이 아닌 주소를 전달하는 방식으로 Call By Value와 다르게 호출자의 원래 변수에 영향을 미칠 수 있다.두 방법의 차이는 인자로 값을 넘기냐, 주소를 넘기냐의 차이지만 Java 언어에서는 모든 인자들을 메서드에 전달할 때 값 형식 즉, Call By Value 형태로 전달하게 된다고 한다.여기서 의문인 점은 왜 모든 부분에서 Call By Value를 사용하는 것일까? 그리고 객체를 넘기면 그게 Call By Ref..
·자바
Mutable과 Immutable 객체프로그래밍 언어를 공부하다 보면 값을 변경할 수 있냐, 없냐에 따라서 객체를 구분 짓기도 한다.객체의 값을 변경할 수 있는 것을 Mutable(가변) 객체라고 하며 반대로 값을 변경하지 못하는 것을 Immutable(불변) 객체라고 한다.내가 공부하는 자바 언어 외에도 여러 언어에서 사용되는 개념이기 때문에 확실히 이해하고 넘어가면 좋을 것 같다.밑의 내용은 모두 자바 언어를 기준으로 설명한 내용이다. Mutable(가변 객체)먼저 Mutable(가변) 객체를 살펴보면 객체를 초기화 후 값을 변경할 수 있는 객체를 의미한다. 이러한 가변 객체는 객체가 생성된 후에 필드 혹은 상태와 같은 객체의 값을 변경할 수 있다.이러한 객체의 가변성은 변경 가능한 내부 데이터라는 ..
호이스팅(Hoisting)자바스크립트에서 호이스팅이란 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 import 선언문을 해당 범위의 맨 위로 끌어올리는 것처럼 보이는 현상을 의미한다.개발자가 어느 라인 위치에 코드를 선언해도 실행되기 전 코드가 최상단으로 끌어올려지고 실행되게 된다.이러한 호이스팅이 발생하는 원인은 자바스크립트의 변수 생성과 초기화의 작업이 분리돼서 진행되기 때문이다.그럼 호이스팅이 어떤 상황에서 발생하는지 알아보자. 호이스팅이 발생되는 상황변수의 호이스팅간단한 예제를 통해서 호이스팅이 발생하는 상황을 살펴보자.// 이렇게 코드를 작성하면 1번 코드에서 undefined가 출력된다.console.log(name) // 1var name = 'test'console.lo..
·자바
GC(Garbage Collection)이전에 자바의 JVM에 대해서 알아봤을 때 객체를 생성하게 되면 Heap 영역에 올라가게 된다고 알아봤다. Java - JVM(Java Virtual Machine)JVM(Java Virtual Machine)우리가 사용하는 컴퓨터는 0과 1로 이루어진 숫자만 이해할 수 있다. 하지만 개발할 때 보면 문자, 0과 1이 아닌 숫자들도 많이 사용하게 되는데 이러한 내용들은 컴퓨터가 바hotechstory.tistory.comHeap 영역에 올라온 객체를 참조하는 변수나 필드가 없다면 의미 없는 개체가 되므로 JVM이 GC를 통해 해당 객체를 Heap 영역에서 제거시킨다고 했는데 여기서 GC가 뭔지 알아보자.먼저 GC는 필요 없어진 메모리 객체(Garbage)를 모아(C..
·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에서 살펴보자면 식..
Hosae905
'분류 전체보기' 카테고리의 글 목록