We will find a way, we always have.

-interstellar

Computer Science 47

[DB] Flyway

Flyway Flyway란 오픈소스 데이터베이스 마이그레이션 툴이다. 다시말해 데이터베이스의 DDL 이력을 쌓아서 관리하는 툴이다. 이를 통해 데이터베이스 형상관리 및 마이그레이션을 할 수 있다. 사용 이유 개발을 진행하다보면 엔티티의 구조가 변경되고 이로 인해 데이터베이스의 스키마도 변경되는 일이 발생한다. 소프트웨어 소스 코드는 Git과 같은 형상관리 툴을 사용하여 버전관리를 진행했다면, 데이터베이스는 그러지 못했다. 일일히 스키마 수정을 위한 DDL을 각 환경별로 모두 실행해주어야 했다. 로컬 개발 환경이나 개발 서버에서는 하이버네이트 설정 중 ddl-auto 에서 create나 create-drop, update 옵션을 사용하여 엔티티 구조를 맞춰 실행이 가능하나, 운영 환경에서는 해당 설정이 불..

[디자인 패턴] 디자인 패턴 (feat: 스프링)

디자인 패턴 Design Pattern 디자인 패턴이란 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책이다. 디자인 패턴의 분류 GoF(Gang of Four)의 디자인 패턴은 크게 생성 패턴, 구조 패턴, 행위 패턴으로 분류된다. 생성 패턴 (Creational Pattern) 생성 패턴의 목적 클래스의 캡슐화를 통해 코드의 유연성과 재사용 가능성을 향상시키는 패턴 생성 패턴의 예 추상 팩토리 (Abstract Factory) 빌더 (Builder) 팩토리 메서드 (Factory Method) 프로토타입 (Prototype) 싱글턴 (Singleton) 구조 패턴 (Structural Pattern) 구조 패턴의 목적 클래스와 객체를 조합하여 더 큰 구조를 만드는 패턴 인터페이스..

[DB] SQL Injection

SQL Injection SQL 인젝션은 악의적인 사용자가 보안상의 취약점을 이용하여, 조작된 쿼리문을 DB에 그대로 전달하여 비정상적 명령을 실행시키는 공격 기법이다. 공격 목적 정보 유출 저장된 데이터 유출 및 조작 원격 코드 실행 일부 데이터베이스의 경우 확장 프로시저를 이용하여 원격으로 시스템 명령의 실행 가능 시스템 명령의 실행은 원격 자원 접근 및 데이터 유출, 삭제 가능 인증 우회 공격의 대표적인 경우는 로그인 폼에서 발생 이때 상위 권한을 가진 사용자의 권한으로 인증 절차를 우회하여 로그인 발생 조건 사용자 입력값의 신뢰성 부족 사용자로부터 입력 받은 값(폼 데이터, URL 파라미터)을 적절히 검증 또는 이스케이프하지 않은 경우 발생 동적 SQL 쿼리 생성 동적으로 SQL 쿼리를 생성하고 ..

[DB] 스키마 (Schema)

스키마 (Schema) 스키마는 데이터베이스의 구조와 제약 조건에 관하여 전반적인 명세를 기술한 메타데이터의 집합이다. 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 뿐만 아니라 데이터들의 제약 조건까지 포함되어 있다. 속성의 데이터 타입을 나타내지는 않는다. 스키마는 시간에 따라 불변인 특징을 가지고 있다. 스키마의 3계층 스키마는 사용자의 관점에 따라 3계층으로 나뉜다. 외부 스키마 (View Schema) 사용자 관점에서의 논리적인 구조이다. 사용자와 데이터베이스 간의 상호 작용을 정의할 수 있는 뷰 레벨이다. 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브스키마라고도 불린다. 때문에 하나 이상의 외부 스키마가 존재할 수 있으며 하나의 외부 스키..

[알고리즘] KMP 알고리즘

문자열 $N$ 와 $H$가 주어졌을 때 $N$에 $H$ 있는지 찾는 문자열 검색 알고리즘에 대해 알아보자. 나이브하게 접근해보면 $N$의 첫문자부터 마지막문자까지 $H$와 하나하나 비교해가면서 일치하는지 판별할 수 있고 해당 솔루션의 시간복잡도는 $O(|N|*|H|)$ 이다. 문자열의 길이가 짧다면 해당 접근방법도 구현도 쉽고 나쁘지만은 않다. 하지만 문자열의 길이가 커진다면 제한시간내에 동작하지 못하게 된다. $N[k...i-1]$과 $H[...i-1]$ 까지는 문자열이 일치하였지만 $H[i]$ 문자에서 일치하지 않는경우 다시 $N[k+1]$ 부터 비교하는 것이 아니라 이미 $H[...i-1]$까지 어떤 문자가 있는지 알고 있으니 보지 않아도 $H[k+1]$이 $H[0]$과 같은지 다른지는 알 수 있지..

