Category Archives: Tech

iOS 14, 완전히 변한다고?

iOS 14 업데이트 기능, 완전히 변한다고?

올 가을 공개될 iOS 14, 홈화면이 바뀐다!

올 가을에 정식 공개될 iOS 14, 성능 뿐만아니라 홈화면도 개선된다고 한다.

먼저 14버전을 확인하고 싶은 사람은 베타 소프트웨어를 신청해서 , 미리 사용해 볼 수 있다.
아직 정식버전이 아니니까.. 안쓰는 핸드폰으로 하는 것을 추천한다.
링크는 여기!
(iOS 14 베타 신청 링크) //beta.apple.com/sp/ko/betaprogram/

애플 아이콘
이미지 출처 : //www.youtube.com/user/Apple

아이폰을 쓰면서 항상 아쉬웠던게, 핸드폰을 잡을 때 보통 아래에서 받쳐 드는데, 그러다보면, 상위에 위치해 있는 아이콘(앱)들은 클릭이 힘들다. 그렇다고 위젯이 있는 것도 아니라, 항상 배경화면에 가득 채운 아이콘들로 사용하지도 않는 아이콘을 최상위에 놔두고 썼었다.

근데 이젠 안드로이드 기기에서 즐겨 썼던 “위젯” 기능도 추가된다고 하니, iOS 14 기대된다.





이번 iOS 14 에 출시 될 핵심기능 4가지

  • 위젯
  • 앱 서랍
  • 플로팅 노티스(?)
  • 최소화 영상 재생

이 외에도 몇가지 색다른 기능이 있다고는 하는데, 와닿는건 이거 4개 정도다





위젯

구글 안드로이드를 사용할 당시에는 위젯을 항상 만들어두고 사용했던 기억이 난다. 대표적으로 위젯으로 많이 사용했던 것들이 달력, 디데이, Todo리스트, 날씨 정도를 많이 사용했다. 뭐 물론 기존 iOS에서도 위젯이라는 기능이 있었으나, 오른쪽으로 슬라이드를 해야지 위젯을 볼 수 있었다. 하지만 이번에 업데이트의 위젯은 홈화면에서 아무런 조작을 하지 않고도 날씨 같은 간단한 정보를 바로 확인하는 위젯 기능이다.

물론, 베타 테스트를 사용해본 일부 경험자의 리뷰에 따르면, 위젯을 옮기고 설정하는 게 좀 불편하다는 평이 있었긴 했다.





앱서랍

이 기능도 구글안드로이드에서 일부 차용되었다고 생각된다. 아이폰을 사용하면서 불편했던 점.
“앱들이 전부 홈화면에 있다.”
설치한 모든 앱들이 화면에 표시되고 있어서, 사용하지 않는것들은 다른페이지에 몰아 넣은 사람도 있을 거고,
폴더에 다 때려(?)넣은 사람도 있을 것이다. 이렇다 보니, 아이폰 사용자들은 홈화면을 최소 3페이지, 많게는 10페이지 가량을 사용할 수 밖에 없었다. 이제 앱서랍 기능을 이용해서, 사용하지 않는 앱, 혹은 사용빈도가 낮은 앱들은
“앱서랍”에 넣고 사용할 때 꺼내 쓸 수 있는 기능이 생겼다.





플로팅 노티스

아이폰 사용자라면 항상 느꼈을 법한, 전화가 왔을 때 모든 화면을 가려버리는 불편함. 이번 업데이트는 그 업데이트를 조금 덜어 주기 위함이라고 생각한다.
전화가 왔을 때, 혹은 시리가 켜졌을 때 전체 화면을 가리지 않고, 동그란 원이 하나 나와서, 전화를 받거나 거절, 또는 시리를 실행 시킬 수 있다.

근데 그렇다고 해도.. 플로팅만 되어 있을 뿐 다른 작업은 할 수 없다고 한다.





최소화 영상 재생

이건 좋은 기능인지는 모르겠는데, 유튜브, 넷플릭스 등과 같이 동영상 플랫폼을 홈화면에 최소화 해서 동영상을 실행시키는 기능도 생겼다고 한다. 가뜩이나 핸드폰이 작아서, 뭐 얼마나 이 기능을 사용할지는 모르겠지만, 이제 동영상보면서 카톡정도할 수 있는 정도가 다 일것 같다.

GK888B – 개발자(타이피스트)의 키보드, 한성 무접점 GK888B

개발자 키보드 한성, 무접점 키보드 GK888B

왜 이 키보드를 골랐나?

GK888B 를 1년 조금 안되게 사용중이다. 뭐 물론 키보드가 너무 괜찮은 것 같아서,
사무실에서도 집에서도 다 사용중 (글쓴이는 2개 구매…) 이다.
이렇게 사각사각 거리는 좋은 느낌을 받은 키보드는 처음 !

힌성 GK888B 미니. 화이트 색상이다. 처음에 샀던 건 블랙색상! 이건 집에서 쓰고 있는 화이트 색상이다.

