분류 전체보기
-
[Golang]슬라이스 용량 주의사항언어/Golang 2017. 1. 18. 09:44
슬라이스는 가변적으로 변하기 때문에 연속된 메모리 공간을 활용합니다. 따라서 용량에 제한이 있습니다.만약 슬라이스를 make([]int, 5)와 같이 선언하면 용량도 5가 됩니다. 여기에 임의의 정수값 하나를 덧붙인다면 용량이 부족하므로 현재 상주하고 있는 메모리 공간이 아닌 더 넓은 메모리 공간으로 이사를 가게 됩니다.이러한 작업이 빈번하게 일어나면 당연히 성능이 저하됩니다. make([]int, 5, 10)과 같이 가능하면 슬라이스를 사용할 때 최대로 사용할 메모리 공간을 미리 설정하는 것이 성능에 도움이 됩니다.
-
[Golang] 현재 폴더 경로 확인언어/Golang 2017. 1. 17. 17:13
import ( "os" ) func main() { path, _ := os.Getwd() )
-
[Linux] sudo 명령어 실행시 PATH 연결이 안될 때 해결 방법서버 2017. 1. 17. 17:11
우분투에서 어떤 프로그램을 어느 경로에서든지 실행시키기 위해서는 아래와 같이 PATH를 추가합니다.$ export PATH=$PATH:{명령어경로} //명령어 경로에 해당 프로그램이 있는 경로를 넣습니다. 그런데 만약 이 프로그램이 sudo 이용해야만 정상 실행된다면 위에서 PATH를 등록해도 되지 않습니다. 왜냐하면 우분투에서 sudo 명령어를 했을 때 현재 유저의 PATH 환경을 가져오지 않도록 기본 설정되어 있기 때문입니다. 아래와 같이 sudo 상태에서 env를 출력해서 해당 프로그램이 PATH에 있는지 확인합니다. 아래에서 보시면 PATH는 기존 계정의 PATH와는 다름을 알수 있습니다. PATH 뿐만 아니라 다른 환경변수도 조금 다를 수 있습니다. 이 PATH는 /etc/visudoers 에서..
-
CSRF란?보안 & 보안 2017. 1. 16. 20:40
CSRF란?사이트 간 요청 위조(Cross-site Request Forgery)웹 어플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법을 의미합니다. 2008년에 발생한 옥션의 개인정보 유출사건에서도 관리자 계정을 탈취하는데 이 방법이 사용되었습니다. 공격의 난이도가 높지 않아 널리 사용되는 방법 중 하나입니다.공격방법이러한 공격을 하기 위하여 해커는 우선 공격을 할 사이트를 먼저 분석합니다. 예를 들어, 나무위키의 경우에 토론은 namu.wiki/topic/ 이라고 시작하며 뒤에 숫자가 붙는 형식인데 이 뒤의 숫자에 패턴이 있습니다.(실제론 토론이 개설된 순서대로 붙는 일련번호..
-
XSS공격이란보안 & 보안 2017. 1. 16. 20:27
XSS공격이란XSS(Cross-site Scripting)는 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말합니다. 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취합니다. 크로스 사이트 스크립팅이란 이름 답게, 자바스크립트를 사용하여 공격하는 경우가 많습니다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많습니다. 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우에 따라서는 메일과 같은 매체를 통해서도 전파됩니다. 물론, HTML을 ..
-
[Python] Tip - tracemalloc으로 메모리 사용 현황과 누수를 파악언어/파이썬 & 장고 2017. 1. 15. 20:19
파이썬, 즉 CPython의 기본 구현은 참조 카운팅(reference counting)으로 메모리를 관리합니다. 참조 카운팅은 객체의 참조가 모두 해제되면 참조된 객체 역시 정리됨을 보장합니다. CPython은 자기 참조 객체가 결국 가비지 컬렉션되는 것을 보장하는 사이클 디텍터(cycle detector)도 갖추고 있습니다.이론적으로는 대부분의 파이썬 프로그래머가 프로그램에서 일어나는 메모리 할당과 해제를 걱정할 필요가 없다는 의미입니다. 즉, 언어와 CPython 런타임이 자동으로 처리합니다. 그러나 실제로 프로그램은 결국 참조 때문에 메모리 부족에 처합니다. 파이썬 프로그램이 어디서 메모리를 사용하거나 누수를 일으키는지 알아내는 건 힘든 도전과제입니다.메모리 사용을 디버깅하는 첫 번째 방법은 내장..
-
[Python] Tip - 최적화하기 전에 프로파일언어/파이썬 & 장고 2017. 1. 15. 20:00
파이썬의 동적 특징은 런타임 성능에서 놀랄 만한 동작을 보여줍니다. 느릴 것이라고 예상한 연산이 실제로는 엄청나게 빠릅니다(문자열 처리, 제너레이터). 빠를 것이라고 예상한 언어늬 특성은 실제로 매우 느립니다(속성 접근, 함수 호출). 파이썬 프로그램을 느리게 만드는 요인이 불분명할 수도 있습니다.가장 좋은 방법은 최적화하기 전에 직관을 무시하고 직접 프로그램의 성능을 측정해보는 것입니다. 파이썬은 프로그램의 어느 부분이 실행 시간을 소비하는지 파악할 수 있도록 내장 프로파일러(profiler)를 제공합니다. 프로파일러를 이용하면 문제의 가장 큰 원인에 최적화 노력을 최대한 집중할 수 있고, 속도에 영향을 주지 않는 부분은 무시할 수 있습니다.예를 들어 프로그램의 알고리즘이 느린 이유를 알고 싶다고 가정..
-
[Python] Tip - 루트 Exception을 정의해서 API로부터 호출자를 보호언어/파이썬 & 장고 2017. 1. 15. 19:22
모듈의 API를 정의할 때 사용자가 던지는 예외는 인터페이스의 일부로 정의한 함수와 클래스 만입니다.파이썬은 언어와 표준 라이브러리용 내장 예외 계층을 갖추고 있습니다. 오류를 보고할 때 자신만의 새 타입을 정의하는 대신 내장 예외 타입을 사용할 가능성이 큽니다. 예를 들어 함수에 올바르지 않은 파라미터가 넘어오면 valueError예외를 일으 킬 수 있습니다.def determine_weight(volume, density): if density
-
[Python] Tip - 모든 함수, 클래스, 모듈에 docstring을 작성언어/파이썬 & 장고 2017. 1. 15. 18:36
파이썬에서 문서화는 언어의 동적 특성 때문에 극히 중요합니다. 파이썬은 코드 블록에 문서를 첨부하는 기능을 기본으로 지원합니다. 대부분의 다른 언어와는 다르게 프로그램 실행 중에 소스 코드에 첨부한 문서에 직접 접근할 수 있습니다.예를 들어 함수의 def 문 바로 다음에 docstring을 직접 작성하여 문서를 추가할 수 있습니다.def palindrome(word): """ Return True if the given word is a palindrome. """ return word == word[::-1] # 함수의 __doc__라는 특별한 속성에 접근하면 파이썬 프로그램 자체에 포함된 docstring을 추출할 수 있음 print(repr(palindrome.__doc__)) # 결과 # '\n ..
-
[Python] Tip - 내장 알고리즘과 자료구조언어/파이썬 & 장고 2017. 1. 15. 18:16
많은 데이터를 처리하는 파이썬 프로그램을 구현하다 보면 결국 사용자가 작성한 코드의 알고리즘 복잡도 때문에 속도가 떨어지는 현상을 보게 됩니다. 이는 보통 파이썬 언어의 속도 때문에 생기는 결과가 아닙니다. 이런 문제는 최적의 알고리즘과 자료구조를 사용하지 않아서 일어났을 가능성이 더 큽니다.속도 이외에도 공통 알고리즘과 자료구조를 사용하면 좀 더 편해집니다.더블 엔디드 큐collections 모듈의 deque 클래스는 더블 엔디드 큐(double-ended queue)입니다. deque는 큐의 처음과 끝에서 아이템을 삽입하거나 삭제할 때 항상 일정한 시간이 걸리는 연산을 제공합니다. 이와 같은 기능은 선입선출(FIFO, First-In-First-Out) 큐를 만들 때 이상적입니다.from collec..