분류 전체보기
-
[Python] Postgresql - SSL error decryption failed or bad record mac 에러 해결법언어/파이썬 & 장고 2017. 2. 14. 16:39
ssl error decryption failed or bad record mac 에러... 이전에 uWSGI에서도 문제가 발생한 적이 있었습니다. 이번에는 PostgreSQL 파이썬 모듈인 psycopg2에서 발생했습니다. 원인을 찾아보니 이러한 에러가 발생한 것은 PostgreSQL쪽이 아니라 ProcessPoolExecutor (병렬처리) 부분이였습니다. 원인DB connection과 cursor를 전역변수로 선언한 다음, 병렬처리를 실행하려 할 때 아래와 같이 함수에서 공통적으로 cursor, conn을 사용하려 하면 위와 같은 에러가 발생합니다.from concurrent.futures import ProcessPoolExecutor def concurrent(list): for i in lis..
-
[DB]Connection PoolDB 2017. 2. 11. 23:19
Connection Pool이란?서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재합니다. 일반적인 Connection Pool을 이용하면 동시 접속자 수를 벗어나게 될 경우 에러(예외)가 발생하게 됩니다. 예외가 발생하면 그 접속자는 더이상 처리를 하지 못하므로, 사이트 이용자는 다시 접속을 시도해야하는 불편함이 있습니다. 이를 해결하기 위해 탄생한 것이 Connection Pool 입니다. Connection Pool이란 동시 접속자가 가질 수 있는 Connection을 하나로 모아놓고 관리한다는 개념입니다. 누군가 접속하면 자신이 관리하는 Pool에서 남아있는 Connection을 제공합니다. 하지만 남아있는 Connection이 없는 경우라면 해당 클라이언트는 대기 상태로 전환시킵니다. 그리..
-
[Java] static 사용 예제언어/Java 2017. 2. 10. 11:13
스타크래프트의 마린(유닛)을 예로 들었습니다.마린의 최고체력은 static을 붙여야겠죠. 현재체력은 붙이면 안되고요. 모든 마린들의 최고체력은 같으니까요. 현재체력은 마린(인스턴스)마다 다르겠죠. 마린의 공격력 역시 static을 붙여야겠죠? 모든 마린의 공격력은 같아야하니까요. 마린의 공격력을 향상시키는 upgradeWeapon()함수가 있다면 이 함수는 static변수인 마린의 공격력을 향상시키는 일을 한다고 가정하고요. 이 함수에는 static을 붙여야 합니다. 이 함수는 static변수에 대한 작업을 하니까요. 만일 마린의 체력을 소모시키는 steamPack()메서드에는 static을 붙일 수 있을까요? 붙일 수 없습니다. 현재체력을 감소시키는 일을 해야하니까... 인스턴스 변수에 대한 작업을 해..
-
[Java] 자바 용어 정리언어/Java 2017. 2. 10. 11:01
클래스(Class)클래스란 어떤 특정 종류의 모든 객체들에 대해 일반적으로 적용할 수 있는 변수와 메소드를 정의하고 있는 소프트웨어적인 설계도(blueprint) 또는 프로토타입(prototype). 실세계에 존재하는 객체들이 가질 수 있는 상태와 행동들에 대해 소프트웨어적으로 추상화(abstraction)한 것추상클래스추상 클래스는 객체가 가지는 특성들을 추상화시켜 놓았을 뿐 아직 구체화 시키지 못한 클래스이므로, 이 추상클래스를 상속하는 하위 클래스에서 좀 더 구체화 시키도록 하는 것입니다. 따라서, 추상클래스를 상위 클래스로 하여 상속하는 하위 클래스는 추상클래스인 상위 클래스에서 완전히 구현하지 못한 부분들을 완전하게 구현해 주어야만 하위 클래스에 대한 객체 생성이 가능하고, 그렇지 못할 경우 하..
-
[Golang] 명명된 함수형 (Named Function)언어/Golang 2017. 2. 8. 20:48
명명된 자료형과 마찬가지로 함수 또한 사용자가 정의할 수 있습니다. type BinOp func(int, int) int두 정수를 넘겨받아 정수 하나를 반환하는 함수형을 BinOp형으로 정의하였습니다. 명명된 함수형도 자료형 검사를 실행합니다. func Test(f BinOp) { fmt.Println(f(3, 4)) }위의 함수를 호출할 때, 아래와 같이 호출한다고 가정합니다. Test(func (a, b int) int { return a+b })Test는 BinOp형을 인자로 받는데, 호출 시에는 그냥 정수 둘을 받ㄱ 정수 하나를 반환하는 함수를 넘겨줬습니다. 위의 코드는 컴파일 에러를 발생하지 않습니다. func(a, b int) int 자료형이 명명되지 않은 자료형이기 때문입니다. 양쪽 모두 명..
-
[Golang] 명명된 자료형 (Named Type)언어/Golang 2017. 2. 8. 20:26
go에서는 자료형에 새로 이름을 붙일 수 있습니다. 사실 rune형은 int32의 별칭입니다. 이런 자료형을 명명된 자료형(Named Type)이라고 합니다. type rune int32 엄밀히 말해서 int32 역시 명명된 자료형에 속합니다. 그러면 명명되지 않은 자료형 (Unnamed Type)은 어떤 것들이 있을까요type runes []rune type MyFunc func() int위와 같이 runes와 MyFunc는 이름 자체만으로 자료형을 지칭하는 것이기에 명명된 자료형이 되고, []rune과 func() int는 이름만으로 자료형을 지칭하는 것이 아니기 때문에 명명되지 않은 자료형으로 구분됩니다. 명명된 자료형과 명명되지 않은 자료형 모두에 type 예약어를 사용하여 새 이름을 붙여줄 수 ..
-
[Golang] 클로저를 사용해 생성기(generator) 생성언어/Golang 2017. 2. 8. 20:15
아래는 클로저를 사용하여 생성기(generator)를 만든 예제입니다.package main import ( "fmt" ) func NewIntGenerator() func() int { var next int return func() int { next++ return next } } func main() { gen := NewIntGenerator() fmt.Println(gen(), gen(), gen(), gen(), gen()) fmt.Println(gen(), gen(), gen(), gen(), gen()) } // 결과 // 1 2 3 4 5 // 6 7 8 9 10NewIntGenerator()는 함수를 반환하는 고계함수입니다. 또한 이 함수가 반환하는 함수는 클로저입니다. 반환하는 함수..
-
[Golang] 고계(고차)함수 (higher-order function)언어/Golang 2017. 2. 8. 19:55
말은 어렵지만 의미는 간단합니다. 함수를 파라미터 또는 인자값에 넣는 것입니다. 아래는 고계함수의 예제입니다.func ReadFrom(r io.reader, f func(line string)) error { scanner := bufio.NewScanner(r) for scanner.Scan() { f(scanner.Text()) } if err := scanner.Err(); err != nil { return err } return nil } func main() { r:= strings.NewReader("bill\ntom\njani\n") err := ReadFrom(r, func(line string) { // 람다함수와 같은 기능 fmt.Println("(", line, ")") }) if ..
-
[Python] MongoDB (pymongo)언어/파이썬 & 장고 2017. 2. 8. 10:45
Mongo DB 용어SQL 용어MongoDB 용어일반 용어데이터베이스(database)데이터베이스(database)테이블(table)콜렉션(collection)행(row)문서(document) / BSON 문서(BSON document)컬럼(column)필드(field)인덱스(index)인덱스(index)테이블 조인(table join)임베디드 문서 및 링킹(embedded documents and linking)주키(primary key)주키(primary key)특정 컬럼을 주키로 지정주키가 _idfield로 자동 설정됨집계(aggregation, 예: group by)집계 파이프라인(aggregation pipeline)Python 내 Mongo DB 모듈 설치$pip3 install pymongo..
-
[Golang] map에서 key값 존재유무 확인언어/Golang 2017. 2. 2. 20:38
Go언어에는 상수 시간에 키의 존재를 확인할 수 있는 집합은 따로 제공하고 있지 않습니다. 여기서 가장 단순한 방법은 맵을 이용하면서 값을 bool형으로 주는 것입니다. 문자열에 중복되어 들어가 있는 글자가 있는지 검사하는 함수를 만드는 예제입니다.package main import "fmt" func hasDupeRune(s string) bool { runeSet := map[rune]bool{} for _, r := range s { if runeSet[r] { return true } runeSet[r] = true } return false } func main() { test := "가나다라" fmt.Println(hasDupeRune(test)) test1 := "가나다라가" fmt.Prin..