본문 바로가기

전체 글34

SQL 공유 및 재사용 이전 글 - SQL이란? 및 SQL 처리 과정 먼저 해당 포스팅은 오라클(Oracle) 데이터 베이스를 기준으로 작었습니다.^^ 하지만 다른 데이터 베이스(mysql, postgresql, ms...) 또한 아래와 비슷한 구성과 원칙으로 시스템이 설계되어 있으며 각 요소들의 명칭은 다를 수 있습니다.(예를 들어 SGA 같은거?) 라이브러리 캐시 in Shared Pool 오라클 데이터 베이스 시스템은 SGA(System Global Area)라는 매우 중요한 메모리 구성 요소를 포함한다.SGA - 데이터베이스 인스턴스가 작동하는 동안 사용하는 모든  데이터를 포함하고 있다. SGA 메모리 영역은 다음과 같은 요소로 구분되어 있다.1. Database Buffer Cache2. Shared Pool(Lib.. 2024. 5. 27.
SQL이란? 및 SQL 처리 과정 SQL = 구조적, 집합적, 선언적 언어이다.굉장히 어려운 표현이다. 있어보이는 척 하는 말 같다. 누군가 저렇게 설명하면서  "이게 SQL이야. 끝!" 한다면 다시는 그 사람한테 질문 할 일이 없을 것이다.ㅋㅋ 그래서 저 말을 좀 더 쉽게 풀어서 이야기 해 보겠다.SQL이 없는 세상을 상상 해 보라. 즉 "SELECT"문이 없는데 디스크에 저장되어 있는 특정 데이터를 메모리로 가져와서 지금 코딩중인 변수에 저장해야 되는 상황이라고 가정해 보자. 디스크에 접근하기 위한 특정 객체나 메서드가 필요할 것이며 거기서 원하는 정보를 적절한 방법으로 탐색 해 메모리로 가지고 오는 로직을 코딩해야 된다.(재앙이다...) 백엔드 서비스 로직 짜기도 바빠 죽겠는데 지금 디스크에서 메모리로 데이터 가지고 오는 로직까지 .. 2024. 5. 24.
django 배포 시 runserver를 사용하지 않는 이유 보통 django로 웹 애플리케이션 서버(WAS)를 구현할 때 아래와 같은 명령어를 사용하여 서버를 실행 시킨다.// 개발 서버 실행python manage.py runserver 하지만, 사용자들에게 실제로 서비스를 제공 할 서버를 배포할 경우 위 명령어를 통해 django 서버를 실행시키지 않는다. 왜 그런걸까? 왜 아래와 같은 복잡한 짓을 하는걸까?// 1. nginx 세팅// 2. gunicorn을 통해 실행되는 django 서버gunicorn --bind 0.0.0.0:5000 config.wsgi:application//--bind 옵션으로 서버가 호스팅될 포트 설정, 마지막 인자로 gunicorn에 django의 wsgi 객체를 넘김// 3. nginx 실행 이유는 간단하다. runserve.. 2024. 5. 14.
django web AWS EB에서 lightsail로 이전 이번 기회에 회사에서 트래픽이 낮고 앞으로 높아질 일이 없는 서비스들의 시스템 비용을 줄이기로 했다.회사 서비스의 대부분은 aws를 통해 호스팅 되고 있다. 내가 맡은 일은 AWS elastic beanstalk에 배포 되어있는 서비스를 lightsail로 이전하는 것이다.eb와 lightsail의 비용 차이가 트래픽이 낮은 경우에는 거의 10배 정도 난다.(omg...😱) 금방 끝나겠지 했는데... 역시나 내 예상과는 다른 그 이상의 허들이 항상 있기 마련이다..^^1. vpc's private subnet 내부 RDS를 통해 현재 서비스의 DB가 구동되고 있는 상황에 lightsail의 server instance와 VPC 내부에 있는 RDS가 통신 할 방법이 없었다. 결국 lightsail의 값싼.. 2024. 5. 14.
데이터 모델링 - 논리 모델 (이전글: https://godls036.tistory.com/29) 데이터 모델링 - 개념 모델 관계형 데이터 모델링 프리미엄 가이드 Chapter 3.1 개념 모델에 대해서 정리한 글입니다. 개념 모델(주제 영역 모델, 비즈니스 모델) 중요한 데이터를 가장 간단하게 표현하는것이 개념 모델의 목 godls036.tistory.com 관계형 데이터 모델링 프리미엄 가이드 Chapter 3.2 논리 모델에 대해서 정리한 글입니다. 논리 모델(개념 모델의 상세화) 논리모델(Logical Model) 단계에서는 개념 모델을 상세화하는 작업을 한다. 개념 모델링에서 도출된 핵심적인 엔터티에 대해서는 중요 속성 이외의 전체 속성을 도출해야 하고, 개념 모델링 단계에서 도출되지 않은 대부분의 엔터티가 도출돼야 한다.. 2024. 1. 18.
NTTs(Non-transferable Tokens) - SBT(Soulbound Token) 출처: https://e-cryptonews.com/what-are-non-transferable-tokens-ntts/ 위 포스팅을 나름대로 번역한 글 입니다. 생략된 내용이 많아요. Non-transferable tokens(NTTs)는 NFTs(Non-fungible tokens)에서 약간의 업그레이드가 된 것이라고 설명할 수 있다. 가상화폐 와 블체인 시장에서는 계속해서 새로운 고급 기술들을 내어놓고 있다. 해당 산업의 사용률과 생산성을 높일 수 있도록 글로벌 암호화폐 네트워크는 업계에서 현재 당면한 문제들을 해결할 수 있는 솔루션을 찾고자 적극적으로 노력중이다. 근래에 블체인 업계에서는 이해관계자들 사이에서 발생하는 신뢰성 이슈에 대한 문제들과 씨름 중이다. 블록체인에서 디지털 자산에 대한 잘못.. 2024. 1. 16.
데이터 모델링 - 개념 모델 관계형 데이터 모델링 프리미엄 가이드 Chapter 3.1 개념 모델에 대해서 정리한 글입니다. 개념 모델(주제 영역 모델, 비즈니스 모델) 중요한 데이터를 가장 간단하게 표현하는것이 개념 모델의 목적이며 ERD를 사용할 수도 있고 UML을 사용할 수도 있다. 개념 모델은 해당 주제 영역에 존재하는 핵심적인 중요 엔터티와 그 엔터티의 주요 속성이 도출된 모델이다. 즉 핵심적인 엔터티와 그 엔터티 사이의 관계를 도출한 것이다. 기업에 따라서 크게 다르지 않은 일반적인 모델이다. 어떠한 DBMS를 사용하더라도 개념 모델은 달라 지지 않는다. 데이터를 기점으로 구축 될 모든 시스템의 뼈대를 모델링한 것이다.(논리, 물리 모델링 과정을 거치면서 변하지 않을 뼈대를 만들어야 한다.) 개념모델이 견고하면 모두가 편.. 2024. 1. 7.
Django test 수 많아졌을때 테스트 도중에 멈추는 경우 django 버전을 4.2.6으로 업데이트 하고부터 테스트가 진행중 갑작스럽게 중단되는 경우가 발생했다. 항상 그런것은 아니며 경험상 unittest 숫자가 대략 100개가 넘는 경우에 해당 문제가 발생했다. 정확한 원인은 아직 파악못했다. "manage.py test" 명령어를 실행할 때 마다 그리고 테스팅하는 컴퓨터가 달라질 때 마다 테스트가 중단되는 시점이 다른점을 생각했을때 아마 컴퓨터 리소스 점유 때문에 이러한 문제가 발생되는게 아닐까 의심해본다. 원인 파악은 불 확실하지만 그래도 해결 방안은 발견했다. "manage.py test" 옵션 중에 --parallel 옵션이 있다. 테스트를 여러 쓰레드로 나누어 병렬로 진행하는 옵션이다. 각 unittest는 상호 의존성 없이 독립적으로 설계 되었기.. 2023. 11. 1.
다익스트라 알고리즘(Dijkstra), 가중치가 있는 그래프의 최단 경로 다익스트라(Dijkstra) 알고리즘 가중치가 없는 그래프인 경우 BFS를 수행하면 시작점으로 부터 각 정점 까지의 최단 거리를 구할 수 있다. 만약 그래프의 간선이 가중치를 갖는다면 BFS를 이용하여 최단거리를 구하는것은 불가능 하다. 간선의 가중치로 인해 시작점에서 도착점 까지 거치는 간선의 갯수가 해당 경로의 거리가 아니기 때문이다. 거치는 간선의 갯수와는 관계없이 간선의 가중치의 합이 최소가 되는 경로가 최단 경로가 된다. 이와 같은 문제를 해결하기 위한 알고리즘이 여러개 있지만 이 중 그래프에 음수 사이클이 없는 경우 단일 시작점 최단 경로를 구하는 대표적인 알고리즘이 다익스트라 알고리즘이다. 해당 그래프의 최단경로를 구하기 위하여 다익스트라 알고리즘을 구현 하고자 한다면 우선순위 큐와 시작점부.. 2018. 1. 27.
최소 스패닝 트리(MST, Minimum Spanning Tree) 최소 스패닝 트리(MST) 스패닝 트리란 그래프에 모든정점을 연결하는 트리이다. 스패닝 트리 중, 트리를 구성하는 간선들의 가중치의 합이 최소가 되는 스패닝 트리가 최소 스패닝 트리가 된다. 정점의 갯수가 V개인 그래프의 최소 스패닝 트리는 V - 1개의 간선을 갖는다. 최소 스패닝 트리를 구하는 알고리즘은 크루스칼 알고리즘, 프림 알고리즘이 있다. 두 알고리즘에 대해서 설명할 것이다. 크루스칼 알고리즘(Kruskal Algorithm) 크루스칼 알고리즘은 첫번째로 그래프의 간선 리스트를 구성한다. 간선 리스트를 간선의 가중치를 기준으로 오름 차순으로 정렬하고 가중치가 가장 작은 간선부터 스패닝 트리에 해당되는 간선에 추가한다. 이때 사이클이 발생하는 간선은 추가 하지 않고 무시한다. 사이클의 여부는 U.. 2018. 1. 26.
Uva 11456 - Trainsorting Problem Link https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=651&problem=2451&mosmsg=Submission+received+with+ID+20661170 Description of Problem 자동차의 행렬이 주어진다. 행렬에는 자동차의 무게가 저장된어 있다. 이때 자동차를 연결한다. 자동차를 연결하는 제약조건은 앞쪽 즉, 왼쪽의 자동차가 뒷쪽 즉, 오른쪽의 자동차보다 무거워야 된다. 이때 주어진 조건을 만족하는 가장 긴 자동차 행렬의 길이를 구하는 문제다. Algorithm to Solve the Problem 답은 제약조건을 만족하는 가장 긴 행렬의.. 2018. 1. 25.
절단점 및 다리(구하기) 절단점 및 다리(Articulation Point & Bridge) 절단점은 그래프G의 정점 중에서 이를 제거했을때(이때 해당 정점에 인접한 간선들도 같이 제거한다) G가 연결되지 않도록 만드는 정점이다. 절단점이 한개도 없는 그래프를 이중 결합 되었다고 한다. 다리는 그래프 G의 간선 중에서 이를 제거했을때 G가 연결 되지 않게 만드는 간선이다. 이둘을 찾는 문제는 보통 무방향 그래프에 대해서 정의된다. Algorithms to get Articulation Point and Bridge 우선 가장 직관적이지만 약간 비효율적인 알고리즘을 소개 하겠다. 첫째. DFS를 수행하여 그래프 G가 몇개의 컴포넌트로 구성되었는지를 파악한다.둘째. 모든 정점을 한번씩 순회하며 해당정점과 정점에 인접한 간선을 제거한.. 2018. 1. 19.
Fenwick Tree(Binary Indexed Tree, BIT) FenwickTree 펜윅트리는 동적인 누적 빈도수 테이블을 구현할 때 유용한 자료구조이다. 여기서 동적인 누적 빈도수 테이블이란 다음의 예를 보면 쉽게 이해할 수 있다. 학생11명이 시험을 본다. 당연히 11개의 시험 결과과 나온다. 시험점수는 0 ~ 10점 사이이다. 학생들은 0점부터 10점까지의 점수를 받게되며 각 점수당 0 ~ 11명 사이의 학생이 해당점 수를 받을 수 있다. 즉, 0점을 받은학생, 1점을 받은학생, ... 10점을 받은학생을 다더하면 11명이된다. 그렇다면 0점을 받은 학생의 수, 1점을 받은학생의 수, 2점 ..., 10점을 받은 학생의 수를 알때 이에대한 누적합을 구하려고 한다. 여기서 누적합이란. "누적합(0)"은 0점을 받은 학생의 수이다. "누적합(1)"은 0점을 받은 .. 2018. 1. 19.
Uva 11902 - Domanitor Problem link https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=229&problem=3053&mosmsg=Submission+received+with+ID+20625091 Description Problem 위 문제는 시작점이 무조건 0이고, '지배하다'의 뜻만 이해하면 된다. 노드 x가 노드 y를 지배한다면 다음을 만족해야된다. 0 에서 x를 거치지 않고서는 y로 갈 수 없다. 즉, y로가는 모든 경로는 x를 거쳐야 된다. Algorithm to Solve Problem 해당 문제를 해결하기 위하여 DFS(Depth first Search)알고리즘을 이용한다.해당 문제에.. 2018. 1. 18.
Segment Tree Segment Tree 구간 트리는 자료를 이진트리의 형태로 조직화한 트리로서 동적인 구간 질의에 효율적으로 답하기 위한 자료구조이다. 여기서 동적이라는 말은 자료를 갱신해 가면서 질의에 답할 수 있어야 한다는 뜻이다. 구간질의란 데이터가 저장된 자료구조(여기서는 선형적 예를 들어 배열을 다룰 것이다.)에서 임의의 구간이 주어 졌을때 그 구간에 대한 질의를 뜻한다. 예를 들어 구간 최소질의(RMQ, Range Minimum Query)가 이해 해당된다. RMQ는 해당되는 칸의 최솟값의 인덱스를 구하는 문제이다. 다시말해 구간트리를 이용하여 이같은 문제를 효율적으로 해결할 수 있다는 것이다. 구간트리는 이진 트리의 형태로서 모든 노드의 자식은 둘 이하이다. 구간 트리는 각 노드가 해당되는 구간에대한 질의의.. 2018. 1. 18.