처음엔 키보드 고민을 되게 많이했다.
무접점하면 대표적으로 , 리얼포스, 해피해킹이니까. 한성 키보드는 옵션에도 없었다.
그런데 내가 원하는걸 다 충족하는 건, GK888B 밖에 없더라.

내가 찾던 키보드의 필수 사항

  • 텐키리스 (오른쪽 숫자키가 없는 것)
  • 무접점 키보드 (타입핑을 너무 많이 하다보니 손까락 관절염이..)
  • 유무선 – 윈도우에서도 쓸 수 있고, 맥에서도 쓸 수 있는 무선 키보드

(위와 같은 키보드를 찾으시는 분이라면 , 다른거 따지지 말고 GK888B 로 가면 될 것 같다.)

이 모든 사항을 만족하는 키보드는 그 때 당시에는 GK888B 밖에 없어서 고르게 되었다.
가격도 그 때 당시 이벤트 중이어서 나름 10만원정도로 구매했던 기억이 있다.

이제 그럼 한성 노뿌 무접점 키보드에 대해 알아보자.





첫째, 텐키리스

왜 그럼 텐키리스여야만 했나? 내 개발 환경은, 그리 넓은 편이 아니다.
가로 2m 남짓, 세로 약 60cm 의 테이블에, 24인치 모니터가 두개가 있고,
그 왼쪽편에는 맥북이.. 그리고 바닥에는 윈도우 컴퓨터 본체가

그러다 보니 내 책상위에는 키보드가 쭉 길게 차지하기에는 협소한 형태였다.
그 전에는 체리 기계식 키보드를 사용하고 있었는데, 너무 좁아서 어쩔 수 없이 텐키리스로 가야만했다.

근데 텐키리스를 사용하다보니, 오른쪽팔의 움직임이 줄었다. 마우스랑 키보드 사이가 많이 가까워지다 보니 많이 편한 것 같다.





둘째, 무접점

왜 무접점이어야만 했나? 글쓴이는 키보드를 좀 세게 누르는 경향이 있어, 키보드를 누를 때 그 반동이 손가락 관절로
바로 전달되었다. 그래서 두-세시간 타입핑을 하다보면 손가락에 조금씩 무리가 오기 시작했다.

그래서 무접점 키보드는 완전히 다 누를 필요가 없이, “구름타법”이라는 타법으로 치면 손가락에 피로가 많이 준다는 것을 알아냈고, 무접점 키보드를 사용해 보았다. 근데 역시 신세계였다.

처음에는 이게 누른거야 만거야 하는 되게 묘한 감정이 들었는데, 계속 치다보니 구름타법이라는 것이 이런거구나. 하는 마음과 동시에 손가락 통증이 많이 줄었음을 느낄 수 있었다.

리얼포스 45g 을 써봤는데 생각보다 무겁더라
근데 한성 GK888B는 50g, 그래서 무거울거라고 생각했는데, 써보니까 별반 차이는 없더라.

그리고, 한성 키보드에는 30g 짜리 러버돔으로 교체할 수 있어서, 키보드 구매하면서 바로 러버돔도 구매해서 교체했다.

그랬더니 진짜 내가 찾던 키보드가 되었다.





셋째, 블루투스 가능 키보드

윈도우, 맥북 두 기기를 동시에 쓰다보니, 키보드 하나로 쓸 수 있는 키보드를 찾고 있었다. 근데,
GK888B 가 내 필요를 충분히 충족시켜주고 있었다.

윈도우 PC는 유선으로 그냥 연결해두고, 맥북을 사용할 때는 키보드 전원을 키고,
[FN] + F12 키를 눌러 무선으로 연결해서 쓸 수 있는 유일한 키보드 였다.

PC를 사용 중에도 그냥 [FN] + [F12] 키로 맥북으로 바로 변경하여 무선으로 사용 할 수 있다.

그래서 내 책상엔 이제 , 키보드 두개가 아니라 깔끔하고 미니멀한 키보드하나만 놓고
두 기기를 동시에 쓸 수 있는 좋은 환경이 되었다.

사무실 컴퓨터는 맥북인데, 블루투스 기능은 사실 필요가 없다.
근데 이 키보드 배열도 너무 좋고 키감도 너무 좋아서 같은걸로 사서 구매해야겠다고 결정했었는데,

다 품절 되어 있어서 2주정도 기다렸던 것 같다.
어쩔 수 없이, 2주 기다리고 검은색도 하나 구매하고, 키캡도 교체해서 사무실에서 사용중이다 🙂

GK888B 키캡 교체.

한성컴퓨터 GK888B minicoup 무선키보드 블루투스 무접점, 블랙

PHP 슬랙 연동 – 웹훅 !

“PHP 슬랙 연동” 하기 !

PHP 슬랙 연동 , So called- 웹훅!

프레임워크를 사용하지 않아서, PHP 어디에서든 사용이 가능합니다

