전체 글 109

[Flask] 'Flask'란?

1. 플라스크(Flask)란? 플라스크(Flask)란 파이썬을 기반으로 작성된 마이크로 웹 프레임워크(framework) 중 하나로, Werkzeug 툴킷과 Jinja2 템플릿 엔진에 기반을 둔다. 플라스크는 Docs를 읽으면 알 수 있지만, '단순한 업무는 단순해야 한다'라는 설계 원칙이 있다. 이런 원칙 덕분에 비교적 쉽게 이해하고 작성할 수 있다. 이런 측면 때문에 웹 개발 관련해서 가르칠 때도 많은 곳에서 플라스크를 가르치는 것 같다. 하지만 쉬운 만큼 단점도 있는데 그중 하나는 보안 부분에서 비교적 취약하다는 것이다. 플라스크와 그 안의 Jinja2 템플릿에도 당연히 보안을 위해 설계된 구조가 있지만, 때로는 오히려 그런 부분들이 보안 이슈를 일으키기도 한다는 것이다. 이제 막 공부하기 시작한 ..

[SQL] 키(Key)(feat. 유일키, 복합키, 외래키)

키(Key)란, 데이터베이스에서 튜플(또는 레코드, 행) 간 구분을 위한 값 또는 속성이다. 키는 유일키, 복합키, 외래키 등이 있으며, SQL에서 이러한 키를 설정하는 방법은 아래와 같다. 유일키(Primary Key) 테이블에서 튜플(레코드, 행)을 구분 지어주는 고유 식별 값(속성)이다. 유일키로 설정되는 값(속성)은 중복되거나 NULL이 될 수 없다. -- 여기서 테이블명이나 속성명 등은 따옴표가 아니라 백틱(`)으로 감싸준다는 것을 명심할 것 CREATE TABLE `테이블명`{ `속성명1` 타입, `속성명2` 타입, ... PRIMARY KEY(`유일키로 설정할 속성명`) }; 복합키(Composite Key) 두 개 이상의 속성을 활용하여 일종의 묶음으로써 다른 값(속성) 묶음과 구분 지어주..

[SQL] 대표적인 DDL 명령어(feat. CREATE, SHOW, USE, ALTER, DROP)

DDL은 'Data Definition Language'의 약자로, 데이터베이스를 정의하는 언어를 의미한다. 데이터베이스나 테이블 자체에 대해 생성, 수정, 삭제 등의 작업을 수행할 때 사용한다. DDL에서는 대부분 데이터베이스나 테이블 이름, 컬럼 이름 등에 대해 따옴표(', ")가 아닌 백틱(`)으로 감싸주기 때문에 이를 유의하며 쿼리를 사용해야 한다. 생성, CREATE 데이터베이스 또는 테이블을 생성할 수 있는 쿼리문. 데이터베이스나 테이블 이름은 백틱(`)으로 감싸준다. -- 데이터베이스 생성 CREATE DATABASE `MyDB`; -- 테이블 생성 CREATE TABLE `tb_MyTable`( '속성명' 타입, -- 테이블을 생성할 때 속성명은 따옴표로 감싸줘도 됨. '속성명2' 타입, ..

[SQL] 뷰(VIEW) 간단 정리

SQL에서 뷰(VIEW)란, 다른 테이블에서 파생된 테이블을 의미한다. 하지만 물리적으로 데이터가 저장되는 것이 아니라 논리적으로만 존재하며, 뷰를 사용한 질의 시에는 DBMS(DB 관리 시스템, DB 관리자)에서 뷰의 정의를 잘 파악하고 필요시 재작성하여 수행해야 한다. 1. 뷰의 장점 뷰는 SQL에서 아래와 같은 장점을 가진다. 1) 독립성: 테이블 구조가 변경되어도 뷰에서 조회하는 컬럼이나 컬럼명, 테이블명 등이 그대로라면, 뷰를 사용하고 있는 응용 프로그램은 변경하지 않아도 된다. 2) 편리성: 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해두면, 추후 쿼리는 간단한 형태로 표현, 조회 등이 가능하다. 3) 보안성: 사용자의 권한에 따라 열람 가능한 데이터를 다르게 할 수 있다. 권한에 따라 확인 ..

[SQL] JOIN 활용하기

1. JOIN이란? SQL에서 두 개 이상의 테이블을 연결 또는 결합하여 데이터를 출력하는 연산이다. 연산자에 따라 EQUI JOIN, Non EQUI JOIN으로 분류할 수 있고, 사용 형태에 따라 FROM을 활용한 JOIN, Self JOIN 등이 있다. 1) EQUI JOIN - 등가 교집합 - 두 개의 테이블 간에 서로 정확하게 일치하는 경우를 활용하는 JOIN ⇒ '등가 연산자(=)'를 사용한 JOIN - 대부분 기본키-외래키 관계를 기반으로 발생하나, 모든 조인이 그런 것은 아니다. 2) Non EQUI JOIN - 비등가 교집합 - 두 개의 테이블 간에 서로 정확하게 일치하지 않는 경우를 활용하는 JOIN ⇒ '등가 연산자 이외의 연산자(>, >=,

[SQL] 일반 집합 연산(feat. UNION, INTERSECT, EXCEPT)

SQL에서 일반 집합 연산이란, 두 개 이상의 테이블에서 조인을 사용하지 않고, 연관된 데이터를 조회하는 연산이다. 이 글에서는 합집합(UNION), 교집합(INTERSECT), 차집합(EXCEPT)에 대해 정리했다. 단, 일반 집합 연산은 테이블에서 SELECT한 컬럼의 수와 각 컬럼의 데이터 타입이 테이블 간 상호 호환 가능해야 한다. 합집합, UNION UNION은 두 개의 테이블을 하나로 만드는 연산이다. 사용할 컬럼의 수와 데이터 형식이 일치해야 하며, 합친 후에 테이블에서 '중복되는 데이터는 제거'한다. 중복 제거를 위해 UNION은 테이블을 합칠 때, 정렬 과정을 발생시키는데, 올바른 정렬을 위해서는 ORDER BY 구문을 추가로 사용해주는 것이 좋다. 사용 예시는 아래와 같다. SELECT..

[SQL] 서브 쿼리와 서브 쿼리의 분류(feat. 반환, 위치에 따른 분류)

1. 서브 쿼리란? 서브 쿼리는 하나의 쿼리(메인 쿼리) 안에 포함된, 종속되는 또 하나의 쿼리를 의미한다. 알고 있지 못한 기준을 이용한 검색에 유용하고, 메인 쿼리가 실행되기 이전에 한 번만 실행되며, 한 문장에서 여러 번 사용이 가능( ex) 서브 쿼리의 서브 쿼리)하다. 사용 예시와 주의 사항은 아래와 같다. -- 예시. 특정 사원(A)의 급여보다 높은 급여를 받는 사원 조회 -- 1. 기존 메인 쿼리만을 이용한 방법 SELECT * FROM employee WHERE 급여 > 2500; -- 특정 사원의 급여를 알고 있는 상태에서 가능 -- 2. 서브 쿼리를 이용한 방법 SELECT * FROM employee WHERE 급여 > (SELECT 급여 FROM employee WHERE 이름='A..

[Algorithm] 백준 1012번: 유기농 배추 | BFS, 스택으로 구현한 DFS, for ~ else문

문제 출처: https://www.acmicpc.net/problem/1012 1. 결과 1) BFS 이용: 메모리 32124KB, 시간 104ms 2) 스택으로 구현한 DFS 이용: 메모리 29452KB, 시간 88ms 2. 풀이 이 문제는 비교적 평범한 DFS 문제라고 생각한다. 전체 좌표를 탐색하다가 만약 1(배추가 심어진 곳)을 발견하면 이와 상, 하, 좌, 우로 연결된 모든 배추 좌표를 방문하고, 이 전체를 배추흰지렁이 한 마리로 해결할 수 있다. 즉, 방문한 적이 없는 1을 발견하면 필요한 배추흰지렁이의 수를 1만큼 추가하고, 값을 1을 가지면서 해당 위치와 상, 하, 좌, 우로 연쇄적으로 연결된 모든 좌표들을 방문한 상태로 바꾸면 된다. 하지만 이를 재귀로 구현한 DFS를 이용하면 재귀 오류..

[Algorithm] 백준 1655번: 가운데를 말해요 | 최대 힙, 최소 힙 응용

문제 출처: https://www.acmicpc.net/problem/1655 1. 결과 메모리 35032KB, 시간 272ms 2. 풀이 이 문제는 N개의 숫자가 각각 입력될 때마다, 입력된 숫자들 중에서 중간값을 출력해야 한다. 평균값이나 누적 합이 아니기 때문에 각각의 값이 살아서 존재해야 하고, 값이 새로 입력될 때마다 정렬이 수행되어야 중간값을 구할 수 있다. 하지만 값이 추가될 때마다 정렬(sort)이 발생하고, 이런 과정이 N번 반복된다면 시간 복잡도는 커질 수밖에 없다. 이를 더 효율적인 방법으로 풀기 위해서는 최대 힙과 최소 힙을 함께 응용하는 방법이 있다. 우선, 최대 힙과 최소 힙이 의미하는 바를 이해해야 하는데, 최대 힙은 [0] 번째 원소부터 내림차순으로 저장 혹은 출력되는 자료구..

[Algorithm] 백준 11279번: 최대 힙 | 힙큐(heapq) 이용

문제 출처: https://www.acmicpc.net/problem/11279 1. 결과 메모리 35124KB, 시간 152ms 2. 풀이 이 문제는 우선순위 큐를 이용해서 풀 수 있는 문제다. 먼저, 우선순위 큐란 우선순위가 높은 원소가 먼저 출력되는 추상적 자료형을 이야기하는데, 쉽게 보면 자료형에 자료를 저장할 때, 스스로 각 자료에 우선순위를 부여하며 저장하는 것이다. 그리고 자료를 다시 하나씩 출력할 때, 그 우선순위가 높은 것을 먼저 순서대로 출력하는 것인데, 자세한 내용은 아래 링크의 글을 통해 확인할 수 있다. https://chanhuiseok.github.io/posts/ds-4/ 자료구조 - 우선순위 큐(Priority Queue)와 힙(heap) 컴퓨터/IT/알고리즘 정리 블로그 ..