Latest Posts

[Python] utf-8 문자열을 MariaDB(Mysql)에 insert하기

Posted on 2017-03-02 18:54:06

Python에서 MySQLdb 라이브러리를 사용하여 MariaDB(Mysql)에 문자열을 insert할 때, 일본어가 깨지는 문제가 발생하였다. DB의 캐릭터셋은 utf-8으로 설정되어 있었다. MariaDB [(none)]> show variables like 'c%';+--------------------------+---------------------------------------------------------+| Variable_name | Value |+--------------------------+---------------------------------------------------------+| character_set_client | utf8 || character_set_connection | utf8...

[Linux] logrotate로 사용자 로그를 rotation하는 방법

Posted on 2017-02-27 22:43:55

Logrotate는 리눅스에서 로그를 rotation하고 백업하는 데 사용하는 유틸리티이다. 여기서는 logrotate로 사용자 로그(custom log)를 rotation하는 방법에 대해 간략히 설명한다.   • logrotate로 사용자 로그를 rotation하는 방법 1. /etc/logrotate.d에 config file를 추가한다. 여기서는 mywebapp이라는 이름의 config file을 추가한다.   2. /etc/logrotate.d/mywebapp 파일에 다음과 같은 내용을 추가한다. /var/www/example.com/logs/*.log { weekly rotate 4 missingok notifempty create 644 root root postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true ends...

[Laravel5] log rotation 설정

Posted on 2017-02-26 21:45:15

Laravel은 기본적으로 하나의 파일에 로그를 기록한다. 로그파일은 storage/logs 디렉토리에 있고 파일명은 laravel.log이다. 개발시에는 하나의 파일에 로그를 계속 기록해도 큰 문제는 없겠지만, 실서비스에서는 로그파일이 매우 커져서 디스크 공간이 부족해질 가능성이 있다. 그래서 log rotation을 해 주어야 하는데, Laravel framework는 이 기능을 지원하므로 logrotate와 같은 유틸리티를 사용하지 않아도 된다. config/app.php를 보면 log option이 'single'로 설정되어 있는데, 이 경우 하나의 파일에 로그를 계속 기록한다. log option을 'daily'로 변경하면 매일 log rotation이 된다. 그리고 log option이 'daily'인 경우, Lara...

[Linux] find utility 사용법

Posted on 2017-02-24 20:49:49

find utility 사용예제를 기록해둔다. • 이름으로 파일 찾기 find . -name “*.class” -exec rm {} \; • 수정된 날짜로 파일 찾기 find . -mtime +7 -exec rm {} \; (수정된 지 7일이 지난 파일을 찾아서 삭제)find . -mtime 7 -exec rm {} \; (수정된 지 7일이 된 파일을 찾아서 삭제)find . -mtime -7 -exec rm {} \; (7일 이내에 수정된 파일을 찾아서 삭제) • find all of the distinct file extensions in a folder hierarchy find . -type f -name "*.*" | awk -F. '{print $NF}' | sort -u    

[Bash] parameter를 처리하는 방법

Posted on 2017-02-22 21:29:18

Bash는 parameter 처리에 독특한 문자들을 사용한다. 잊어버리기 쉬운 내용이여서 기록으로 남긴다. • parameter 설명 Parameter Description $# the number of arguments, not counting $0 $@ all positional parameters except $0 $* all positional parameters except $0 $0 the first positional parameter, equivalent to argv[0] in C $1 ... $9 the argument list elements from 1 to 9   • check the number of arguments if [ $# -ne 2 ]; then echo "Usage: $0 param1 param2" exit -1else echo "ok" fi   • iterate command line arguments for ar...

Refused to display in a frame because it set 'X-Frame-Options' to 'DENY'. 에러의 원인과 해결방법

Posted on 2017-02-22 17:25:23

laravel-filemanager가 제대로 동작하지 않는 문제를 발견했다. 서버쪽 로그에는 별다른 메시지가 없었고, 크롬 개발자도구를 이용하여 원인을 분석하다가 아래와 같은 에러메시지를 발견하였다. Refused to display 'https://slobell.com/...' in a frame because it set 'X-Frame-Options' to 'DENY'.  구글에서 검색을 좀 해보니, X-FRAME-Options는 Clickjacking 공격을 방어하기 위해 사용된다고 한다. X-FRAME-Options는 브라우저가 <frame>, <iframe>, <object> 내의 페이지를 렌더링할지 여부를 지정하는 데 사용된다. 타사이트에 자신의 컨텐츠가 포함(embed)되는 것을 막아서, clickjacking 공격을 회피하는...

[Bash] bash script에서 파일의 내용을 읽는 방법

Posted on 2017-02-19 20:37:44

• 파일 내용을 변수에 저장하기 value=$(<file.txt)echo "$value"   • 파일 내용을 한 줄씩 읽기 while read line; do echo $line done < file.txt

[Laravel5.4] migration시에 "Specified key was too long" 에러가 발생하는 문제의 해결방법

Posted on 2017-02-18 23:45:28

Laravel5.4에서 migration 실행시에 다음과 같은 에러가 발생하였다. $ php artisan migrateMigration table created successfully.[Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `u sers` add unique `users_email_unique`(`email`)) [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes   이 문제에 대한 원인과 해결방법을 Laravel 공식문서에서 찾을 수 있었다. https://laravel.com/docs/5.4/migrations#creating-in...

[Laravel5] blade template에서 변수를 선언하는 방법

Posted on 2017-02-17 20:32:52

Laravel 5.2부터 blade template에서 다음과 같은 방법으로 변수를 선언하는 것이 가능해졌다. 1. single statement @php ($count = 0) 2. block statement @php    $count = 0@endphp  

[Linux] crontab 사용법

Posted on 2017-02-15 21:13:57

주요 옵션 crontab -l : crontab에 등록된 작업목록 보기crontab -e : crontab 편집crontab -r : crontab에 등록된 작업목록을 모두 삭제   등록 형식 매 줄마다 아래와 같은 포맷으로(6개 필드) crontab에 등록할 작업을 기술한다. * * * * * command   field allowed values 1 minute 0-59 2 hour 0-23 3 day of month 1-31 4 month 1-12(or names, see below) 5 day of week 0-7(0 or 7 is Sun, or use names) 6 command  실행할 명령어   예제 * * * * * /home/user/test.sh-> 1분마다 test.sh를 실행(한 시간에 60번 실행)*/10 * * * * /home/use...