[DB] 트랜잭션

트랜잭션 이해 트랜잭션 - 개념 이해 트랜잭션은 데이터베이스의 작업 단위이다. ACID 트랜잭션이 안전하게 수행된다는 것을 보장하기 위해서는 ACID가 만족해야 한다. Atomicity(원자성): 설정된 트랜잭션 범위 안의 내용들이 마치 하나의 작업처럼 모두 성공하거나 모두 실패해야 한다. Consistency(일관성): 모든 트랜잭션은 일관성 있는 DB 상태를 유지해야 한다. 트랜잭션은 DB에서 정한 무결성 제약 조건을 항상 만족해야 한다. Isolation(독립성): 여러 트랜잭션이 있을 때, 각각의 트랜잭션은 다른 트랜잭션의 연산에 끼어들지 못하고 독립적이다. Durability(영구성): 트랜잭션이 성공했다면 그 결과가 항상 기록되어야 한다. 문제가 발생하여도 DB 로그 등을 사용해서 성공한 트랜..

[OS] IPC (Inter Process Communication)

IPC (Inter Process Communication) IPC는 Inter Process Communication의 약자로 프로세스 간의 통신을 의미한다. 프로세스는 각각 독립적으로 실행되기 때문에 이들간의 통신은 커널 영역에서 IPC 설비를 이용해야 한다. 반대로 스레드는 다른 스레드들과 메모리공간과 자원을 공유하기에 프로세스 통신보다 구현이 쉽다. IPC 종류 파이프 Pipe 초기 UNIX 시스템의 IPC 기법으로 메시지 전달 방식의 일종 파일 I/O를 통해 프로세스 간 데이터를 주고 받는다. FIFO 구조를 갖는다. 파이프 생성 시 두 개의 파일 디스크립터(read, write) 가 return 된다. 파이프는 두 개의 프로세스에 대해 단방향 통신을 지원한다. 통신을 위한 메모리공간(버퍼)를 ..

[네트워크] HTTP 응답코드

HTTP 응답 코드 HTTP 응답 코드는 클라이언트의 요청에 대한 서버에서 반환되는 코드를 말한다. 응답 코드를 통해서 요청 결과에 대한 정보를 알 수 있다. 응답 코드는 5개의 분류로 구분된다. 1xx (정보 전달) : 1로 시작하는 응답코드는 서버가 요청을 받았고, 클라이언트는 작업을 진행하라는 의미. HTTP/1.0 이후 거의 쓰이지 않는다. 2xx (성공) : 요청이 서버에서 정상적으로 수신되었음을 나타낸다. 200 OK : 요청이 성공했음을 나타내는 응답 코드. 201 Created : 요청이 성공했고, 자원이 생성되었음을 나타내는 응답 코드. 주로 POST, PUT 요청에 대한 결과. 202 Accepted : 요청은 성공했으나, 서버가 아직 요청을 완료하지 못함. 3xx (리다이렉션) : 클..

[DB] 뷰

뷰 (View) 물리적인 테이블을 근거한 논리적인 가상 테이블이다. 테이블에는 데이터가 있지만 뷰에는 데이터가 없고 SQL만 저장되어 있다. 조인문 사용의 최소화로 사용상의 편의성을 최대화 한다. 뷰 사용시 장단점 장점 논리적 데이터 독립성을 제공한다. 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원한다. 복잡하고 긴 쿼리문의 접근을 단순화시킨다. 접근 제어를 통한 자동 보안을 제공한다. 단점 독립적인 인덱스를 가질 수 없다. ALTER VIEW 문을 사용할 수 없다. 즉, 뷰의 정의를 변경할 수 없다. 뷰로 구성된 내용에 대한 삽입, 갱신, 연산에 제약이 따른다. 뷰 문법 뷰 정의문 --문법-- CREATE VIEW 뷰이름[(속성이름[,속성이름])]AS SELECT문; --고객 테..