[Python] 문자열 자료형 (문자열에 곱하기)
문자열 자료형 특징 문자열도 곱하기가 된다. print("안녕") >>> 안녕 print("ㅋ"*9) >>> ㅋㅋㅋㅋㅋㅋㅋㅋㅋ print("안녕"*9) >>> 안녕안녕안녕안녕안녕안녕안녕안녕안녕
키자드에 등록된 총 721개의 포스트를 확인하실 수 있습니다.
문자열 자료형 특징 문자열도 곱하기가 된다. print("안녕") >>> 안녕 print("ㅋ"*9) >>> ㅋㅋㅋㅋㅋㅋㅋㅋㅋ print("안녕"*9) >>> 안녕안녕안녕안녕안녕안녕안녕안녕안녕
Boolean 자료형 불리언 타입은 파이썬에서는 앞 첫 글자가 대문자로 해야된다. true, false (X) True, False (O) print(5 > 10) >>> False print(5 < 10) >>> True print(True) >>> True print(False) >>> False print(not True) >>> False print(not False) >>> True print(not (5 > 10)) >>> True
변수(Variable) 출력하는곳에 변수를 넣기 위해서는 감싸여진 곳에 큰(작)은 따옴표를 끊어준 후 + 로 이어 쓸 수 있다. (다른 방법으로는 쉼표(,)도 가능하다.) name = "홍길동" print("안녕하세요." + name + " 입니다.") >>> 안녕하세요. 홍길동 입니다. name = "홍길동" print("안녕하세요.", name, " 입니다.") >>> 안녕하세요. 홍길동 입니다. 문자열(STR)이 아닌 다른 타입의 경우 큰(작)은 따옴표에서는 문자열로 출력하기 위해서 "str()" 감싸야 된다. 다만, 쉼표는 문자열 선언(str())을 하지 않아도 된다. 큰(작)은 따옴표 name = "홍길동" age = 20 print("안녕하세요." + name + " 입니다.") print("나이는 " + str(age) + "세 입니다.") >>> 안녕하세요. 홍길동 입니다. >>> 나이는 20세 입니다. 쉼표(,) print("안녕하세요.", name, " 입니다.")
초기 설정하기 # MariaDB 초기 설정 "Set root password"에서 엔터 후 사용할 비밀번호 2번 입력 후 모두 엔터 입력해주시면 됩니다. 최초 계정에는 비밀번호가 없기 때문에 엔터 후 비밀번호 설정 하신 후 모두 엔터하시면 됩니다. sudo mysql_secure_installation ※ 위 MariaDB 서비스를 시작해야 오류가 발생되지 않음 ※ 위 초기 설정이 안되는 경우 MariaDB가 실행되고 있는지 체크
http_build_query # 아래 처럼 "GET"으로 네이버 영화 정보를 가져온다고 가정했을때 "http_build_query()"를 사용하여 URL 문자열로 자동으로 인코딩 해주는 방식 "POST" 형식처럼 데이터를 배열로 선언한뒤 배열을 URL 문자열로 인코딩 해주는 방식 # "GET" 데이터 $data = [ "query" => $title, "count" => $count, ]; # URL 문자열로 인코딩 $data = "?".http_build_query($data, "", "&"); $CURL = curl_init(); curl_setopt($CURL, CURLOPT_URL, "https://openapi.naver.com/v1/search/movie.json{$data}"); curl_setopt($CURL, CURLOPT_POST, false); $response = curl_exec($CURL); curl_close($CURL); $data = json_
언어 파이썬 현재 : 하 목표 : 중상 비고 : 현재 파이썬은 기초를 잡아가는 과정이며, 다른 언어의 경험이 있는 만큼 기초만 잡고 바로 여러가지 연습할 예정 달성여부 : 장고를 제외하고 FastAPI와 Flask를 해보았다. 결론적으로는 FastAPI가 짱이다. 현재 많이 딥하게 써보았고, 각종 크롤링 등 프로그램도 많이 제작해보았다. 스스로 기준을 정하는게 올바르지 않을 수는 있지만, 그래도 중급 정도 실력은 올라온것 같다. 현재는 개발 대부분 백엔드를 FastAPI로 사용하고 있다. PHP 현재 : 상 목표 : 최상 비고 : PHP는 나의 주 언어이다. 사실 PHP의 모든 함수를 사용할 일은 없지만 모르는것도 수두룩 하다. 물론 그만큼 잘 안쓰는 함수가 많다는것도 문제이다. 하지만 욕심이 생긴다. 내 머리속의 PHP 90%를 넣는 그날까지 계속 할것 이다. 달성여부 : 작년말 이번년도 초까지는 라라벨을 사용해왔으나 나머지 기간은 PHP를 하지 못했다. 물론 갑자기 할려고 하면
백슬래시(\) # 클래스 이름 앞에 "\"를 사용하면 전역 공간에서 클래스를 호출할 수 있습니다. "\"를 사용하지 않으면 코드와 동일한 네임스페이스에 있는 클래스를 호출합니다. 그러나 코드에서 네임스페이스를 사용하지 않으면 글로벌 공간에서 클래스를 호출합니다.
사용자 인증 $URL = "사이트 주소"; $AUTH_URL = "https://kakaoapi.aligo.in/akv10/token/create/30/s/"; $CURL = curl_init(); curl_setopt($CURL, CURLOPT_PORT, (strtolower(parse_url($URL)['scheme']) == 'https') ? 443 : 80); curl_setopt($CURL, CURLOPT_URL, $AUTH_URL); curl_setopt($CURL, CURLOPT_POST, 1); curl_setopt($CURL, CURLOPT_RETURNTRANSFER, 1); curl_setopt($CURL, CURLOPT_POSTFIELDS, http_build_query([ "apikey" => "키", "userid" => "유저 아이디", ])); curl_setopt($CURL, CURLOPT_SSL_VERIFYPEER, false); $reponse =
Mysql(MariaDB) 구버젼 설치 sudo apt update sudo apt install -y mysql-server # 외부 포트 열기 sudo ufw allow mysql # 시작등록 sudo systemctl enable mysql # Mysql 실행 sudo service mysql start # MariaDB 초기 설정 "Set root password"에서 엔터 후 사용할 비밀번호 2번 입력 후 모두 엔터 입력해주시면 됩니다. 최초 계정에는 비밀번호가 없기 때문에 엔터 후 비밀번호 설정 하신 후 모두 엔터하시면 됩니다. sudo mysql_secure_installation ※ 위 MariaDB 서비스를 시작해야 오류가 발생되지 않음 ※ 위 초기 설정이 안되는 경우 MariaDB가 실행되고 있는지 체크
커맨드 생성하기 # 아티산을 이용한 커맨드 생성 "app/Console/Commands" 폴더에 생깁니다. 그냥, 폴더에 바로 만들어도 됩니다. php artisan make:command 클래스명 # 만들게 되면 해당 파일에 내용은 아래와 같을 겁니다. "$signature"에 실행시킬 명령어를 정해줍니다. 중요 로직은 "hander"에 추가하면 됩니다. 저는 로그를 출력 해보겠습니다. <?php namespace App\Console\Commands; use Illuminate\Console\Command; class 클래스명 extends Command { protected $signature = "purchase:cancel"; protected $description = "Command description"; public function __construct() { parent::__construct(); } public function handle() { Log::deb
초단위 # 크론탭 수정 crontab -e # 초단위 설정 아래 처럼 하면 1분 뒤 부터는 1초 단위로 크론탭 실행됨 "* * * * *" 뒤에 "sleep 01;"이 중요 포인트 * * * * * cd /경로 && php artisan schedule:run >> /dev/null 2>&1 * * * * * sleep 01; cd /경로 && php artisan schedule:run >> /dev/null 2>&1 * * * * * sleep 02; cd /경로 && php artisan schedule:run >> /dev/null 2>&1 * * * * * sleep 03; cd /경로 && php artisan schedule:run >> /dev/null 2>&1 * * * * * sleep 04; cd /경로 && php artisan schedule:run >> /dev/null 2>&1 * * * * * sleep 05; cd /경로 && php artisan sc
파이썬 최신 업데이트 # 현재 파이썬 버젼 확인 python3 -V # 레포지토리 업데이트 sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update # 업데이트된 레포지토리 파이썬 패키지 확인 sudo apt list | grep python3.9 # 최신 파이썬 설치 sudo apt install -y python3.9 # 대체 업데이트에 "Python"의 이전 버전과 새 버전을 모두 추가합니다. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2 # 대표적으로 사용할 파이썬 선택 0번으로 오토 모드로 되어있을텐데 최신 파이썬 번호로 입력해서 고정시켜주세요. sudo update-alternative
파이썬 버젼 오류 해결 # 위 오류가 발생되는 이유는 파이썬 버젼이 맞지 않아서 입니다. 아래 명령어를 통해서 현재 설치된 파이썬 리스트를 확인 하여 사용할 버젼을 선택해줘야 합니다. sudo update-alternatives --config python3
패키지 한번에 설치하기 # 해당 프로젝트 폴더로 이동 후 명령어 실행으로 패키지 전체 설치 pip install -r requirements.txt ※ 단, "requirements.txt" 파일이 존재해야됩니다. requirements.txt 파일 생성하기 # 해당 프로젝트 폴더에서 명령어 실행 pip freeze >> requirements.txt
라라벨 FCM 푸시 알람 https://github.com/brozot/Laravel-FCM brozot/Laravel-FCM Laravel-FCM is an easy to use package working with both Laravel and Lumen for sending push notification with Firebase Cloud Messaging (FCM). - brozot/Laravel-FCM github.com
특정 버전 삭제 sudo apt purge `dpkg -l | grep php7.2| awk '{print $2}' |tr "\n" " "` sudo apt purge php7.* sudo apt autoclean sudo apt autoremove
숫자처리함수 절대값 print(abs(-5)) print(abs(5)) >>> 5 제곱근 print(pow(4, 2)) >>> 4*4 = 16 OR 4**4 = 16 최대값 print(max(5, 12)) >>> 12 최소값 print(min(5, 12)) >>> 5 반올림 print(round(3.14)) >>> 3 print(round(4.99)) >>> 5 math 임포트 하기 "math" 내장 함수 from math import * dir(math) >>> [ '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor',
랜덤 함수 0.0 ~ 1.0 이하의 임의의 값 print(random()) 0.0 ~ 10.0 이하의 임의의 값 print(random() * 10) 0.0 ~ 10 이하의 임의의 값 (정수) print(int(random() * 10)) 1 ~ 10 이하의 임의의 값 (정수) print(int(random() * 10) + 1) 1 ~ 45 이하의 임의의 값 (정수) print(int(random() * 45) + 1) 1 ~ 45 미만의 임의의 값 생성 print(randrange(1, 46)) 1 ~ 45 이하의 임의의 값 생성 print(randint(1, 45))
문자열(독스트링 Documentation String) 독스트링에도 포멧팅을 사용할 수 있다. gender = "남자" sentence3 = f""" 저는 {gender} 입니다. """ >>> 저는 남자 입니다.
슬라이싱 인덱스가 0부터 시작하기 때문에 7이면 "성별 정보"를 가져올 수 있다. number = "990120-1234567" print(f"성별 : {number[7]}") >>> 성별 : 1 "연도"는 [0:2] 0은 시작 2는 두 번째까지 가져올 수 있다. print(f"년도 : {number[0:2]}") >>> 년도 : 99 "월" 정보는 [2:4] 2는 두 번째부터 시작 4는 네 번째까지 가져올 수 있다. print(f"월 : {number[2:4]}") >>> 월 : 01 "일" 정보는 [4:6] 4는 네 번째부터 시작 6는 여섯 번째까지 가져올 수 있다. print(f"일 : {number[4:6]}") >>> 일 : 20 [:6] 앞에 콜론만 적을 경우 암시적으로 첫 번째부터 가져온다. print(f"생년월일 : {number[:6]}") >>> 생년월일 : 990120 [7:] 뒤에 콜론만 적을 경우 암시적으로 끝가지 가져온다. print(f"뒤 7자리 : {nu
문자열처리함수 "lower()"를 이용하여 모두 소문자로 변경하여 출력 message = "Python is Amazing" print(message.lower()) >>> python is amazing "upper()"를 이용하여 모두 대문자로 변경하여 print(message.upper()) >>> PYTHON IS AMAZING 첫 번째 단어가 소문자인지 체크 print(message[0].islower()) >>> False 첫 번째 단어가 대문자인지 체크 print(message[0].isupper()) >>> True 문자열 수 print(len(message)) >>> 17 문자열 변경 print(message.replace("Python", "Java")) >>> Java is Amazing "n"이 몇 번째 있는지 체크 print(message.index("n")) >>> 5 "n"이 있는 위치에서 다음 위치에 있는 "n"을 찾는다. 즉, 다음 번째에 해당하는 "n
흑연패드 추천 # 사진에 흑연패드는 이미 반으로 잘라서 썼습니다. 추천하는 이유는 현재 한성컴퓨터 TFX5450UC를 사용하고 있는데 성능으로 두고 쓰게 된다면 온도가 금방 올라가고 뒷판을 뜯어보니 쿨링구조가 매우 좋지 않습니다. 그래서 팬 소리가 크기 때문에... 이번에 흑연패드로 바꿔줬는데 정말 놀라운 결과가 발생됬네요. 성능 모드로 CPU-Z 벤치를 돌려보니 이전에 써멀구리스 바른대비 약 10도 ~ 12도 정도 내려갔습니다. 올코어 4기가 터지면서 온도 80도 원래는 90도 이상 나옴... ※ 주의사항 잘 보면서 작업하세요. 쇼트나면 노트북 날라갑니다~ 흑연패드 얇기 흑연패드 흑연패드 흑연패드 비엠텍 그라파이트써멀패드/써멀패드/쿨썸패드 CTPD3030/4040/5050/6060 COUPANG www.coupang.com
문자열포멧 기본 "+" 문자열 포맷 방법 print("a" + "b") >>> ab 기본 "," 문자열 포맷 방법 print("a", "b") > a b 원하는 값을 "%d"(정수) 뒤에 값을 지정해 줄 수 있다. print("나는 %d살 입니다." %20) >>> 나는 20살 입니다. "%s"(문자열) 값을 넣을 수 있다. (문자열에는 정수를 넣을 수 있다.) print("나는 %s살 좋아해요." %"파이썬") >>> 나는 파이썬살 좋아해요. "%a"(캐릭터) 한 글자만 넣을 수 있다. (두 개 이상 단어 입력 시 오류) print("Apple은 %c로 시작해요." %"A") >>> Apple은 A로 시작해요. 한 번에 여러 가지를 넣을 수도 있다. print("나는 %s색과 %s색을 좋아해요." %("빨강", "파랑")) >>> 나는 빨강색과 파랑색을 좋아해요. 포맷을 활용하여 중괄호에 넣을 수 있다. print("나는 {}살 입니다.".format(20)) >>> 나는 20살
탈출문자 "\n" 역 슬러시엔 은 줄 바꿈이다. print("백문이 불여일견 \n백견이 불여일타") >>> 백문이 불여일견 백견이 불여일타 ", ' 을 활용하여 따옴표를 넣을 수도 있다. print("안녕하세요. '검은냥냥이' 입니다.") print('안녕하세요. "검은냥냥이" 입니다.') >>> 안녕하세요. '검은냥냥이' 입니다. >>> 안녕하세요. "검은냥냥이" 입니다. 또한, 역 슬러시를 통해 큰따옴표 안에 큰따옴표를 중복해서 쓸 수 있다. print("안녕하세요. \"비킹\" 입니다.") print("안녕하세요. \'비킹\' 입니다.") >>> 안녕하세요. "비킹" 입니다. >>> 안녕하세요. '비킹' 입니다. "\\" 역 슬러시를 두 번 사용하게 되면 하나의 "\" 역 슬러시로 변경된다. print("C:\\Users\\Desktop\\Python") >>> C:\Users\Desktop\Python "\r" 커서를 맨 앞으로 이동' print("Red Apple\rPine
isset() 주의할점 # "null" $test = null; Log::debug("isset null : ".isset($test)); -> 빈값 (false) # "false" $test = false; Log::debug("isset false : ".isset($test)); -> 1 (true) # "true" $test = true; Log::debug("isset true : ".isset($test)); -> 1 (true) # "공백" $test = ""; Log::debug("isset 공백 : ".isset($test)); -> 1 (true) # "띄어쓰기" $test = " "; Log::debug("isset 띄어쓰기 : ".isset($test)); -> 1 (true) ※ 즉, 현재 위 보기에서는 "null"일 경우에만 "false"를 출력하기 때문에 주의하면서 사용해야 합니다. ※ 가급적 "empty()", "!empty()"와 같이 사용하세요!
컴포저2(Composer 2) 설치하기 curl -sS https://getcomposer.org/installer -o composer-setup.php sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer # 설치 확인 composer
known_hosts 파일 삭제 # 기존 "known_hosts" 파일에 SSH 정보가 담겨 있어서 그렇습니다. 해당 파일을 삭제해주시면 다시 생성되면서 접속이 가능해집니다. C:\Users\윈도우계정이름\.ssh
mysqld.cnf 설정값 수정 # 경로 cd /etc/mysql/mysql.conf.d/mysqld.cnf # "skip-external-locking" 하단에 추가 skip-external-locking skip-host-cache skip-name-resolve # 나머지는 기존 값을 수정하거나 주석처리하여 맨아래에 한번에 넣기 # "Fine Tuning" max_connection=100 connect_timeout=20 wait_timeout=7200 max_allowed_packet=32M thread_stack=192K thread_cache_size=128 sort_buffer_size=2M join_buffer_size=2M bulk_insert_buffer_size=16M tmp_table_size=256M max_heap_table_size=256M # "QueryCache" query_cache_type=OFF query_cache_limit=2M query_c
Opcache 설치하기 명령어 설명 php artisan opcache:clear OPcache 지우기 php artisan opcache:config OPcache 구성 표시 php artisan opcache:status OPcache 상태 표시 php artisan opcache:compile --force 응용 프로그램 코드를 미리 컴파일합니다. ※ opcache.dups_fix를 사용하도록 설정하거나 --force 플래그를 사용해야 합니다. 클래스를 다시 선언할 수 없음 오류가 발생하면 opcache.dups_fix를 사용하도록 설정하거나 클래스 경로를 제외 목록에 추가합니다. composer require appstract/laravel-opcache php artisan vendor:publish --provider="Appstract\Opcache\OpcacheServiceProvider" --tag="config"
Opcache 설정하기 # 각 PHP 버젼 sudo vi /etc/php/버젼/fpm/conf.d/10-opcache.ini ;;; ; OPCACHE ;;; ; OPCACHE 사용여부 opcache.enable=1 ; 파일과 캐시 변경점 체크 (0, 1) opcache.validate_timestamps=1 ; 변경점 체크 시간(SECOND) ; 개발시 0초로 권장 opcache.revalidate_freq=2 ; 캐시 메모리 크기 (MB) opcache.memory_consumption=1024MB ; 문자열 버퍼크기 (MB) opcache.interned_strings_buffer=16 ; 파일 키 개수 opcache.max_accelerated_files=100000 ; OPCACHE 재시작시 만료된 캐시의 교체 비율 (%) opcache.max_wasted_percentage=10 ; 활성화 된 경우 OPcache는 현재 작업 디렉토리를 스크립트 키에 추가하여 동일한 기본 이
메인 도메인 준비 CDN을 만들기 위해서는 가장 먼저 메인으로 사용하고 있는 도메인이 필요합니다. EX) abc.com 도메인이라면 cdn.abc.com 으로 서브 도메인으로 사용합니다. 도메인 구입처에서 네임서버를 "AWS ROUTE 53"으로 연결해줍니다. S3 생성하기 Amazon Web Services Sign-In Amazon Web Services Login 로그인 루트 사용자 무제한 액세스 권한이 필요한 작업을 수행하는 계정 소유자입니다. 자세히 알아보기 IAM 사용자 일일 작업을 수행하는 계정 내 사용자입니다. 자세히 알아보기 루트 사용자 이메일 주소 다음 계속 진행하는 경우 AWS 고객 계약 또는 AWS 서비스에 대한 기타 계약 및 개인 정보 보호 정책 에 동의하게 됩니다. 이 사이트는 필수 쿠키를 사용합니다. 자세한 내용은 쿠키 고지 를 참조하세요. AWS를 처음 사용하십니까? AWS 계정 새로 만들기 English s3.console.aws.amazon.com 버
phpmyadmin 설치 및 심볼릭 링크 생성 # "phpmyadmin" 설치 sudo apt install -y phpmyadmin sudo ln -s /usr/share/phpmyadmin root로 설정한 경로 - EX) sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
백업 계획 만들기 Amazon Web Services Sign-In Amazon Web Services Login 로그인 루트 사용자 무제한 액세스 권한이 필요한 작업을 수행하는 계정 소유자입니다. 자세히 알아보기 IAM 사용자 일일 작업을 수행하는 계정 내 사용자입니다. 자세히 알아보기 루트 사용자 이메일 주소 다음 계속 진행하는 경우 AWS 고객 계약 또는 AWS 서비스에 대한 기타 계약 및 개인 정보 보호 정책 에 동의하게 됩니다. 이 사이트는 필수 쿠키를 사용합니다. 자세한 내용은 쿠키 고지 를 참조하세요. AWS를 처음 사용하십니까? AWS 계정 새로 만들기 English ap-northeast-2.console.aws.amazon.com # 위 링크 접속하여 "백업 계획"으로 이동하기 "AWS Backup"의 최대 장점은 볼륨까지 한번에 백업 됩니다. 복원시 EC2로 자동으로 만들어집니다. 1. 백업 계획 생성 - 새 계획 수립 - 백업 계획 이름 설정 2. 백업 규치 구
데이터 수명 주기 관리자 시작 Amazon Web Services Sign-In Amazon Web Services Login 로그인 루트 사용자 무제한 액세스 권한이 필요한 작업을 수행하는 계정 소유자입니다. 자세히 알아보기 IAM 사용자 일일 작업을 수행하는 계정 내 사용자입니다. 자세히 알아보기 루트 사용자 이메일 주소 다음 계속 진행하는 경우 AWS 고객 계약 또는 AWS 서비스에 대한 기타 계약 및 개인 정보 보호 정책 에 동의하게 됩니다. 이 사이트는 필수 쿠키를 사용합니다. 자세한 내용은 쿠키 고지 를 참조하세요. AWS를 처음 사용하십니까? AWS 계정 새로 만들기 English ap-northeast-2.console.aws.amazon.com # 위 링크 접속 후 EBS 스냅샷 생성 및 삭제 예약 및 관리 "수명 주기 정책 생성" -> Data Lifecycle Manager를 사용하면 EBS 스냅샷 및 EBS 지원 AMI의 생성, 보존, 복사, 삭제를 자동화할 수
공식 https://www.electronjs.org/ Electron | Build cross-platform desktop apps with JavaScript, HTML, and CSS. Build cross-platform desktop apps with JavaScript, HTML, and CSS. www.electronjs.org 버전 https://www.electronjs.org/releases/stable Stable Releases | Electron Electron 12.0.0 March 02, 2021 ( 2 weeks ago ) Release Notes for v12.0.0 Stack Upgrades Chromium 89.0.4389.69 v89 blog post v88 blog post Node v14.16.0 v14.16.0 release notes v14.15.5 release notes v14.15.4 release notes v14.15.3 rele
패키지 설치 아래 패키지를 설치해야 일렉트론을 실행할 수 있습니다. ※ 추가 오류 발생시 아래 내용 확인 sudo apt update && sudo apt install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1
BrowerWindow 옵션 옵션 타입 설명 width Integer Windows 너비 (픽셀). 기본값은 800입니다. height Integer Windows 높이 (픽셀). 기본값은 600입니다. x Integer 화면에서 창 왼쪽 오프셋. 기본값은 창을 가운데에 맞추는 것입니다. (y를 사용하는 경우 필수) y Integer 화면에서 창 상단 오프셋. 기본값은 창을 가운데에 맞추는 것입니다. (x를 사용하는 경우 필수) useContentSize Boolean 너비와 높이는 웹 페이지의 크기로 사용됩니다. 즉, 실제 창 크기에는 창 프레임의 크기가 포함되며 약간 더 큽니다. 기본값은 거짓입니다. center Boolean 화면 중앙에 창을 표시합니다. minWidth Integer Windows 최소 너비. 기본값은 0입니다. minHeight Integer Windows 최소 높이. 기본값은 0입니다. maxWidth Integer Windows 최대 너비. 기본값은 제한
main.yml name: CI on: push: branches: [ main ] pull_request: branches: [ main ] workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest steps: - name: checkout # checkout uses: actions/checkout@master - name: Upload S3 # S3에 배포 uses: jakejarvis/s3-sync-action@master with: args: --exclude ".git*" --acl public-read --follow-symlinks --delete env: AWS_S3_BUCKET: "버킷 이름" AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: ${{ se
args 인수 설명 --verbose 디버깅에 유용한 수정중인 파일을 출력합니다. --delete 소스에없는 파일 삭제 --transfer-all 대상 사이트와 동일 해 보이는 모든 파일 전송 --dry-run 실제 변경없이 수정 될 파일을 출력합니다. --include=File.txt 일치하는 파일을 포함하면 여러 --include를 추가 할 수 있습니다. --exclude=File.txt 일치하는 파일을 제외하고 여러 --exclude를 추가 할 수 있습니다. --include-glob=*.zip 일치하는 파일을 포함하면 여러 --include-glob을 추가 할 수 있습니다. --exclude-glob=*.zip 일치하는 파일을 제외하고 여러 --exclude-glob을 추가 할 수 있습니다. --delete-excluded 제외 된 것으로 표시 한 항목이 서버에있는 경우 삭제합니다. --no-empty-dirs 빈 디렉토리를 만들지 마십시오 --parallel=X 한 번에 X
기본값 키 값 타입 필수 기본값 AWS_ACCESS_KEY_ID 액세스 키 env Yes N/A AWS_SECRET_ACCESS_KEY 보안 액세스 키 Yes N/A AWS_S3_BUCKET 버킷 이름 Yes N/A AWS_REGION 버킷 생성 지역(리전) No us-east-1 AWS_S3_ENDPOINT 버킷의 엔드 포인트 URL No 자동 (s3.amazonaws.com 또는 AWS의 리전 별 해당) SOURCE_DIR 로컬 디렉터리 (또는 파일) No ./ (복제 된 저장소의 루트) DEST_DIR S3 버킷 내부의 디렉토리 No / (버킷의 루트) 예외처리 인수 설명 --acl public-read 파일을 공개적으로 읽을 수 있도록합니다 (버킷 설정도 공개로 설정되어 있는지 확인). --follow-symlinks 다 치지 않고 발생할 수있는 이상한 심볼릭 링크 문제를 수정합니다. --delete --delete가 리포지토리 / 빌드의 최신 버전에없는 S3 버킷의 파일을
TFX5450UC 한성 노트북 TFX5450UC 4개월 사용후기 TFX5450UC CPU-Z CPU-Z CPU-Z CPU-Z CPU-Z 현재 한성 노트북 TFX5450UC을 개발용으로 사용중입니다. 서론 필요없이 간단하게 장단점을 설명하겠습니다. 장점 1. 스펙대비 가벼운 무게와 생각보다 작은 충전기 2. C 타입 충전 (최소 65W 이상) 3. 유선 랜포트 (있으면 쓰게 됨) 4. 가격대비 스펙이 좋음 5. 조용모드로 놓고 사용해도 웬만한 무겁지 않은 작업들도 모두 가능하다. 단점 1. 별로 좋지 않은 쿨링 시스템 - 히트파이프가 1개이고 딱히 좋아보이진 않음 - 하지만, 모드를 조용으로 놓으면 나름 쓸만함 2. 발열로 인한 팬 소음 - 이건 거의 대부분 공통적인 문제이지만 - 성능, 엔터 모드로 쓰게 되면 발열 해소가 잘 되지 않아서 팬이 자주 돕니다. 팬이 시끄러운것도 있지만 RPM 진짜 높게 올라갈 수 있어서 비행기 이륙이 뭔지 알 수 있습니다. 3. 패널이 생각보다 밝지는
기본값 키 필수 설명 PATHS yes* 무효화 할 하나 이상의 공백으로 구분 된 경로 목록 PATHS_FROM 경로 목록을 읽을 파일 이름 DISTRIBUTION yes 작업할 구름 전면 분포 ID(예: 'EDFDVBD6Example') AWS_REGION 운영될 AWS 영역 AWS_ACCESS_KEY_ID 액세스키 AWS_SECRET_ACCESS_KEY 비밀키 DEBUG no "1"로 설정하면 문제 해결을 위해 최종 awscli 무효화 명령을 인쇄 AWS IAM Policy 이 작업을 사용하려면 최소한 다음 권한이있는 액세스 키 쌍을 제공해야합니다. { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "cloudfront:CreateInvalidation", "Resource": "arn:aws:cloudfront::<account id>:distributio
VSCODE settings.json 파일 수정하기 VSCODE settings VSCODE settings # VSCODE에서 "파일->기본설정->설정"이나 "CTRL+," 단축키로 설정 연후 검색이나 JSON에서 "php.memory"을 -1로 변경해주세요. "php.memoryLimit" : "-1",
운영체제 확인 # 운영체제 확인 cat /etc/redhat-release cat /etc/*release* # 비트 확인 getconf LONG_BIT 참고 링크 리눅스에서 OS버전 확인하기. 리눅스에서 OS버전 확인하기 리눅스에서 버전을 확인하는 방법은 여러가지가 있습니다. 커널을 확인하거나 리눅스OS 버전을 확인할때 유용합니다. 아래 명령어들을 참조하시고 입맛에 맞게 골라 쓰세요 :) # 일반.. ongal.tistory.com
운영체제 확인 # 운영체제 확인 cat /etc/issue cat /etc/redhat-release cat /etc/*release* # 비트 확인 getconf LONG_BIT 참고 링크 리눅스에서 OS버전 확인하기. 리눅스에서 OS버전 확인하기 리눅스에서 버전을 확인하는 방법은 여러가지가 있습니다. 커널을 확인하거나 리눅스OS 버전을 확인할때 유용합니다. 아래 명령어들을 참조하시고 입맛에 맞게 골라 쓰세요 :) # 일반.. ongal.tistory.com
NVM 설치하기 # NVM(Node Version Manager) 라이브러리, 프레임워크, 개발 툴 등 협업할때 발생되는 버전 호환 문제를 해결하기 위해서 사용 # 관련 패키지 설치 sudo apt install -y build-essential libssl-dev # NVM 설치 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash # bashrc 수정 내용 적용 source ~/.bashrc NVM 사용하기 # NVM으로 사용가능한 Node 버전 확인 nvm ls-remote # NVM Node 10.16.3 버전 설치해보기 nvm install 10.16.3 # NVM 버전 설정하기 nvm use 10.16.3 # Node 버전 확인 node -v # Npm 버전 확인 npm -version # Nvm 현재 사용 버젼 nvm current
요즘 개발 관련된 교육 플랫폼들이 나오면서 학원과 같이 가르치고 있죠. 근데 저는 여기서 장점이 아닌 현재의 문제점과 단점을 얘기할 겁니다. 이 문제는 전체적인 공통사항임을 알아주셨으면 합니다. 저는 3년차 프리랜서 입니다. 스파르타코딩클럽은 제 지인이 다니고 있습니다. 물론 반대를 했지만 선택은 본인이 하는거니깐요. 옆에서 보면서 느낀것을 말하고자 합니다. 1. 짧은 기간에 맞춘 문제 있어보이는 커리큘럼 현재 프론트 개발자로 가기 위해서 주로 다룰것을 선택하게 되는데 당연히 리엑트 밖에 없긴 합니다만... 커리큘럼 자체가 리엑트를 배울때 노드가 무엇인지 노드로 왜 돌아가야하는가 리엑트는 어떤 영역에 속하는지 그런게 정말 기초적인 것을 알려주지 않는것 같습니다. 강의를 던져줍니다. 그냥 보고 만들라고 합니다. (거짓말 같죠?) 처음에 파이썬으로 시작하는데 조를 짜줍니다. 랜덤 조 입니다. 주?마다 돌아가는건지 암튼 주기적으로 바뀝니다. 시작하기 전에 강의를 들으라고 합니다. 해당 강
권한 부여하기 sudoers passwd group # 먼저 "root" 계정으로 전환 su 또는 su root # "sudo" 권한 부여 "sudoers" 파일을 연후 "root" 밑에 추가 vi /etc/sudoers ubuntu ALL=(ALL:ALL) ALL # "passwd"를 연후 하단에 "ubuntu"를 찾아서 뒤에 값을 "0:0"으로 변경 vi /etc/passwd ubuntu:x:0:0:,,,:/home/ubuntu:/bin/bash # "그룹" 변경 "root" 뒤에 "ubuntu" 추가하기 vi /etc/group root:x:0:ubuntu
오류 해결하기 sudo apt remove cmdtest sudo apt remove yarn curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update sudo apt-get install yarn -y
Keys # 키는 React가 어떤 항목이 변경, 추가 또는 제거되었는지 식별하는 데 도움이됩니다. 요소에 안정적인 ID를 제공하려면 배열 내부의 요소에 키를 제공해야합니다. const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((number) => <li key={number.toString()}> {number} </li> ); # 키를 선택하는 가장 좋은 방법은 형제 중에서 목록 항목을 고유하게 식별하는 "문자열을 사용"하는 것입니다. 대부분의 경우 "데이터의 ID를 키로 사용"합니다. const todoItems = todos.map((todo) => <li key={todo.id}> {todo.text} </li> ); # 렌더링 된 항목에 대한 "안정적인 ID가없는 경우" 마지막 수단으로 "항목 색인을 키로 사용"할 수 있습니다. const todoItems = todos.map((todo, index) => //
해결하기 # 입력 값들은 "null"이 아니어야 합니다. 빈 문자열을 사용하여 구성 요소를 지우거나 제어되지 않는 구성 요소의 경우 "null" 대신 "undefined"를 사용하는 것이 좋습니다. data["abc"] === null ? null : data["abc"] -> data["abc"] === undefined ? undefined : data["abc]
미들웨어(Middleware) # 미들웨어에서는 "try ~ catch"가 제대로 작동하지 않는 문제를 발견했습니다. 아래는 비교 대상 입니다. # "try ~ catch"가 작동되지 않은 코드 try { if (empty(Auth::check()) || Auth::check() === "" || Auth::check() === null) { // 아래 코드가 작동되지 않아서 계속 "true" 값을 반환시키는 문제가 있음 throw new \Exception("토큰이 존재하지 않습니다."); } } catch (\Exception $error) { Auth::logout(); $this->verify = false; $this->message = ((bool) preg_match($this->match, $error->getMessage())) ? $error->getMessage() : "JwtAuthenticate handle Error"; $this->response = Res
HTTP 부하 분산 # NGINX의 HTTP 모듈인 업스트림을 사용하여 HTTP 서버를 통해 부하를 분산합니다. 아래 구성은 80포트에서 두 HTTP 서버의 부하를 분산합니다. "backup"은 "weight1, 2"를 사용할 수 없을때 사용됩니다. "weight2"로 설정하면 해당 서버에 두배 많은 요청을 전달하도록 설정됩니다. (기본값 "weight=1") upstream backend { server 10.10.12.45:80 weight=1; server app.example.com:80 weight=2; server spare.example.com:80 backup; } server { location / { proxy_pass http://backend; } } ※ HTTP 업스트림 모듈은 HTTP에 대한 부하 분산을 제어합니다. 이 모듈의 대상은 "Unix sockets, IP addresses, DNS records" 입니다. TCP 부하 분산 # 이번에는 NGINX의
스티키 쿠키(Sticky Cookie) # 고정 쿠키 지시문을 통하여 NGINX에 쿠리르 만들고 추적하도록 지시 할 수 있습니다. 다운스트림 클라이언트를 연결하는 쿠키를 생성하고 추적합니다. upstream backend { server backend1.example.com; server backend2.example.com; sticky cookie affinity expires=1h domain=.example.com httponly secure path=/; } 스티키 쿠키 학습 # 아래는 NGINX가 쿠키를 찾아 세션을 찾고 추적하도록 지시합니다. 응답 헤더에서 COUCIENAME이라는 이름을 지정하고 기존 세션을 찾아봅니다. 요청 헤더에 있는 동일한 쿠키에 대해서 이 세션 선호도는 공유에 저장됩니다. 약 16,000개의 세션을 추적할 수 있는 2MB의 메모리 영역입니다. 쿠키 이름은 항상 응용프로그램에 따라 다릅니다. 일반적으로 사용되는 쿠키 이름(예: jsessionid
A/B 테스트 # "backendv2"에 들어오는 트래픽을 20%을 분할하고 나머지 "backendv1"에서는 80%의 트래픽을 보냅니다. 이렇게 분할 함으로써 다양한 유형의 마케팅 및 프론트를 테스트 할때 유용합니다. 한번에 변경하기 어려운 경우 조금씩 비율로 조정하여 A/B 테스트 할때 좋습니다. split_clients "${remote_addr}AAA" $variant { 20.0% "backendv2"; * "backendv1"; } location / { proxy_pass http://$variant } # 정적 사이트로 사용 방법 http { split_clients "${remote_addr}" $site_root_folder { 33.3% "var/www/sitev2/"; * "var/www/sitev1/"; } server { listen 80 _; root $site_root_folder; location / { index index.html; } } } ※ 이
연결 제한 하기 # "limitbyaddr"이라는 공유 메모리 영역을 만들고, 크기는 10MB로 설정됩니다. 아래 40명까지만 접속이 되며 이외는 429(너무 많은 요청)으로 반환됩니다. http { limit_conn_zone $binary_remote_addr zone=limitbyaddr:10m; limit_conn_status 429; server { limit_conn limitbyaddr 40; } }
속도 제한하기 http { limit_req_zone $binary_remote_addr zone=limitbyaddr:10m rate=3r/s; limit_req_status 429; server { limit_req zone=limitbyaddr; } } # 2단계 속도 사용 server { location / { limit_req zone=limitbyaddr burst=12 delay=9; } } 대역폭 제한 # 다운로드 대역폭을 제한합니다. 10M 이후에 초당 1MB으로 제한됩니다. location /download/ { limit_rate_after 10m; limit_rate 1m; }
캐시 # 캐싱은 다시 제공할 요청 응답을 저장하여 콘텐츠 제공을 가속화 합니다. 서버 부하를 줄일 수 있으며, 더 적은 자원 및 전략적 위치에서 캐싱 서버의 확장 및 배포 사용자 경험에 큰 영향을 미칠 수 있습니다. 이 방법은 콘텐츠 전송 네트워크 또는 CDN의 패턴 입니다. proxy_cache_path /var/nginx/cache keys_zone=CACHE:60m levels=1:2 inactive=3h max_size=20g; proxy_cache CACHE; # 캐시 잠금 # 현재 캐시에 기록중인 요청을 프록시 막기 proxy_cache_lock on; proxy_cache_lock_age 10s; proxy_cache_lock_timeout 3s; 해시 키 캐시 # 콘텐츠가 캐시되고 검색되는 방식을 제어해야 합니다. proxy_cache_key "$host$request_uri $cookie_user"; 캐시 우회 # 때로는, 캐싱을 우회 할 수 있는 기능이 필요합니다.
환경 변수 추가 # 시스템 환경 변수 편집 -> path -> 새로만들기 -> "%systemroot%\System32\WindowsPowerShell\v1.0" 추가해주시면 됩니다. 참고 링크 error 0x80070002 when launching `powershell.exe' · Issue #6039 · microsoft/terminal Environment Windows build number: 10.0.18363.778 Windows Terminal version: 1.0.1401.0 Store/GitHub & 1.0.1402.0 Preview Steps to reproduce Open Windows Terminal or open new tab Windows PowerShe... github.com
리눅스 하위 시스템, 버추얼머신 사용 설정 .\dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart .\dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 리눅스 커널 업데이트 및 설치 Windows 10에 WSL(Linux용 Windows 하위 시스템) 설치 Bash 터미널을 사용하여 WSL(Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin 및 Alpine 포함)을 Windows 10에 설치하는 방법에 대한 설치 가이드입니다. docs.microsoft.com 리눅스 커널 # 만약, X86이 아닌 ARM 기반의 경우는 "ARM64 패키지"를 대신 설치하셔야 합니다. 설치 후 재부팅 후 하단 명령을 통한 활성화 진행(관리자 권한으로 실행)
000-default.conf 수정하기 # "000-default.conf"를 수정하여 ".htaccess"를 활성화 합니다. </VirtualHost> 바로 위에 추가합니다. sudo vi /etc/apache2/sites-available/000-default.conf <Directory /경로> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> # 아파치 재시작 sudo service apache2 restart ※ 만약, "Mod_Rewrite"가 활성화가 안되었다면 아래 추가로 진행해주세요. Mod_Rewrite 설치 # "Mod_Rewrite" 설치 sudo a2enmod rewrite # 아파치 재시작 sudo service apache2 restart
403 forbidden 해결하기 # 파일을 연후 아래 처럼 적용 sudo vi /etc/phpmyadmin/apache.conf <Directory /usr/share/phpmyadmin> Options Indexes FollowSymLinks MultiViews DirectoryIndex index.php AllowOverride all Require all granted # 아파치 재시작 sudo service apache2 restart
소켓 성능 벤치마킹 WSL1 WSL2 # "WSL2"가 압도적으로 빠릅니다. 긱벤치 벤치마킹 긱벤치 WSL2를 사용해본 장단점 후기 https://gmyankee.tistory.com/307 # WSL2는 SFTP + (Vmware + Docker Compose)보다 좀 빠르다 # WSL2는 개발을 하려면 /mnt/c로 잡아주는 경로가 아닌 다른 경로(예시, $HOME/)로 지정해서 해당 위치에서 해야 한다.(윈도 경로로 하면 실시간 바인딩을 포기해야 합니다. 반드시 WSL 경로로...) # WSL2는 docker, docker-compose, swarm, Kubernetes 사용이 가능하다! # WSL2는 SSH가 굉장히 불편하다 (재부팅할 때마다 IP가 바뀌어서 별도의 스크립트를 작성해서 포워딩해야 함) # WSL2를 사용하면 이제 Vm, Virtualbox 사용 가능하다 # WSL2는 아직도 안드로이드 게임용 에뮬레이터는 공존할 수 없다 # WSL2만 사용하면 Vmware에 더
Server public key has changed 오류 해결하기 # 기존에 남아있던 서버키를 제거해줘야 합니다. 아래 위치 이동 후 "known_hosts"를 백업해놓고 지워줍니다. 다시 워크벤치로 이동 후 다시 시도해주시면 정상적으로 등록됩니다. C:\Users\사용자\.ssh 참고 링크 Why MySQL Workbench shows connection error related to known_hosts? While connecting to database on remote server I got connection error related to known_hosts file. It did not ask me to update the known_host file but simply reject to connect. stackoverflow.com
한국어 플러그인 적용 Data Grip Data Grip # "File" -> "Settings" -> "Plugins" -> "korean" 검색 후 한국어 언어팩 설치
전체사진 액정 키보드 상판 앞면 뒷면 내부 윈도우 설치시 주의 laptops and netbooks :: lenovo v series laptops :: v15 g2 alc :: 82kd :: 82kd000ukr :: pf2qfcf3contentdetail - Lenovo Support KR V15 G2-ALC Laptop (Lenovo) - Type 82KD 시리얼 넘버 제품 감지 제품 변경 제품 홈 드라이버 및 소프트웨어 진단 기술 자료 및 가이드 보증 및 서비스 수리 상태 부품 액세서리 문의하기 더 보기 드라이버 및 소프트웨어 { "body": "Internal Error." } 수동 업데이트 자동 드라이버 업데이트 주문 복구 미디어 pcsupport.lenovo.com 레노버 V15 G2의 경우에는 윈도우 설치 후 자동으로 드라이버가 잡아지지 않습니다. 즉, 와이파이가 안되기 때문에 유선 랜 포트를 꽂아야 하는데 가능하면, 윈도우 USB에다가 레노버 드라이버도 같이 넣어서 설
램 업그레이드 써멀 재도포 써멀패드 교체 분해시 주의 하판 분해시에 사이드 측면을 이용해서 카드를 넣어서 분해해주세요. 내부 핀들이 부러지지 않게 천천히 작업하는게 중요합니다. 하판 케이스 내부 램 보호 케이스 램(메모리)를 추가로 장착하기 위해서는 램 보호 케이스를 제거해주시면 됩니다. 램 보호 케이스 제거 저기에 추가 램을 장착해주시면 됩니다. ※ 먼저 아래 보이는 배터리 선을 빼주세요. 합선이 되어 고장날 수 있습니다. 준비물 써멀, 써멀패드, 램 방열판을 미리 준비해놨습니다. 전에 쓰던거 남은건데요. SSD도 써멀패드로 방열해주면 좋습니다. 램 방열판과 써멀패드 SSD 써멀패드 기존 써멀패드는 너무 얆아서 뒷판 케이스쪽에 닿지 않아서 떼어내줍니다. 써멀패드 CPU CPU 방열판에 써멀구리스가 굳어 있네요. 바른지 시간이 좀 됬거나 저렴한 써멀구리스를 바르게 되면 빨리 마르게 됩니다. CPU 방열판 기존 써멀을 깨끗하게 닦아줍니다. 장착 이렇게 써멀구리스 재도포와 방열판 및 써
문자열 message = '안녕하세요.' print(message) >>> 안녕하세요. message2 = "반갑습니다." print(message2) >>> 반갑습니다. message3 = """ 안녕하세요. 반갑습니다. """ print(message3) >>> 안녕하세요. 반갑습니다.
리스트(배열) 리스트(배열) subway = [10, 20, 30] print(subway) >>> [10, 20, 30] subway = ["유재석", "조세호", "박명수"] print(subway) >>> ['유재석', '조세호', '박명수'] 특정 문자열 인덱스 찾기 print(subway.index("조세호")) >>> 1 "append" 뒤에 배열 추가 subway.append("하하") print(subway) >>> ['유재석', '조세호', '박명수', '하하'] "subway" 객체에 첫 번째 인덱스에 값을 넣는다. subway.insert(1, "정형돈") print(subway) >>> ['유재석', '정형돈', '조세호', '박명수', '하하'] "pop"은 뒤에서부터 출력 가능 print(subway.pop()) print(subway) >>> 하하 >>> ['유재석', '정형돈', '조세호', '박명수'] print(subway.pop()) print(su
레직스(Regex) 정규표현식이란? Regular Expression # "Regex"란 "Regular Expression"의 약자 입니다. 텍스트에서 특정한 패턴을 찾거나 변경할때 유용합니다. # 1950년 유명한 수학자 "Stephen Cole Kleene"에 의해서 개발이 되었습니다. 초기에는 유닉스, 리눅스 등에서 활용되다가 점차 자바스크립트 및 다른 언어에서도 사용이 가능합니다. 사용방법 # "/regex/옵션"으로 슬래시 사이에 두고 사용합니다. 뒤에 옵션은 플래그란 뜻으로 "g, i, m, s, u, y"가 있습니다. 플래그는 각자 다른 조건을 줄 수 있기 때문에 확실히 알고가야 좋습니다. EX) /abc/gi 약자 플래그 설명 g global 마지막 일치의 색인을 유지하여 이전 일치의 끝에서 후속 검색을 시작할 수 있습니다. 전역 플래그가 없으면 후속 검색에서 동일한 일치를 반환합니다. RegExr는 무한 일치 오류를 방지하기 위해 전역 플래그가 비활성화 된 경우에만
그룹 및 범위 Groups and ranges Chracter 설명 | 또는 () 그룹 [] 문자셋, 괄호안의 어떤 문자든 [^] 부정 문자셋, 괄호안의 어떤 문가 아닐때 (?:) 찾지만 기억하지는 않음 # "hi"와 "Hello"는 그룹1로 묶어주고, "And"는 그룹2로 묶이게 됩니다. 아래 처럼 할 경우 "Hi", "Hello", "And"라는 3가지 텍스트를 찾게 됩니다. /(Hi|Hello)|(And)/gm # gr로 시작하면서 (e|a) 있으며 y로 끝나는 텍스트를 찾을때 "()"는 그룹을 지정하게 됩니다. /gr(e|a)y/gm > gray # gr로 시작하면서 (e|a) 있으며 y로 끝나는 텍스트를 찾을때 단, 그룹을 지정하지 않고 싶을때 /gr(?:e|a)y/gm > gray # 대괄호를 이용하여 하나라도 만족하는 텍스트가 있을때 /gr[ea]y/gm > gray # "a-z" 방식으로 알파벳 a부터 z까지 만족하는 텍스트가 있을때 /gr[a-z]y/gm > gray
수량 관련 Quantifiers Chracter 설명 ? 없거나 있거나 (zero or one) * 없거나 있거나 많거나 (zero or more) + 하나 또는 많이 (one or more) {n} n번 반복 {min,} 최소 {min,max} 최소, 그리고 최대 # "?" 물음표를 통해서 없거나 있거나를 체크 /gra?y/gm > gray, gry # "*" 별표는 통해서 없거나 있거나를 많거나를 체크 /gra*y/gm > gray, gry, graay, graaay # "+" 플러스는 통해서 하나 또는 많이 플러스는 없는 경우가 제외되겠죠. /gra*y/gm > gray, graay, graaay # "{}" 중괄호는 통해서 몇번 반복 되는지 체크 아래는 a가 2번 나온 경우에만 해당 /gra{2}y/gm > graay # 또는, 최소와 최대를 지정 아래는 a가 최소 2개 최대 3개인 텍스트를 찾습니다. /gra{2,3}y/gm > graay, graaay # 또는, 최소만 지
GO 설치하기 Downloads - The Go Programming Language After downloading a binary release suitable for your system, please follow the installation instructions . If you are building from source, follow the source installation instructions . See the release history for more information about Go releases. As of Go 1.13, the go command by default downloads... golang.org VSCODE나 기타 에디터 등에서 빌드를 하기 위해서는 "GO"를 설치해야 됩니다. 별도의 세팅 없이 설치만 진행해 주면 됩니다. GO 설치확인 폴더명 설명 bin go에서 사용하는 명령어 저장 pkg go get 명령어로 다운로드한 패키지 저장
VSCODE 익스텐션 설치 VSCODE 위 이미지처럼 "go extension pack"을 검색하여 익스텐션 패키지를 설치해 주세요. VSCODE 설정하기 단축키 "CTRL + ,"을 하거나, 왼쪽 "메뉴 파일->기본설정->설정"으로 들어간 후 오른쪽 상단 "설정 열기(JSON)" 변경한 뒤에 아래 내용을 입력해 주세요. "[go]": { "editor.defaultFormatter": "golang.go", "editor.formatOnSave": false, }, "gopls": { "formatting.gofumpt": true, }, 참고 링크 Go with Visual Studio Code Learn about Visual Studio Code editor features (code completion, debugging, snippets, linting) for Go. code.visualstudio.com
아나콘다 설치 Anaconda | Individual Edition Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine. www.anaconda.com # 설치 후 "Qt Designer"를 실행시키기 위해 아래 경로 이동 하여 "designer.exe" 실행 "C:\ProgramData\Anaconda3\Library\bin" ※ 가능하면 "시작화면 고정" 같은 부분으로 별도로 빼서 사용해도 좋습니다. 아나콘다 환경변수 추가 환경변수 CMD # "CMD"에서 사용하기 위해서 환경변수를 아래 처럼 추가해줍니다. 추가했다면, "CMD"에서 "conda"를 입력하면 관련 명령어가 나올겁니다. C:\ProgramData\Anaconda3 C:\ProgramData\Anaconda3\Scripts C:\
PyQt 설치하기 pyuic Riverbank Computing | Download PyQt Download If you have purchased a commercial license then please login to your account using the details sent to you at the time of purchase. PyQt6 PyQt6 is provided as a source distribution (sdist) and binary wheels from PyPI . The wheels will automatically install copies of the corresponding ... riverbankcomputing.com # "PyQt4," 버젼은 지원이 끝났기 때문에 "PyQt5", "PyQt6" 버젼을 설치해주세요. ※ "pyuic4" = "PyQt4" 파일 변환하기 # "CMD"에서 파일 경로와 확장자까지 입력하여 변환합니다. 예로 바탕화면
유저 조회 select user, host from user; 유저 생성 # "localhost"는 내부 접속 "%" 외부접속 허용 CREATE USER 'root'@'%' IDENTIFIED BY '비밀번호'; # 변경사항을 리로드하여 바로 적용 FLUSH PRIVILEGES; 유저 삭제 # 유저 삭제 DELETE FROM user WHERE user='USER_ID'; # 혹은 아래 방법 DROP USER 'root'@'%'; # 변경사항을 리로드하여 바로 적용 FLUSH PRIVILEGES; 비밀번호 변경 GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY '비밀번호'; # 변경사항을 리로드하여 바로 적용 FLUSH PRIVILEGES; 외부접속허용 # 모든 권한 부여 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '비밀번호'; # 변경사항을 리로드하여 바로 적용 FLUSH PRIVILEGES
관련 오류 qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "" This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. PyQt5 설치하기 # "venv" 환경에서 하면 좋습니다. pip install pyqt5 pip install pyqt5-tools 윈도우의 경우 환경변수 설정 환경변수 # 시스템 환경 변수에 추가 QT_QPA_PLATFORM_PLUGIN_PATH 경로...\venv\Lib\site-packages\PyQt5\Qt\plugins\platforms # 이후 컴퓨터 재부팅 후 디버그 하게 되면 정상적으로 될겁니다.
세션 남기기 # "크롬"을 실행 후 페이스북에서는 로그인 인증 문제가 발생되기 때문에 먼저 수동으로 로그인을 1회 진행하면 그 다음 크롬이 실행될때는 페이스북에 로그인 상태로 진행됩니다. import os dir_path = os.getcwd() profile = os.path.join(dir_path, "profile", "facebook") option = webdriver.ChromeOptions() option.add_argument(r"user-data-dir={}".format(profile)) ※ 참고로 리눅스에서 헤드레스로 실행한다고 해도 현재 방법으로 우회하거나 로그인을 시도하기 어려운 문제가 있어서 별도의 작업을 실행할 수 있는 프로그램화로 하는것을 추천 드립니다.
VENV로 디버깅 하기 VSCODE # "CTRL + `" 단축키로 터미널로 "CMD"로 연후 해당 디렉토리에서 "venv" 생성 python -m venv venv VSCODE VSCODE # "CTRL + SHIFT + P" 단축키로 "python: select Interpreter" 입력 후 "venv" 선택 이제 "venv" 환경에서 디버깅이 가능합니다. 관련 패키지 설치는 위와 동일하게 "CMD" 환경에서 하시면 됩니다.
사용자 모든 권한 부여 사용자 계정 사용자 계정 # "Ctrl + R" 이후 "netplwiz" 입력 후 위 사진 처럼 해당 계정 선택 후 속성 클릭 후 "그룹 등록"에서 관리자 부여 후 재부팅 VSCODE 관리자 모드로 실행 속성 # "C:\Users\사용자계정이름\AppData\Local\Programs\Microsoft VS Code" 와 같은 경로 이동 후 "VSCODE" 속성에서 "호환성" 탭에서 "관리자 권한으로 이 프로그램 실행" 체크 후 적용 "VSCODE" 실행 후 타이틀 오른쪽에 "[관리자]"라고 나오면 완료 CMD 터미널 권한 부여 cmd 속성 cmd 속성 cmd 속성 cmd 속성 # "C:\Windows\System32" 경로 이동 후 "cmd.exe" 파일 속성 "고급" 클릭 후 상단에 "소유자 변경" 클릭 하단에 사용자 계정 이름 입력 후 "이름 확인" 후 적용 다시 "보안" 항목에서 사용자 계정 선택 후 하단 "고급" 클릭 후 모든 권한 부여하기
VENV 환경에서 진행 # "venv" 환경 만들기 (이미 해당 한다면 패스) python -m venv venv # "venv" 환경 접속 source venv/bin/activate # "CMD" venv/Scripts/activate.bat # "CONDA" create -n venv python=3.8 conda activate venv 빌드하기 # "pyinstaller"으로 빌드 만약 없다면, 설치 pip install pyinstaller # ".spec" 파일이 만들어지면, "pathex", "binaries" 경로 설정 저의 환경은 "conda"이고 가상환경 "venv"를 만들었으니 아래 경로로 입력해주고 ".spec" 파일을 빌드해줍니다. 물론, "conda" 가상환경으로 진입해서 패키지들을 설치해줘야 합니다. pathex=['C:/ProgramData/Anaconda3/envs/venv'], binaries=[('C:/ProgramData/Anaconda3/env
윈도우 콘솔 막기 # ".spec" 파일에서 "[('v', None, 'OPTION')]," 부분을 추가하면 기존에 콘솔창을 열지 말라고 옵션을 줬던 부분이 적용됩니다. exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [('v', None, 'OPTION')], name='ShareFacebook', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False )
아이콘 적용하기 # ".spec"에서 데이터 추가 datas=[('...경로/favicon.ico', '.')], # 옵션에 "icon" 추가 exe = EXE(... console=False, icon='...경로/favicon.ico' )
타이틀바 아이콘(icon) 적용하기 # "QtGui" 추가 후 "QIcon"에는 풀 경로를 써준다. from PyQt5 import QtGui self.setWindowIcon(QtGui.QIcon("...경로/favicon.ico")) # ".spec" 파일에 "data" 경로 추가 datas=[('...경로/favicon.ico', '.')],
파일 수정하기 # 아래 링크로 이동하여 파일에 내용 수정 C:\Users\윈도우사용자계정이름\.vscode\extensions\liximomo.sftp-1.12.9\node_modules\ssh2-streams\lib\sftp. # 388번 라인 수정 후 VSCODE 재시작 if (code === STATUS_CODE.OK) { -> if (code === STATUS_CODE.OK || code === STATUS_CODE.NO_SUCH_FILE) { 참고 링크 Visual Studio Code sftp Error 문제해결 - Error: No such file 어제 VScode 버전업을 했는데 (Version: 1.56.0) 파일 저장을 하면 바로 Error 팡!! 엉? 뭐지 다행이 ... blog.naver.com
7.4 설치하기 sudo apt update sudo apt -y install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update sudo apt install -y php7.4-cli php7.4-fpm php7.4-bcmath php7.4-bz2 php7.4-common php7.4-curl php7.4-dba php7.4-gd php7.4-json php7.4-mbstring php7.4-opcache php7.4-readline php7.4-soap php7.4-xml php7.4-xmlrpc php7.4-zip php7.4-ctype php7.4-pdo php7.4-redis php7.4-mysql php7.4-imagick php7.4-intl
function* expression function* [name]([param1[, param2[, ..., paramN]]]) { statements } name : 함수명. 생략하면, 익명 함수가 됩니다. 함수명은 함수내에만 한정됩니다. paramN : 함수에 전달되는 인수의 이름. 함수는 최대 255 개의 인수를 가질 수 있습니다. statements : 함수의 본체를 구성하는 구문들 예제 function* foo() { yield "비"; yield "킹"; } let str = ""; for (const val of foo()) { str = str + val; } console.log(str); -> 비킹 -------------------- function* foo() { yield 1; yield 2; yield 3; yield 4; yield 5; } let str = 0; for (const val of foo()) { str = str + val; } conso
yield yield 키워드는 제너레이터 함수 (function* 또는 레거시 generator 함수)를 중지하거나 재개하는데 사용됩니다. 예제 function* foo(){ var index = 0; while (index <= 2) // 인덱스가 3에 도달하면 yield은 true가 되고 그 값은 정의되지 않습니다. yield index++; } var iterator = foo(); console.log(iterator.next()); // { value: 0, done: false } console.log(iterator.next()); // { value: 1, done: false } console.log(iterator.next()); // { value: 2, done: false } console.log(iterator.next()); // { value: undefined, done: true } yield* yield* 표현식은 다른 generator 또는 이터러
Promise Promise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다. Promise의 작동 방식과 Promise 사용 방법에 대해 알아보려면 먼저 Promise 사용 방법을 읽어 보십시오. 속성 "Promise.length" : 값이 언제나 1인 길이 속성입니다. (생성자 인수의 수) "Promise.prototype" : Promise 생성자의 프로토타입을 나타냅니다. 메서드 "Promise.all(iterable)" : iterable 내의 모든 프로미스가 이행한 뒤 이행하고, 어떤 프로미스가 거부하면 즉시 거부하는 프로미스를 반환합니다. 반환된 프로미스가 이행하는 경우 iterable 내의 프로미스가 결정한 값을 모은 배열이 이행 값입니다. 반환된 프로미스가 거부하는 경우 iterable 내의 거부한 프로미스의 이유를 그대로 사용합니다. 이 메서드는 여러 프로미스의 결과를 모을 때 유용합니다. "Promise.race(iterable)"
객체 객체는 new Object(), Object.create(), 중괄호({})로 묶인 형태입니다. 예제 const object1 = { a: 'foo', b: 42, c: {} }; console.log(object1.a); -> foo const a = 'foo'; const b = 42; const c = {}; const object2 = { a: a, b: b, c: c }; console.log(object2.b); -> 42 const object3 = { a, b, c }; console.log(object3.a); -> foo
오류 해결하기 vscode # 위 사진 처럼 "vscode" 속성으로 들어가 호환성에서 "호환 모드" "이 프로그램을 실행할 호환 모드" 해제를 해주시면 됩니다.
CPython && RPython "CPython" C로 작성된 파이썬 구현체, 가장 널리 쓰임 인터프리터 & 컴파일러(파이썬 코드 -> 바이트코드 컴파일 & 한줄씩 번역하는 인터프리터 기능) "RPython" 파이썬의 부분 집합, PyPy 개발 위해 등장, 표준 파이썬과 다르게 정적 타입 사용 파이파이(PyPy) 기존의 파이썬은 생산성은 좋으나 성능이 낮았다. 이를 보완하기 위해서 나온것이 파이파이(PyPy) 입니다. JIT(just-in-time) 컴파일 사용하기 때문에, 속도가 더욱 빠르다.
append vs extend performance # "append"의 경우 작은 데이터일 경우 "extend"와 크게 성능차이가 나지 않는다. 다만, 데이터가 커질 수록 데이터양에 따라서 "extend"가 더 빠르다. 테스트 append extend # 여러번 테스트를 해봐도 "extend"가 더 빠르다. 참고 링크 Python List append() vs extend() | Finxter Python List append() vs extend() Python / By Chris A profound understanding of Python lists is fundamental to your Python education. Today, I wondered: what’s the difference between two of the most-frequently used list methods : append() vs. extend() ? I shot a small video exp
가변인자 def profile(name, age, *language): print("이름 : {0}\t나이 : {1}\t언어 :".format(name, age), end=" ") for lang in language: print(lang, end=" ") profile("홍길동", 20, "Python", "Java", "C", "C++", "C#") -> 이름 : 홍길동 나이 : 20 언어 : Python Java C C++ C#
표준입출력 print("Python", "Java") -> Python Java ---------- print("Python" + "Java") -> PythonJava ---------- print("Python", "Java", sep=",") -> Python,Java ---------- print("Python", "Java", "JavaScript", sep=" vs ") -> Python, Java, JavaScript ---------- print("Python", "Java", "JavaScript", sep=",", end="?") print("가나다라마바사") -> Python,Java?가나마다라마바사 "items()"를 사용하면 "Key", "Value"를 가져옴 "ljust"는 왼쪽 정렬, "rjust"는 오른쪽 정렬 scores = {"수학":0, "영어":50, "코딩":100} for subject, score in scores.items(): print(
다양한 출력포맷 빈 자리는 빈공간으로 두고, 오른쪽 정렬을 하되, 총 10자리 공간을 확보 print("{0: >10}".format(500)) -> 500 양수일 땐 + 표시, 음수는 -로 표시 print("{0: >+10}".format(500)) print("{0: >+10}".format(-500)) -> 500 +500 -500 왼쪽 정렬하고, 빈칸으로 _로 채움 print("{0:_<10}".format(500)) -> +500________ 3자리 마다 콤마 찍기 print("{0:,}".format(10000000)) print("{0:+,}".format(10000000)) print("{0:-,}".format(10000000)) -> 10,000,000 -> +10,000,000 -> -10,000,000 3자리 마다 콤마 찍고, 부호, 자릿수 확보, 빈자리 ^ print("{0:^<+30,}".format(10000000)) -> +10,000,000^^^^^^
with "with"를 통해서 간단하게 파일을 "입출력" 할 수 있다. with open("test.txt", "r", encoding="utf8") as file: print(file.read()) -> 테스트
클래스(상속) 다른 클래스를 상속 받을 수 있다. class profile: def __init__(self, name, age): self.name = name self.age = age class people(profile): def __init__(self, name, age, hobby): profile.__init__(self, name, age) self.hobby = hobby def introduce(self): print("이름 : {0} 나이 : {1} 취미 : {2}".format(self.name, self.age, self.hobby)) user = people("홍길동", 20, "축구") user.introduce() -> 이름 : 홍길동 나이 : 20 취미 : 축구 클래스(다중상속) class profile: def __init__(self, name, age): self.name = name self.age = age class career: def _
try-except-else-finally 코드 설명 try 에러 발생 가능성이 있는 코드 실행 except 에러 발생 시 (생략 가능, 여러개 사용 가능) else 에러가 발생하지 않았을 경우 실행 (생략 가능) finally 항상 실행 (생략 가능) name = 'Kim' try: if name == 'Lee': print('OK') else: raise ValueError except ValueError: print('Error!') except Exception as e: print(e) else: print('Completed!') 예외처리(try except) "except"는 여러번 사용이 가능 try: .... except SyntaxError: print("잘못된 문법") except NameError: print("참조변수 없음") except ZeroDivisionError: print("0으로 나눌 수 없음) except IndexError: print("인덱스