웹서비스를 사용하다 보면 노티를 받아야할 일이 의외로 많다. 어떤 서비스를 하느냐에 따라 천차만별이긴 하겠지만,
크게 세가지 경우 정도 있을 것으로 생각된다.

  • 서비스가 정상적으로 작동하는지 확인할 때 (서버다운, exception 발생 등)
  • QNA 등, 실시간으로 사용자에게 응대해야 할 때
  • 백그라운드 프로세스가 잘동작하고 있는지 모니터링

(시간이 되면 해당 3개 리스트를 어떻게 설정하는지도 쓰겠다)

물론 나보다 경험이 많은 사람들은 이 이외에도 노티피케이션 받아야할 경우가 더 많이 있다는 걸 알 것이다.
근데 지금까지 경험해본바로는 저 3개정도가 되는 것 같다.

그렇다면, 어떻게 PHP 코드로 슬랙 웹훅을 연동할까?






Slack api website
출처 : //api.slack.com/





Prerequisite

서비스에 들어가기 전에, 슬랙 웹훅 서비스를 활성화 시켜야한다. 어떻게하는지 모르신다면 위의 글을 클릭.

꼭!!!!!!!!!!!!!!



PHP 슬랙 연동 코드 작성하기

슬랙 자동 알림 기본 설정 방법 (웹훅) 를 잘 따라 했다면, URL 하나를 받았을 것이다.
(예 : hooks.slack.com/services/AAAAAAAAA/BBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCC)



1. 받은 URL 을 $request_url 변수로 지정

$request_url = 
     "hooks.slack.com/services/AAAAAAAAA/BBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCC"



2. 메시지 데이터 생성 및 설정

$data = array("text" => "Server has been stopped");
$json_data = json_encode($data);



3. CURL-ing

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type:application/json",
));

$response = curl_exec($ch);

curl_close($ch);





여기까지만 하면 슬랙 연동이 되는 것을 확인할 수 있다.





전체코드 및 함수화 + 클래스화 ( 가져다 쓰세요! )

함수화

public function send_message($msg){
    $request_url = "THE GIVEN URL COMES HERE";
    $data = array("text" => $msg);
    $json_data = json_encode($data);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $request_url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Content-Type:application/json",
    ));

    $response = curl_exec($ch);
    curl_close($ch);
}

클래스화

[Slack.php]
<?php 
namespace Utils;  // optional
class Slack {
    const REQUEST_URL = "THE GIVEN URL COMES HERE";    
    // 컨스트럭트는 필요 없습니다 !

    public function send_message($msg){
        $data = array("text" => $msg);
        $json_data = json_encode($data);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::REQUEST_URL);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "Content-Type:application/json",
        ));

        $response = curl_exec($ch);
        curl_close($ch);
    }
}
[Others.php]
<?php
require_once('Slack.php');

Utils\Slack::send_message("Hello world");
?>

클래스화에 나와있는 namespace 는 옵션이다. 당연, namespace 를 사용하지 않아도 된다.
근데 Slack 이라는 이름의 클래스가 왠만하면 하나씩은 있을 거기 때문에 임의로 Utils 라는 이름으로 namespace 넣어두었다.
Namespace 를 사용하지 않고 함수 콜을 하는 방법은,

[Others.php]
<?php
require_once('Slack.php');

Slack::send_message("Hello world"); // 앞에 Utils 만 빼주면 된다.
?>

슬랙 자동 알림 기본 설정 방법 (웹훅)

슬랙 자동 알림 설정,
예전만 해도, 서버에 문제가 있거나 상태 메시지를 확인하기 위해서, 이메일을 주로 활용해 왔다.
이메일 활용을 하는 것의 단점은, 이메일 노티피케이션 항상 켜두어야 하는 것.
가끔 원치 않는 이메일에서도 노티피케이션이 오니.. 이메일로 알림을 설정하는 것은 별로더라.

슬랙 자동 알림 설정

이제 이메일 알림 설정은 그만 쓰자

슬랙을 알림으로 자동 설정하기 위해서는 ..

가 기본적으로 다 되어 있어야 한다.