[Linux] tar: Removing leading `/' from member names 메시지의 원인과 해결방안

Posted on 2017-02-14 21:15:12

tar로 파일들을 묶을 때, tar: Removing leading `/' from member names 메시지가 출력되었다. 구글에서 검색을 해 보니, 절대경로(absolute path)를 사용할 때 이런 메시지가 뜬다고 한다. tar로 파일들을 묶을 때 절대경로를 사용하면 보안상의 문제점이 있다고 한다.(보안에 대해 잘 몰라서 정확히 어떤 문제인지는 모르겠지만) $ tar cvf backup.tar /home/user/data/backuptar: Removing leading `/' from member names...   해결방법은 아주 간단하다. 아래와 같이 절대경로 대신에 상대경로(relative path)를 사용하면 된다. 그러면 위의 메시지가 뜨지 않는다. $ cd /home/user/data$ tar cvf backup.tar backup...  ...

[Linux] tar, gzip 명령어 사용법

Posted on 2017-02-13 22:23:56

• tar 사용법 묶기 : tar cvf backup.tar backup_dir묶은 파일 내용 보기 : tar tvf backup.tar묶은 파일 풀기 : tar xvf backup.tar   • gzip 사용법 압축하기 : gzip backup.tar-> backup.tar 파일은 사라지고 backup.tar.gz 파일이 생성된다.압축풀기 : gzip -d backup.tar.gz-> backup.tar.gz 파일은 사라지고 backup.tar 파일이 생성된다.   • tar와 gzip을 같이 사용하기 묶고 압축하기 : tar cvfz backup.tar.gz backup_dirtar.gz 파일의 내용 보기 : tar tvfz backup.tar.gz압축 해제하고 묶은 파일 풀기 : tar xvfz backup.tar.gz    

[Laravel5] timestamps(updated_at column)를 touch하지 않고 update하는 방법

Posted on 2017-02-09 16:31:18

블로그 Post가 클릭되면 pageview를 하나 증가시키는데, 이때 timestamps(updated_at 컬럼)도 같이 갱신되는 문제가 있었다.로그를 보면 pageview뿐만 아니라 updated_at 컬럼도 갱신되는 것을 볼 수 있다.  $post = Post::findOrFail($id);$post->increment('pageview'); [2017-02-09 15:49:32] local.INFO: sql => update `posts` set `pageview` = `pageview` + 1, `updated_at` = ? where `id` = ? [2017-02-09 15:49:32] local.INFO: array (0 => '2017-02-09 15:49:32',1 => 2,) [2017-02-09 15:49:32] local.INFO: elapsed time => 0.37   timestamps를 touch하지 않고 update하려면 아래와 같이 timest...

[CentOS7] 방화벽(firewall) 사용법 요약

Posted on 2017-02-08 22:46:17

• 방화벽 서버 시작 sudo systemctl start firewalld • 서버 부팅시 방화벽 서버를 자동으로 시작 sudo systemctl enable firewalld   • 방화벽 상태 체크 sudo firewall-cmd --state   • 사용 가능한 모든 서비스/포트 목록을 조회 sudo firewall-cmd --list-all   • 포트 추가 sudo firewall-cmd --permanent --zone=public --add-port=80/tcp   • 포트 삭제 sudo firewall-cmd --permanent --zone=public --remove-port=80/tcp   • 서비스 추가 sudo firewall-cmd --permanent --zone=public --add-service=http  ...

[Laravel5] altisan command 사용법 요약

Posted on 2017-02-02 21:38:55

• php built-in 개발서버 실행 php artisan serve   • laravel version 확인 php artisan --version   • route list 보기 php artisan route:list   • controller, model class 생성 php artisan make:controller PhotoController --resource --model=Photo   • migration 파일 생성 php artisan make:migration create_users_table   • migration 실행 php artisan migrate   • migration rollback php artisan migrate:rollback -> 가장 마지막에 실행한 migration들을 rollbackphp artisan migrate:rollback --step=1-> 가장 마지막에 실행한 mig...

[Laravel5] 실행된 sql query의 로그를 기록하는 방법

Posted on 2017-01-26 20:42:10

방법은 간단하다. 아래와 같이 Service provider에 query listener를 등록하면 된다. • app/Providers/AppServiceProvider.php use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Log;class AppServiceProvider extends ServiceProvider{ public function boot() { DB::listen(function ($query) { Log::info("----------------------------------------------------------------"); Log::info('sql => ' . $query->sql); Log::info($query->bindings); Log::info('elapsed time => ' . $query->time); }); } ......}  ...