import threading import time import logging # 스레드 실행 함수 def thread_func(name): logging.info('sub-thread %s: starting', name) time.sleep(3) logging.info('sub-thread %s: finishing', name) if __name__ == "__main__": format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefmt='%H:%M:%S') logging.info('main-thread : before creating thread') # 함수 인자 확인 x = thread..
GIL이란? Python(bytecode) 을 Cpython 가 실행함. 실행 시 여러 thread 사용할 경우 단일 스레드만이 python object 만이 접근하게 제안하는 mutex 멀티 스레드를 사용해도 단 하나의 object 만이 접근이 가능하도록 함 Thread를 안전하게 사용하기 위함 GIL(Global Interpreter Lock)이 있지만 Python을 써도 되는 이유 (1) 단일스레드로도 충분히 빠르다. (2) 멀티 프로세스로 하는 작업을 만들어서 사용하면 되기 때문에 제약이 된다고 보지 않음 - numpy 등 대용량 라이브러리 등도 멀티 프로세스로 사용하기 때문에 문제가 되지 않음 (3) 병렬 처리는 Multiprocessing, asyncio 선택지등 다양한 방식 사용 가능 (4)..
(1) 프로세스 - 운영체제 -> 할당 받는 자원 단위 (실행 중인프로그램) - CPU동작 시간, 주소공간(독립적) - Code, Data, Stack, Heap -> 독립적 - 최소 1개의 메인 스레드를 보유함 - ex) 하나의 크롬 프로세스에서 여러가지 새탭을 통해서 스레드를 사용 - 파이프, 파일, 소켓 등을 사용해서 프로세스간 통신 - Context Swithing (2) 스레드 - 프로새스 내에서 실행 흐름 단위 - 프로세스 자원 사용 - Stack 만 별도로 할당하고 나머지는 공유(Code, Data, Heap) - 메모리 공유(변수 공유) - 한 스레드의 결과가 다른 스레드에 영향을 끼치 수 있음 - 동기화 문제는 정말 주의해서 코드를 작성해야함 (디버깅이 어려움) (3) 멀티 스레드 - 한..
코드잇의 자바스크립트 객체지향 기본기 강의를 듣고 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 코드잇 자바스크립트 객체지향 기본기 1. 객체와 클래스 01. 객체 지향 프로그래밍이란 ? 객체 : 객체의 상태를 나타내는 변수와 함수가 있음 객체 지향 프로그래밍 : 프로퍼티와 메소드로 이루어진 각 객체들의 상호 작용을 중심으로 코드를 작성하는 것 절차 지향 프로그래밍 : 변수와 함수를 가지고 작업의 순서에 맞게 코드를 작성하는 것 02. 1-1. object literal Object Literal : 객체를 나타내는 문자열 index.html index.js console.log('test'); const user = { // property 속성 : 객체의 상태를 담음 email: 'chris@go..
코드잇의 자바스크립트 웹 개발 기본기 강의를 듣고 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 자바스크립트 웹 개발 기본기 3. 비동기 실행과 Promise 객체 01. fetch 함수와 비동기 실행 then 메소드로 등록했던 callback 들이 response가 오면 출력됨 then 메소드로 등록만하고, 그 아래 코드가 실행됨 비동기 실행 : 시작된 작업이 완료되기 전에 다음 코드를 실행하는 것 동기 실행 : 시작한 작업을 다 처리하고 나서야 다음코드를 실행하는 것 console.log('Start'); fetch 함수(리퀘스트 보내기 및 콜백 등록) console.log('End'); 리스폰스가 오면 2. 에서 then 메소드로 등록해뒀던 콜백 실행 console.log('Start!'); f..
코드잇의 모던 자바스크립트 강의를 듣고 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 코드잇 모던 자바스크립트 1. 모던 자바스크립트 이해하기 현시점에서 사용하기 적합한 범위 내에서 최신 버전의 표준을 준수하는 자바스크립트 ECMAScript의 첫 버전은 1997년에 등장했지만, 매년 새로운 버전들을 출시하진 않았음 하지만 여섯 번째(ES6)부터는 매년 새로운 버전들이 출시되면서 ECMAScript의 버전을 부를 때 연호를 붙여 ES2015(ES6), ES2016(ES7) ****으로 부르게 되었음 자바스크립트 개발자들 사이에서는 ES2015 이후에 매년 출시된 버전들을 통칭하기 위해서 ES2015+ 혹은 ES6+라는 용어를 사용 ES6부터는 연호를 사용해서 ES2015, ES2016이라고도 부른다 ..
파이썬의 견고한 객체지향 프로그래밍 강의를 듣고 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 견고한 객체지향 프로그래밍 1. 단일 책임 원칙 01. 견고한 객체 지향 프로그래밍을 위한 SOLID 원칙 단일 책임 원칙 (Single Responsibility Principle) 개방 폐쇄 원칙 (Open-Closed Principle) 리스코프 치환원칙 (Liskov Substitution Principle) 인터페이스 분리 원칙 (Interface Segregation Principle) 의존 관계 역전 원칙 (Dependency Inversion Principle) 객체 지향 프로그래밍으로 만드는 프로그램의 크기가 커질수록 SOLID 원칙을 잘 지키는 것이 중요하다. 아무리 코드가 많은 프로그래밍..
코드잇의 객체 지향 프로그래밍의 4개의 기둥 강의를 보고 정리한 내용입니다. 문제될 시 삭제하겠습니다. 객체 지향 프로그래밍의 4개의 기둥 1. 추상화 01. 추상화 추상화란 ? 프로그래머들이 특정 코드를 사용할 때 필수적인 정보를 제외한 세부사항을 가리는 것 03. 추상화는 이때까지 쓰고 있었다. 변수, 함수, 리스트 04. 추상화 잘하기 : 이름 잘 짓기 어디에 쓰는 클래스이고 어떻게 사용할지 직관적으로 알 수 있도록 05. 추상화 더 잘하기 : 문서화하기 문서화 (docstring) : 함수 선언 아래에 """ 함수에 대한 간략한 설명 """ help(class name) 함수를 사용하면, docstring 문서가 나옴 09. 여기서 잠깐! 파이썬의 type hinting → 로 return 될 값..
코드잇의 객체지향 프로그래밍이란? 강의를 보고 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 객체 지향 프로그래밍이란? 1. 객체 지향 프로그래밍 객체 : 속성과 행동을 떠올릴 수 있는 모든 존재 객체지향 프로그래밍이란 : 프로그램을 여러 개의 독립된 객체들과 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법 프로그램에 어떤 객체들이 필요할지 정한다. 객체들의 속성과 행동을 정한다. 객체들이 서로 어떻게 소통할지 정한다. 01. 클래스와 인스턴스 클래스(속성과 행동을 가진 틀)로 객체(인스턴스)를 만든다. 02. 인스턴스 변수 인스턴스 변수는 사용하기 전에 무조건 먼저 선언해야 함 class User: # 클래스 pass user1 = User() # 객체 생성 user1.name = '김이름'..
코드잇의 파이썬 모듈과 패키지 강의를 듣고 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 파이썬 모듈과 패키지 1. 모듈 01. 모듈이란 ? 기능상 성격이 비슷한 또는 연관성 있는 변수와 함수들이 조립된 파일 02. 모듈 사용하기 # area.py def circle(radius): return 3.14 * radius * radius def square(radius): return 3.14 * radius * radius area.py 와 run.py가 같은 폴더 안에 위치할 때 아래와 같이 import 파일명으로 모듈을 불러와서 함수를 사용 # run.py import area print(area.circle(2)) print(area.square(9)) print(area.PI) 03. 모듈을 ..
코드잇의 인터랙티브 자바스크립트를 보면서 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 인터랙티브 자바스크립트 1. 인터랙티브 자바스크립트 시작하기 03. id로 태그 선택하기 // id로 태그 선택하기 // 존재하지 않는 id를 선택하면 null로 나옴 document.getElementById('id'); 05. class로 태그 선택하기 // class로 태그 선택하기 document.getElementsByClassName('class'); // class로 태그 선택하기 const test = document.getElementsByClassName('class'); console.log(test[1]); for (let value of test) { console.log(value); } ..
프로그래밍과 데이터 in JavaScript 해당 내용은 코드잇의 '프로그래밍과 데이터 in JavaScript' 를 보고 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 01. 객체 01. 객체와 프로퍼티 객체는 {} 로 만들 수 있음 property name 작성 시 따옴표로 감싸지 않을 수 있지만, 그러려면 아래의 조건을 만족해야 함 첫번째는 글자는 반드시 문자, 밑줄(_), 달러기호($) 중 하나로 시작해야 함 띄어쓰기 금지 하이픈(-) 금지 { 키 : value, property name : property value } 03. 객체에서 데이터 접근하기 let codeit = { name: '코드잇', 'born Year': 2017, isVeryNice : true, wortCourse: n..
해당 내용은 코드잇 '프로그래밍 핵심 개념 in javascript'을 보면서 정리한 내용입니다. 문제가 될 시 삭제하겠습니다. 1. 자료형 01. 숫자형 // 나머지 console.log(7 % 3); // 1 // 거듭제곱 consloe.log(2 ** 3); // 8 // 덧셈 console.log(1 + 8); // 9 // 뺄셈 console.log(6 - 7); // -1 // 곱셈 console.log(2 * 2 * 2); // 8 // 나눗셈 console.log(5 / 2); // 2.5 // 사칙연산에 맞게 계산 됨 console.log(2 + 3 * 2); // 8 console.log((2 + 3) * 2); // 10 03. 문자열 기본 // 문자열 // 문자열은 같은 따옴표로 작..
HTTPS 사용 이유와 동작방식 1. HTTPS를 사용하는 이유 1-1. 웹사이트에서 주고 받는 정보를 암호화합니다. HTTP는 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않습니다. HTTP는 정보를 단순 텍스트로 주고 받기 때문에 네트워크에서 전송 신호를 인터셉트 하는 경우 원하지 않는 데이터 유출이 발생할 수 있습니다. 예를들어, 네트워크를 공동으로 쓰는 PC방, 회사, 학교 등에서 간단한 스니핑툴로 로그인, 회원가입, 예약 등의 개인정보를 입력할 때 정보를 훔쳐 볼 수 있습니다. 하지만 HTTPS 는 통신 시에 정보를 암호화해주기 때문에, 아래 그림에서와 같이 해커가 중간에 정보를 훔쳐보아도 암호화되어 있어 정보를 알 수 없습니다. 1-2. 접속하는 사이트가 신뢰할 수 있는 사이트인지를 알려..
1. Forward Proxy, Reverse Proxy 란? 1-1. Forward Proxy 란? 일반적으로 대학 및 기업과 같은 대규모 조직에서 내부적으로 사용하며 아래와 같은 것들을 수행한다. 네트워크의 사전 설정된 정책에 따라 아웃바운드 트래픽을 규제 (예를들어, 회사 내부직원이 회사 컴퓨터로 특정 사이트에 접속할 때 접속을 막는다.) 직원이 특정 웹사이트를 방문하지 못하도록 차단 직원 온라인 활동 모니터링 클라이언트의 IP 주소를 위장하고 들어오는 악성 트래픽이 원본 서버에 도달하지 못하도록 차단 외부 사이트 콘텐츠를 캐싱하여 사용자 경험 개선 1-2. Reverse Proxy 란? 다수의 서버를 Reverse Proxy 서버 하단부에 위치시켜 두고, 특정 조건(일치하는 도메인 혹은 주소)에 ..
Nginx란? 기본 설정 파일 및 사용 방법 1. Nginx 란? Nginx는 가벼운 고성능의 웹서버로서 높은 트래픽 처리를 위해 만들어졌습니다. 예를들어 Apache의 경우는 접속마다 Process 또는 Thread를 생성하는 구조로, 1만명이 동시접속을 하면 그 만큼 Process or Thread 생성비용이 들 것이고 대용량 요청을 처리할 수 있는 웹서버로서의 한계를 드러냅니다. 하지만 Nginx는 한 개 또는 고정된 프로세스만 생성 하고, 그 프로세스 내부에서 비동기 방식으로 효율적으로 작업을 처리합니다. 따라서 동시 접속 요청이 많아도 Process 또는 Thread 생성 비용이 존재하지 않아서 높은 트래픽 처리에 유리한 웹서버입니다. 2. Nginx 기본 설정 파일 위치 기본 설정 파일 명 :..
Swap 이란? Swap 설정방법 Swap 이란? swap 이란 메모리가 부족할 경우 하드 디스크의 여유 공간을 활용하여 RAM 처럼 사용할 수 있도록 만드는 것을 말합니다. 디스크를 SSD 를 사용한다고 하더라도, RAM보다는 속도가 느리므로 swap 을 사용하게 되면 처리속도가 떨어집니다. swap 영역은 메모리가 부족한 경우 하드디스크에서 사용하게 되므로, 이 때문에 불필요한 I/O가 생겨 시스템의 성능이 저하될 수 있습니다. swap 영역의 크기를 동적으로 조정할 수 없어 하드디스크의 공간을 차지하게 됩니다. swap영역을 사용한다는 것은 시스템의 메모리가 부족하다는 의미이며, 이는 프로세스의 메모리 누수이거나 실제로 필요한 메모리가 부족하다는 뜻입니다. 메모리의 사용량이 시간이 지남에 따라 증가..
Redis cannot allocate memory 1. 에러 상황 12:M 27 Aug 16:20:23.500 * Starting BGSAVE for SYNC with target: disk 12:M 27 Aug 16:20:23.500 # Can't save in background: fork: Cannot allocate memory 12:M 27 Aug 16:20:23.500 # BGSAVE for replication failed 12:M 27 Aug 16:20:29.083 * 1 changes in 900 seconds. Saving... 12:M 27 Aug 16:20:29.084 # Can't save in background: fork: Cannot allocate memory 12:M 2..
Rabbitmq memory resource limit alarm 1. 에러상황 ********************************************************** =WARNING REPORT==== 08-Aug-2021::01:45:05 === memory resource limit alarm cleared on node 'rabbit@rabbitmq' =WARNING REPORT==== 08-Aug-2021::01:45:05 === memory resource limit alarm cleared across the cluster =WARNING REPORT==== 08-Aug-2021::01:45:06 === memory resource limit alarm set on node..
Fluentd 설치방법 (서버에 설치, docker로 설치) Fluentd 설치 방법을 두가지 버전으로 나누어서 설명하도록 하겠습니다. 첫번째는 ubuntu 20.04 서버에 직접 설치하는 방법 두번째는 도커로 서버에 설치하는 방법입니다. 두가지 방법 중 편한 방법으로 사용하시면 됩니다. 1. 서버에 직접설치 방법 공식 문서에 따르면 Fluentd 를 설치하기 전에 권장사항을 따를 것을 권고합니다. 참고 : https://docs.fluentd.org/installation/before-install NTP 설정 (NTP 데몬 설정, 정확한 현재 타임스탬프 설정) 최대 File Descriptors 로 늘리기 네트워크 커널 매개변수 최적화 1-1. File Descriptors 확인 $ ulimit -n..
Fluentd란? Fluentd 사용법 1. Fluentd 란 ? 로그를 수집할 수 있는 로그 수집기 입니다. Fluentd에서는 서버에 쌓이고 있는 log 파일을 지정하여 로그를 수집하도록 할 수 있습니다. 또는 http, tcp 통신하여 Fluentd로 직접 전송하는 방식도 사용할 수 있습니다. 이렇게 Fluentd에서 수집한 로그를 가공(로그에 값 추가 혹은 삭제, 필터 등) 할 수 있으며, 이를 파일이나 데이터베이스로 저장하거나 전송할 수 있습니다. 2. Fluentd 사용방법 Fluentd는 Input, Parser, Engine, Filter, Buffer, Ouput, Formatter 7개의 컴포넌트로 구성이 되어있습니다. 7개의 컴포넌트중 Engine을 제외한 나머지 6개는 플러그인 형태..
item-img 클래스 클릭 시 색상 변경 되고, python flask api 를 통해 DB 에 update, delete 하는 코드 1. python flask api method 생성 @app.route('/post/add_items', methods=['POST']) def add_items(): data = json.loads(request.data) user_id = data.get('user_id') subject = data.get('subject') items = data.get('items') user_db = db.MongoDB('user') user_db.add_item(user_id, subject, items) return items @app.route('/delete/delet..
MongoDB Docker 백업하기 MongoDB 를 백업하려면 mongodump 명령어를 사용해야 한다. MongoDB 도커에 exec 로 접속해서 mongodump 명령어를 사용할 수 있다. 매번 접속해서 명령어를 날리기 불편하므로, 도커 컨테이너 밖에서 사용할 수 있는 sh -c 명령어를 통해서 /bin/bash 로 도커 안으로 접속하지 않고도 사용할 수 있도록 명령어를 작성했다. 해당 명령어를 crontab 에 작성해놓아도 잘 실행된다. 1. mongodb volume 설정 docker run 컨테이너 실행 시 -v 옵션으로 volume 설정을 한다. mongodump 결과물을 저장하고 싶은 곳으로 설정한다. ex) -v /backup/tmp:/backup/tmp 2. docker exec 명령어..
1. __dict__ 용도 클래스 객체의 속성 정보를 확인하기 위해 사용 객체가 가진 여러가지 속성들을 딕셔너리 형태로 편하게 확인할 수 있다. 2. __dict__ 활용 방법 객체의 변수를 dict형태로 변경할 수 있다. dictionary 형태로 만들어 두면, 편하게 속성 값들을 가져올 수 있다. class Test: def __init__(self, name): self.name = name self.test_dict = {'a':1, 'b':2} self.test_list = ['1','2','3'] # Test 객체 생성 test_object = Test("minimi") # __dict__ 메소드를 이용해보면 type이 dict인 것을 확인 할 수 있다. print(type(test_objec..
php http://phptester.net/ $this 의 의미는 현재 자신을 나타내는 표현이고, → 의 의미는 객체 내의 속성이나 메소드를 가르킬 때 사용합니다. $this→shape은 현재 객체 내의 shape 이라는 속성을 가르킵니다. Chapter 1 ~ 20 Chapter 1. 오리엔테이션과 첫걸음 프린트 출력 예제 1-2) 데이터를 제출하는 HTML 폼 이름: 인사 예제 1-3) 동적데이터 $_POST에는 폼 매개변수로 제출된 값이 담긴다. 1-4) 폼 출력 1-5) 환영인사와 폼 출력 1-6) 형식화된 숫자 출력 출력 값 한국의 대략적인 인구: 50,801,405 1-7) 데이터베이스에서 정보를 가져와 표시하기
세탁특공대 자세한 이용 후기 및 방법 제가 사는 지역에서 세탁을 맡기러 가려면 15분정도를 걸어가야하는데, 가까운데가 없나 찾아보다가 세탁특공대를 발견하게 되었습니다. 세탁특공대가 어플이라서 반신반의 했습니다. 정말 신청하면 오는건가.. 하면서 보았는데 첫 주문은 단 1장도 무료!라고 써있어서 신청을 했습니다. 신청하는 것도 너무 간단합니다. 몇번의 클릭과 날짜, 시간을 지정하면 끝 ! 신청이 완료되면 아래와 같이 메세지를 받을 수 있습니다. 메세지를 받은 어플 안에서 문의도 할 수 있어서 매우 편리합니다. 접수가 너무 쉬워서 접수가 잘 된 것이 맞는지 확인문의를 보냈는데, 1분만에 대답이와서 안심할 수 있었습니다. 아쉬웠던 점은 수거,반납 시간이 4시간으로 너무 길다는 것.. 공동현관이 아닌 집은 문고..
애플워치를 구매한지 세달이 조금 넘어가고 있습니다. 구매하기 전에는 내가 과연 잘 쓸까? 라는 의문을 가지고 샀는데, 굉장히 만족하고 있습니다. 애플워치를 유용하게 사용하고 싶어서, 이것저것 어플들을 많이 사용해보았습니다. 그 결과 시간관리, 습관관리, 운동을 할 때 매우 유용하게 사용하고 있습니다. 제가 직접 사용해보고, 지금까지도 계속 쓰고 있는 유용한 어플들을 공유하려고 합니다. 작성하다보니 내용이 길어져, 이번 블로그 포스팅에는 유료로 사용하고 있는 어플을 소개하고 다음 포스팅에는 무료 어플을 소개하고자 합니다. 시간, 습관 관리 유용한 애플워치 어플 추천 4가지 Things 애플워치를 시계를 쳐다보았을 때 , 내가 오늘 해야할 일이 무엇인지를 알려주면 좋을 것 같았습니다. 그래서 그런 어플이 있..
inflearn 의 Start Google Angular.js 앵귤러 과정 강좌를 보고 정리한 내용입니다. https://www.inflearn.com/course/angular-js 지시자란 ? AngularJS 애플리케이션에서 HTML 문서 구성을 위해 필요한 다양한 설정과 기능들을 의미합니다. ng-app : Angular JS 애플리케이션에 대한 초기 설정 ng-init : Angular JS 애플리케이션에서 사용할 데이터 설정 ng-model : HTML에서의 입력 요소들을 컨트롤 하기 위한 지시자 ng-repeat :지정된 태그를 배열에 들어 있는 요소 만큼 반복하여 출력한다. AngularJS directive directive 함수를 통해 지시자를 만들 수 있으며 새롭게 만든 지시자를 이용..
inflearn 의 Start Google Angular.js 앵귤러 과정 강좌를 보고 정리한 내용입니다. https://www.inflearn.com/course/angular-js angularjs table 예제 app.controller 에서 선언한 data1 변수 내의 값을 로 접근합니다. ng-repeat 은 for 문으로 생각하면되고, obj.name, obj.age 로 data1 에서 선언한 변수에 접근할 수 있습니다. 태그는 테이블의 행을 만드는 html 태그로 태그 내에 열을 만드는 태그에 obj.name, obj.age 데이터를 출력하면서 테이블을 만드는 예제입니다. {{$index + 1}} {{obj.name}} {{obj.name}} {{obj.age}} {{$index + 1}..
inflearn 의 Start Google Angular.js 앵귤러 과정 강좌를 보고 정리한 내용입니다. https://www.inflearn.com/course/angular-js angular js scope와 rootscope 의 차이 angularjs scope란? scope 는 controller를 적용한 태그 내에서 사용할 변수나 함수를 저장해 놓을 수 있는 객체입니다. angularjs rootscope란? rootScope 는 문서 전체에서 사용할 변수나 함수를 저장해 놓는 객체입니다. $rootScope 를 지정한 app.run() 함수는 angularjs module 객체가 생성되면 실행되는 함수입니다. 따라서 app module 객체가 생성되면 문서 전체에서 사용할 수 있는 data..