분류 전체보기
-
[Golang] 날짜 계산, 포맷 변경하기언어/Golang 2018. 12. 19. 21:30
Go언어에서 날짜계산이나 포맷변경은 극악입니다. 실제로 검색해보면 욕 한바가지 써놓은 것을 쉽게 볼 수 있습니다. 현재날짜 가져오기기본 현재날짜, utc, unix 별로 가져오는 로직입니다.package main import ( "fmt" "time" ) func main() { now := time.Now() nowUTC := time.Now().UTC() nowUNIX := time.Now().Unix() fmt.Println(now) fmt.Println(nowUTC) fmt.Println(nowUNIX) } // 결과 // 2018-12-19 20:42:08.219845 +0900 KST m=+0.000394187 // 2018-12-19 11:42:08.219846 +0000 UTC // 154..
-
[Golang] struct 리스트로 반환하기언어/Golang 2018. 12. 18. 23:39
struct 성질을 까먹고 한참 삽질하다가 정리하던 도중 중요한 부분을 기억했습니다...........GO에서 struct를 선언하는 방식은 여러가지가 있습니다. struct 성질을 먼저 복기한 후, struct를 리스트로 반환하는 코드를 설명하겠습니다.1. 빈 struct 객체 먼저 생성 후 데이터 채우기Article이란 빈 객체를 생성 후 데이터를 삽입하는 코드입니다.type Article struct { Title string } func main() { article := Article{} article.Title = "test" }2. GO 내장함수 new() 사용GO 내장함수인 new() 메소드를 사용하여 생성합니다.type Article struct { Title string } func m..
-
SSL Pinning보안 & 보안 2018. 12. 18. 20:35
ssl pinning은 HPKP (HTTP Public Key Pinning)에서 주로 사용되는 용어입니다. 이미 잘 알려져 있다시피 SSL/TLS 로 이루어진 암호화 통신은 중간자 공격 (Man in the Middle) 에 취약합니다. 특히 요즘에는 여러 보안장비들이 SSL Decryption 기능을 제공하며 이 중간자 공격 (Man in the Middle) 형태로 SSL 및 TLS 세션을 복호화 하여 내용을 검증하도록 되어 있습니다. 이 때 보안장비는 공격자와 마찬가지로 암/복호화에서 사용할 인증서를 임의로 교체하여 중간에서 데이터를 복호화 하여 검증 하도록 구성되어 있습니다.위 예제와 같이 클라이언트 (유저) 는 최종적으로 중간의 보안장비 또는 공격자가 제공한 인증서를 기반으로 암호화 통신을 진..
-
TLS (Transport Layer Security)보안 & 보안 2018. 12. 18. 19:32
TLS란?인터넷에서의 정보를 암호화해서 송수신하는 프로토콜 넷스케이프 커뮤니케이션스사가 개발한 SSL(Secure Sockets Layer)에 기반한 기술로, 국제 인터넷 표준화 기구에서 표준으로 인정받은 프로토콜입니다. 표준에 명시된 정식 명칭은 TLS지만 아직도 SSL이라는 용어가 많이 사용되고 있습니다. 흔히 SSL이라 부르는 것들의 대부분은 TLS입니다. SSL은 POODLE, DROWN 등의 취약점이 발견되어 현재 사용되지 않는다고 보면 됩니다. TLS를 사용해 암호화된 연결을 하는 HTTP를 HTTPS(Secure)라고 하며, 웹사이트 주소는 HTTPS로 시작합니다. 기본 포트 또한 80번이 아닌 443번을 씁니다.TLS와 HTTPS를 혼동하는 경우가 많은데, 둘은 유사하긴 하지만 다른 개념입..
-
[Python] psycopg2 Decimal 타입 제거하여 쿼리결과 얻기언어/파이썬 & 장고 2018. 12. 1. 13:58
SELECT 쿼리를 사용하여 DB의 값을 가져올 때, float, double과 같은 타입일 경우에 psycopg2가 Decimal 타입으로 가져오게 됩니다. 가져온 값을 그대로 다른 DB에 넣을 때 Decimal타입을 변경해줘야 하는데 귀찮으니 애초에 DB 값을 가져올 때, 아래와 같이 제거해서 결과를 출력할 수 있습니다.from psycopg2.extensions import new_type, DECIMAL DEC2FLOAT = new_type(DECIMAL.values, 'DEC2FLOAT', lambda value, curs: float(value) if value is not None else None) psycopg2.extensions.register_type(DEC2FLOAT) conn =..
-
[Python] 전각문자(double byte)를 반각문자(single byte)로 변경언어/파이썬 & 장고 2018. 11. 21. 18:11
먼저 우리가 흔히 아는 특수문자는 반각문자 입니다. (키보드에 존재하는 특수문자 !@#$% 등등) 전각문자는 윈도우 한자 키를 사용하여 생성된 특수문자입니다. (123abc?!등등)전각문자를 사용해도 표현은 되지만 문자 사이의 간격이 반각보다 커서 가독성 문제나 123과 같은 숫자가 전각일 경우, 문자로 인식되는 것등의 문제가 있습니다. 따라서 파이썬에서 전각문자를 반각문자로 변경하는 방법은 아래와 같습니다. # 전각문자 full = '!' # 반각문자 half = '!' # 전각문자와 반각문자의 차이 diff = '0xfee0' # 전각문자 블랭크 blank = '0x3000' # 16진수인 ascii code hex_ascii_full = ord(full) hex_ascii_half = ord(hal..
-
Sorting (Heap, Quick, Merge Sort)공부/자료구조 2018. 9. 30. 23:49
Heap SortHeapTree에서의 Heap을 사용 (Max Heap 또는 Min Heap)따라서 complete binary tree 임Max Heap일 때 parent node는 child node(subtree)의 key보다 무조건 큼binary search tree가 아님Tree의 Heap은 정렬을 위함이 아닌 Insert와 Delete를 위함Max(Min) Heap의 내용은 Heap 에서 확인 1. Max(Min) Heap을 만든 다음 모든 데이터를 넣음2. (Max Heap이라 할 때) 만든 heap tree에서 root node를 지우고 정렬하고자 하는 list에 지운 root node를 넣음3. (Max Heap이라 할 때) heap tree를 재조정해서 루트를 결정한 다음, 다시 루트를..
-
Sorting (Bubble, Selection, Insertion Sort)공부/자료구조 2018. 9. 30. 13:49
대부분 정렬의 시간복잡도는 O(n·logn)와 O(n²) 사이임특별한 경우 O(n)까지 가능 Internal sorting - main memory 에서 일어나는 정렬External sorting - secondary storage(하드디스크) 에서 일어나는 정렬Bubble Sort이웃되는 값끼리 비교하여 자리를 변경해나가는 방식기본적으로 O(n²). 이미 정렬이 되어 있을 경우는 O(n)예시예시2Selection Sortarray에서 가장 큰 수를 찾은 다음, 찾은 수를 어레이의 맨 끝인 n자리에 놓는다.다음 큰수를 찾은 다음, 어레이의 n-1자리에 넣는다. 이때 찾은 수와 해당 자리에 있는 수의 자리를 바꾼다.O(n²)의 performance가 나옴 bubble sort와 똑같이 O(n²)이지만 bu..
-
트리 탐색 방법 (Tree traversal)공부/자료구조 2018. 9. 28. 13:56
PreorderVisit the root.Visit the left-subtree.Visit the right-subtree.InorderVisit the left-subtree.Visit the root.Visit the right-subtree.PostorderVisit the right-subtree.Visit the left-subtree.Visit the root.Breadth First Search(BFS) or Level order traversalsstarts at the tree root and explores the neighbor nodes first, before moving to the next level neighbors.Depth First Search(DFS)예시
-
Spanning Tree (Prim 알고리즘, Kruskal 알고리즘, Dijkstra 알고리즘)공부/자료구조 2018. 9. 26. 18:34
Spanning TreeN개의 노드들의 connected graph에서 얻을 수 있음depth-first traversal 또는 breadth-first traversal 을 통해 확인N개의 node와 N-1개의 edges로 된 Treecycle은 그래프로부터 제거됨 - 한번 방문한 노드는 다시 방문하지 않기에 cycle이 생길 수 없음한개 이상의 spanning tree는 같은 그래프에서 구할 수 있음추가정보그래프가 connected 일 때, dfs나 bfs는 암묵적으로 그래프 G의 edge를 두개의 집합으로 분리T(for tree edges): edge의 집합으로 사용되거나 search 도중에 방문N(for nontree edges): 남아있는 edge의 집합T의 edge는 G의 모든 vertex들을..