첫번 째인 슬랙 계정은.. 알아서 회원가입 하면 된다. (//slack.com/) 여기 가서 회원가입 하면됨 !

둘째 알림을 받을 슬랙 채널을 생성해야 한다. 물론 이미 생성해 둔 채널을 사용해되 되는데,
서버 관리측면을 위해서라면, 채널을 하나 만든 뒤, 24시간 동안 알림을 안꺼두는 채널용(?) 으로 만드는 것을 추천한다.

그럼 채널은 어떻게 만들까? (다 알지만 그래도..) 글로 설명하자면, 왼쪽에 채널 리스트가 있는 곳에 Channels 라고 카테고리가 있는데, 그 카테고리 약 2~4cm 오른쪽에 [ + ] 키를 누른 뒤 [ Create a channel ] 을 누르고, 그리고 원하는 채널 명을 써서 [ Create ] 를 누르면 된다.

물론 위에서 내가 글로 설명하고자 한건 장난이다… 이미지 첨부한다

슬랙 자동 알림 설정 1
단계 1 Channels [ + ] 클릭 > [ Create a channel ] 클릭
슬랙 자동 알림 설정 2
단계 2 원하는 서버의 이름을 설정한다.

채널까지 다 만들어 졌다면, 이제 웹훅을 받을 거라는 걸 해당 채널에 설정해야한다.
설정을 하기 위해서는 ,

웹훅 설정 //api.slack.com/messaging/webhooks

여기에 들어가서 하면 된다 !

해당 링크에 보면 [Create your Slack app] 이라는 버튼을 찾을 수 있다. 해당 버튼을 클릭해보자.
그럼 아래와 같이 Create 할 수 있는 모달(팝업)이 뜬다.

슬랙 웹훅 연동 모달
사용하고자 하는 워크스페이스 선택 !

App Name 에는 그냥 Server notification 이라고 써두었고, 워크스페이스는 아까 만들었던 채널이 존재하였던 워크스페이스를 선택하면 된다.

모든 선택이 끝난 후, [ Create App ] 을 누른다.

그럼 아래와 같은 화면이 공유될 것이다.

앱 생성 완료
앱 생성 완료 후, 페이지

앱 생성이 끝난 뒤, Settings – Basic Information 페이지를 보면 Incoming Webhook 이라는게 나온다. 해당 링크를 클릭한다.

링크를 클릭하고, On 으로 Incoming Webhook 을 활성화 시켜준다.

활성화가 된 뒤, 화면.

활성화가 끝나고 나면, 웹훅을 생성할 수 있는 버튼이 나온다. [ Add New Webhook to Workspace ]

그럼 모달(팝업)이 하나가 생성되는데, 어떤 채널을 할건지 묻는 창이 나온다. 만들어 두었던 #server_notification 채널을 선택하고 만들기를 누른다.
그럼 curl 명령어가 나오는데, 그걸 한번 콘솔에 복사해서 실행해보자.

$ curl -X POST -H 'Content-type: application/json' --data 
  '{"text":"Hello, World!"}'
  //hooks.slack.com/services/AAAAAAAAA/BBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCC

curl 이 제대로 설정되어 있다면, (혹은 잘 설치가 되어있다면), 생성했던 channel (#server_notification) 에 알림이 오는 것을 확인할 수 있다.

그렇다면, 이렇게 설정을 했는데 어떻게 자동화를 시켜야할까?




다음엔 webserver 를 활용해서, 자동화를 시키는 방법을 알아보자

  • PHP 를 활용해서, 슬랙에 알림보내기
  • NodeJS를 활용해서, 슬랙에 알림보내기
  • Bash Script 를 활용해서, 슬랙에 알림보내기

초 단위 크론 실행 가능할까? “당연!”

linux 운영체제로 서비스를 관리하다보면, “초 단위 크론 실행” 을 필요로 할 때가 있다.
하지만 리눅스 운영체제에서는 분단위 실행을 기본으로 한다.

그렇다면 어떻게 하면 초단위 실행이 가능할까?

예제와 앞서, 크론에 별(*) 설정을 가르쳐주는 유용한 사이트가 있다!
[여기-//crontab.guru/]

크론 초 단위 실행

분 단위가 기본인데 초단위로 실행이 가능하다고?

크론의 경우 위에서 말한 바와 같이 분 단위 실행이 기본이다

$cronjob -e

* * * * * /byminute.sh;

의 경우 매 분마다 byminute.sh 파일이 실행 된다.

그렇다면 우선 30초마다 실행 시키는 크론 스크립트를 만들어보자.






computer and coffee from unsplash.com
출처 : //unsplash.com/@laurenmancke

우선, “30 초 단위 크론 실행” 을 미리 알아보자

해당 작업을 하려면, 두가지 방법이 있다. (물론 더 있을 수 있음)

  • “.sh” 파일에 시간단위 추가하기 (실생활엔 많이 안쓰임)
  • 크론탭에 추가하기

하지만 sh 파일을 수정하는 건 실생활에서 크게 쓰이지 않는다. (사실 사용해본적은 없고, 이론적으로만…..)
따라서, .sh 파일에 시간단위 추가하는 것은 뒤에 설명하기로 하겠다.
(힌트 : .sh 파일에 추가는 while/done sleep 명령으로 실행 가능하다)


크론탭에 추가하기

$ crontab -e

* * * * * /run_1.sh
* * * * * /run_2.sh

기본적으로 분 단위 실행 크론이 있다고 가정해보자. 이 두가지는 어떻게 실행될까?

run_1.shrun_2.sh 는 동시에 실행 될 것이다. 크론에 저렇게 추가 되어 있다고 해서,
run_1.sh 가 실행된 뒤 run_2.sh 가 실행되진 않는다. (절때!)
그렇다면 위에 제시된 걸 기준으로,

$ crontab -e

* * * * * /run_1.sh
* * * * * sleep 30; /run_2.sh

이렇게 하면 어떻게 될까?

첫번째 줄과 두번째 줄은 동시에 실행될 것이다. 하지만 두번째 스크립트는 30초간 슬립한 뒤 run_2.sh 를 실행하게 된다. 결론적으로 보자면?

==> 첫번째 run_1.sh 가 실행된 뒤, 30초 뒤에 run_2.sh 가 실행된다.

run_1.sh 를 30초 간격으로 실행시키고 싶다면,

$ crontab -e

* * * * * /run_1.sh
* * * * * sleep 30; /run_2.sh

그렇다면 , 매 5초간은 어떻게 실행시킬까?





“5 초 단위 크론 실행”

위의 30초단위를 예 삼아,

$ crontab -e

* * * * * /run.sh
* * * * * sleep 05; /run.sh
* * * * * sleep 10; /run.sh
* * * * * sleep 15; /run.sh
* * * * * sleep 20; /run.sh
* * * * * sleep 25; /run.sh
* * * * * sleep 30; /run.sh
* * * * * sleep 35; /run.sh
* * * * * sleep 40; /run.sh
* * * * * sleep 45; /run.sh
* * * * * sleep 50; /run.sh
* * * * * sleep 55; /run.sh

를 실행하면 매 5초마다 실행되는 크론이 생성된다.

근데 실생활에서 이렇게까지 쓸까…?







“크론을 사용하지 않고 반복 작업”

위에서 sh 파일 수정해서 크론 돌리기이다.

$ vim run.sh

echo "hello world" >> log.log

(log.log 파일에 "hello world" 를 스택킹하는 스크립트)

run.sh 스크립트가 위에 제시된 파일이라고 가정하자. (사실 가정할 것도 없다)

5초마다 반복작업하기 위해서는, 저 쉘스크립트 파일을

$ vim run.sh

while true; do
echo "hello world" >> log.log
sleep 5;
done

=============================

$ ./run.sh

으로 while 문에 묶기만 하면 된다.

저렇게 해두면.. ./run.sh 했을 경우.. 저 스크립트는 종료되지 않는 이상.. 5초간 슬립하고 hello world 를 스택킹하고 5초간 슬립하고 hello world 를 스태킹하는 과정을 반복하게된다.

다시한번 말하지만.. 이건 관리 이슈가 있어서 크게 실생활에 사용하진 않는다.
뭐.. 사용하는 사람이 있긴한데, 스크립트 프로세스가 죽어버리면 곤란하니, supervisord 와 같은 유틸리티와 같이 사용한다.

//supervisord.org/


조금 기분적인 설명을 덧 붙이자면, Process watcher 같은 역할을 한다.
supervvisord 에 프로세스를 입력한 뒤, 프로세스가 죽으면 다시 실행시키도록 하면 된다.

Linux 권한 정리 (4) – 응용 (워드프레스 권한)

워드프레스 권한 정리!! (wp-content)

저번 글에서 Linux 관련된 권한에 대한 커맨드 및 정의를 알아보았다면, 이번엔 실제로 적용해보자.

4월 17일(게시일) 기준 국내/외 핫 이슈 :
“대선” , “코스피1857.07” , “코로나 투표 세계 주목”

WordPress

chown user:user

워드프레스 플랫폼에 퍼미션 넣기 !
세세하게 다 하나하나씩 집어넣어야하는데, 실습용으로 작성되었다 보니, 간단하게
wp-content 폴더에 대해서만 하겠다.

먼저 wp-content 폴더는 사용자가 업로드 (주로 관리자) 하게 되고, 그리고 외부 소스들(테마, 플러그인) 들이 들어가있는 폴더이다.
실제로 테마(theme)들중에 일부가 타인의 악의에 의해 rewrite 되어, 워드프레스에 접근을 못하는 경우도 생겨났었다. 그래서 이번에 정리할 건,

  • wp-content
  • wp-content/plugins
  • wp-content/themes
  • wp-content/uploads

이렇게 4개에 대해서 설정을 해보도록 하겠다.

필자는 아파치를 웹서버로 사용하고 있고, 아파치 유저는 www-data 이다


주의 : 권한을 변경하기 전 스크린샷이라도 찍어두는걸 추천합니다. sudo 권한 없이 작업하게 되면, 무슨일이 발생할지 아무도 장담 못합니다. 🙂

잘되는 워드프레스 권한 은 꼭 백업해두세요 🙂

진행하기 전, 어려움이 있으면 여기를 클릭하세요
 Linux 권한(permission) 정리!





wp-content

그래서 우선 wp-content 를 www-data 소유권한으로 넘겼다.
chown 설명보기 (클릭)

$ chown www-data ./wp-content/

필요에 따라 앞에 sudo (super user) 권한을 필요로 할 수 있다

$ sudo chown www-data ./wp-content/

간단하게 -R 커맨드를 사용해서 한꺼번에 해도 되나, 해당 폴더에 index.php, languages(폴더)가 있기때문에, -R 없이 하였다.



무슨말인지 모르시겠으면 ,
 Linux 권한(permission) 정리!

wp-content/themes

가장 흔하게 본 워드프레스가 동작 안하는 경우가 테마 어택이다.
필자는 theme 폴더에 권한을 544 로 주었다. 그리고 사용자도 www-data로 변경하였다.
544로 준 이유는 www-data 로 접근한 악의를 가진 사용자가 write (overwrite) 를 할 수 없게 하기 위해서 이다.
(중요) 하지만 단점으로 해당 권한으로 변경 시, 테마 업데이트가 불가능하다. (다시 변경 후 업데이트 가능)
chmod 설명보기 (클릭)

$ chown -R www-data ./wp-content/themes/
$ chmod -R 544 ./wp-content/themes/

(super user)
$ sudo chown -R www-data ./wp-content/themes/
$ sudo chmod -R 544 ./wp-content/themes/

만약, 해당 띰에 업데이트가 필요하다면 755로 다시 설정하여서 업데이트를 해주면 된다.
(파일 오너가 업데이트하는 대상과 같을 경우에는 744 로도 가능)

$ chmod -R 755 ./wp-content/themes/

(super user)
$ sudo chmod -R 755 ./wp-content/themes/

그리고 업데이트가 모두 끝난 뒤 다시 544 로 돌려놓는 것을 추천한다.

하지만 themes 에는 정말 중요한 요소가 한가지 있다. 바로..

styles.css

해당 css 파일은 테마편집기에서 고치기가 가능해야하므로,

$ chmod 744 ./wp-content/themes/(테마명)/styles.css

(super user)
$ sudo chmod 744 ./wp-content/themes/(테마명)/styles.css

이렇게 정리하고 넘어 간다!




무슨말인지 모르시겠으면 ,
 Linux 권한(permission) 정리!
chmod 설명보기 (클릭)
chown 설명보기 (클릭)

wp-content/uploads

개인적인 생각으로는 644 로 하려고 했었는데.. 실제로 업로드를 해보니깐 안된다. 아마 mkdir 때문일 것으로 생각된다. 그래서 필자는 744로 권한을 바꾸기로 했다.

$ chmod -R 744 ./wp-content/uploads/

(super user)
$ sudo chmod -R 744 ./wp-content/uploads/

이렇게 설정해주면 끄읏 !



무슨말인지 모르시겠으면 ,
 Linux 권한(permission) 정리!

Linux 권한 정리 (3) – 명령어 사용법, (Linux 권한 관리 chown)

저번 글에서는 chmod 에 대해 알아보았다면, 이번에는 chown 에 대해 알아보자.

4월 12일(게시일) 기준 국내/외 핫 이슈 :
“일본 도쿄 지진:4” , “코스피1807.14(주말)” , “고용보험 인상 불가피”

Permission Denied

웹서버, 크론잡 등을 사용할 때 많이 쓰입니다.

웹서버나 크론등 작업을 할 때, Permission Denied 혹은 You don’t have permission to access 등의 오류 메시지를 가끔 볼 수 있다. 이는 일반적으로 권한에 대한 문제일 수 있다. 물론 chmod를 사용하여 풀 수도 있으나, 이게 효율적이지 않을 때가 많다.

$ ll
혹은
$ ls

명령어를 입력하면

chown 설명을 위한 이미지

해당 이미지에 보면,

drwxr-xr-x     3  seongmankim   staff    96  Apr    5 21:27 .
drwx------    31  seongmankim   staff   992  Apr    5 21:27 ..
-rw-r--r--     3  seongmankim   staff     0  Apr    5 21:27 hello_world.txt

seongmankimstaff 를 볼 수 있다. 왼쪽에 seongmankim 이 사용자(owner)를 나타내고,
staff 는 그룹(group)을 나타낸다.

(이전 글 중 Linux 권한 에 대해 설명을 해놓은 글이 있다. 잘 모르겠으면 이전 글을 참고하시길)

그럼 이제 본격적으로 chown 을 어떻게 사용하는지 알아보자.

chmod를 설명할 때는 비교적 긴 글이 었다면 이번 글은 비교적 간단하다. (서론만 좀 길었을 뿐…)

$ chown seongmankim hello_world.txt >> 해당 파일 오너 변경
$ chown seongmankim:staff hello_world.txt >> 해당 파일의 오너와 그룹 한꺼번에 변경

$ chown -R seongmankim ./ >> 해당 폴더 이하의 모든 파일 및 폴더 오너 변경
$ chown -R seongmankim:staff ./ >> 해당 폴더 이하의 모든 파일 및 폴더 오너:그룹 변경

사실 위에 기록해 놓은 것만 알면… 왠만한 Linux 권한 중 오너/그룹에 대한 명령어는 다 커버가 된다고 생각한다.
사실 저 위에 두개 말고는.. 작업하면서 이것 저것 써본적이 없으니 말이다.

번외로 chgrp 도 있는데, chgrp 은 사실 chown 에서 대부분이 처리가 되므로, 따로 설명은 하지 않겠다.
물론 예시 하나는 올려야겠지?

$ chgrp staff hello_world.txt

chgrp 는 오너는 변경이 되지 않는다. 그리고 -R (recursive) 를 활용하여 하위 그룹들도 컨트롤이 가능하다.

그럼 오늘도 해피코딩, 해피 엔지니어링 🙂

Linux 권한 정리 (2) – 명령어 사용법, (Linux 권한 관리 chmod)

Linux 권한 관리 chmod 를 알아보자

4월 9일(게시일) 기준 국내/외 핫 이슈 :
“코로나바이러스” , “코스피1807.14” , “트럼프 미국 대통령 WHO 에 자금 지원 중단?”

Permission Denied

또 permission denied…?


리눅스 파일 권한에 대한 설명은 이전 글인
Linux 권한(permission) 정리!
를 참고하시면 됩니다.

리눅스 권한 관리 chmod
Permission denied…

리눅스 파일 시스템을 사용하다 보면, 항상 흔하게 겪는 일이 Permission denied, Access Denied 등일 것 이다.
이를 해결 하기 위해선 필수적으로 알아야할 커맨드들이 있다.

$ chmod / chown / chgrp

이번에 설명할 내용은,

chmod

Linux 권한 관리 chmod 를 할 때, 사람마다 하는 방법이 조금 다양하다 (사실 2가지 방법)

  • 숫자로 변경하기
  • 권한 인터페이스로 변경하기

하지만 가장 일반적인 방법은 숫자를 활용하는 방법일 것이다. 어디서 많이 들어본 것 같은 숫자, 777











[숫자로 변경하기]

777 들어본 적은 있을 것이다. 혹은 이미 Permission denied 에 대해 에러를 검색한 사람은 한번쯤은 봤을 법.
(잘못된 problem solving일 확률이 매우 높다!!!!!!)

이미 앞선 포스트에서 말했듯이,
리눅스의 파일시스템은 (human readable) -wrxwrxwrx 의 형태로 되어 있다

컴퓨터를 공부한 사람이라면, 2-진법에 대해서 공부한 적이 있을 것이다.
왜 2-진법에 대해서 갑자기 말하냐고?
7을 2진법으로 바꾸면 111 이다.

거두절미 하고,

7
=> 1 1 1
=> w r x

따라서 7은 모든 권한을 준다는 의미가 된다.

이해를 돕기 위해, 740 (이런 권한을 사실 써본적은 없다)

7 4 0
권한 111 100 000
wrx w–
모든 권한 부여 쓰기 권한 부여 모든 권한 없음

만약 명령어로

$ chmod 740 helloworld.txt

한다면,

  • 사용자(owner/user) 에겐 모든 권한 부여
  • 그룹(group) 에겐 쓰기 권한 부여
  • 타 사용자(other) 에겐 모든 권한 제한

만약 무슨말인지 모르겠다면…

Linux 권한(permission) 정리! 를 참고해주세요











[권한 인터페이스로 변경하기]

왜, 굳이 권한 항목에 대해서 설명할 때,
사용자(owner/user), 그룹(group), 타 사용자(other) 라고, 영어까지 표기해가면서 썼을까?

바로 인터페이스를 사용하기 위함이다. (물론, 아니다)

$ chmod o+w helloworld.txt

이전, 숫자로 변경하기 시에는 o+w 대신에 숫자가 들어갔다. 그렇다면 지금 나온 o+w 는 무엇을 의미할까?

o+w : 다른 사용자(other) 에게 (w)rite 권한을 부여

를 나타낸다.

물론 권한을 뺏을 수도 있다.

o-w : 다른 사용자(other) 에게 (w)rite 권한을 뺏음

설명을 덧붙이자면,
================================
앞에 나온 o 는 (u)ser/(g)roup/(o)ther 를,
+ 는 +/- 를,
w 는 w/r/x 를
================================
사용하여 파일권한을 관리할 수 있다.

이해를 돕기 위해, 한가지 더 예를 들어보면,

$ chmod g-r helloworld.txt

이는, 그룹에 대한 읽기 권한을 뺏음 을 나타낸다.

이제 permission denied 에러에 대해서 stackoverflow를 검색해서 777 하는 일은 없도록 하자!

Linux 권한(permission) 정리!

Permission Denied:923 (Linux 권한)

진짜 많이 보는 에러 ㅜㅜ..

4월 9일(게시일) 기준 국내/외 핫 이슈 :
“코로나바이러스” , “코스피1807.14” , “트럼프 미국 대통령 WHO 에 자금 지원 중단?”

후배님 하나를 멘토링하고 있는데, 나름 그래도 2년이라는 백엔드 개발 경험을 갖고 있는 아이였는데,
Linux 권한에 대해 아는게 너무 없어서, 너무 당황스러운 나머지, 혹시나 하는 마음에
Linux 권한에 대해 정리를 해보고자 합니다.

그럼 이제 Linux 권한에 대해서 알아봅시다.

먼저 명령창에, 파일 목록 불러오기 (ls -al)를 하시면, 아래 화면과 같은 목록이 나옵니다.

$ ls -al -rwxrwxrwx seongmankim seongman 480 Apr 5 20:36 hello_world.txt

첫번재에 나오는 -rwxrwxrwx 권한을 뜻합니다.
여기서 첫번째 ‘-‘ 는 디렉토리 혹은 파일을 표시합니다.

위의 경우에는 ‘파일‘임을 암시하는데, ‘디렉토리(폴더)‘의 경우에는 ‘d‘로 표시됩니다.

예 ) 파일 : -r-x–xrwx , 디렉토리 : drwxrwxrwx
예 ) drwxrwxrwx

그렇다면 뒤에 rwx 는 무엇을 의미할까요?

r : read(읽기)

w : write(쓰기)

x : execute(실행)

그런데 왜 3개나 표시가 되어 있을까요?
이는, 각 각의 사용자들의 권한을 표시하기 위함입니다.

앞에 디렉토리/파일 인디케이터를 제외한,
나머지 9개를 3개씩 나눠보면..

rwx / rwx / rwx

첫번째 rwx 는 소유자를 의미,
두번째 rwx 는 그룹권한을 의미,
세번째 rwx 는 다른사용자의 권한을 의미합니다.

따라서 -rwxrwxrwx 는 모든 사용자에게 모든 권한이 부여됐음을 말해주고 있습니다.

코딩을 하던, 시스템 설정 작업을 하다 보면 종종 permission denied 와 같은 에러를 종종 보게 됩니다. 이 때는 보통 “해당 폴더 혹은 파일에 대한 접근 권한 혹은 쓰기 권한 등이 제대로 설정되지 않아서 발생합니다.

이번 블로그에서는 설명하진 않았지만, 사용자 권한 때문에 발생하는 경우도 있습니다.
(미들웨어 설치 시 자주 겪는 이슈)

근데, 그럼 권한 에러를 없애기 위해 -rwxrwxrwx 와 같은 설정을 하면 되지 않을까? 라는 생각을 하실 수 있습니다.

하지만 이는 모든 사용자 (외부 사용자 포함)에게 모든 권한을 주는 방법이므로, 일반적으로 보안 이슈가 동반되는 경우가 종종 있습니다. 따라서, 해당 권한 설정을 할 때는 해당파일에 대한 읽기 권한자는 누구이며, 쓰기 권한자는 누구인지를 명확하게 구분 할 필요가 있습니다.

이번 블로그에서는 대략적인 Linux 권한 시스템에 대해 설명했다면,
다음 블로그에서는 해당 권한을 어떻게 설정하는지에 대해 구체적으로 서술하도록 하겠습니다.

힌트 : chown / chmod

해피 코딩, 해피 개발, 해피 엔지니어링 합시다 !

감사합니다 🙂

첫페이지로 가기

MySQL 쿼리 튜닝 은 어떻게 할까? 기초편 (EXPLAIN)

이번엔 MySQL 쿼리 튜닝 에 대해 알아보자.

팁! WHERE 절, ORDER BY 절, GROUP BY 절에 사용되는 것들은 왠만하면 인덱스 화
해두는게 좋습니다. 인덱스는 MySQL 서버가 결과를 fetch하는데 더 빠르게 하는 것을
도와줍니다.
또한 index는 정렬하는데(SORT) 매우 효과적이며 효율적으로 동작합니다.

MySQL 에서 Index는 보통 일반 레코드보다 저장공간을 더 차지할 뿐만아니라, INSERT, DELETE,
UPDATE 시 성능저하를 야기합니다. MySQL 쿼리를 작성하는데 있어, (혹은 튜닝 하는데 있어) 항상 충고하여야
하는 상황이,

“최악의 경우” 입니다.

일정 수준 이상의 테스트레코드로 기술자가 생각하고 있는 시나리오대로 잘 흘러가는지를
테스트해보아야 합니다.

mysql> SELECT * FROM user WHERE user_id = 6240;

위의 상황이 있다고 가정해봅시다. 일반적인 MySQL 서버는 해당 id 의 값을 찾기 위해
user 테이블의 모든 레코드를 검색하게 됩니다. 해당 부분(이 경우 WHERE 절에 있는
user_id)이 인덱스가 걸려있다면, 쿼리는 빠르게 실행될 것 입니다.

하지만, 인덱스가 제대로 걸려있는지 안걸려있는지 매번 확인할 수는 없습니다. 그래서
MySQL에는 “EXPLAIN” 절이 있습니다. “EXPLAIN”은 쿼리가 실행 시 해당 쿼리를 분석
해줍니다.

MySQL 쿼리 튜닝, 이건 EXPLAIN 절만 알아도 반은 성공한 겁니다.

mysql> EXPLAIN SELECT * FROM user WHERE user_idx = 100;

해당 분석 내용 중 ‘key’ column과 ‘possible_keys’ column에 보면 해당 키로 인덱스가
되어 fetch 되었는지 알 수 있습니다.

위와 같이 간단한 쿼리의 경우 눈에 띄는 데이터는 보이지 않습니다. 다양한 방법이 많지만,
EXPLAIN 의 결과값 분석만으로도 충분히 query를 튜닝할 수 있습니다.

해당 Column 들에 대한 설명은 다음 글에.