Skip to main content

Android Studio에서 preview 한글 문제

안드로이드 스튜디오에서 SDK 버전업을 하고나서 갑자기 한글이 안되서 그대로 사용하고 있었는데

찾아보니 방법이 있어서 해결봤습니다.

다만… 약간의 삽질이 있어서 글로 기록해둘려고 포스팅 해봅니다.
ㅋㅋㅋ

우선 한글 적용 방법은

<안드로이드 스튜디오 홈폴더>\plugins\android\lib\layoutlib\data\fonts\fonts.xml 파일을 에디터 합니다.

그리고 다음 부분을 찾아주세요… lang=”ko” 대략 248번째줄쯤 되네요…

    
        NotoSansCJK-Regular.ttc
    
    
        NotoSansCJK-Regular.ttc
    
    
        NotoColorEmoji.ttf
    

이 부분에 폰트 부분을 NanumGothic.ttf로 바꿉니다. 원래폰트는 ttc 인데 ttf로 바꾸는겁니다. ^^


    
        NotoSansCJK-Regular.ttc
    
    
        NanumGothic.ttf
    
    
        NotoColorEmoji.ttf
    

자세히 안보고 확장자를 그대로 두어서 -_-
해도 안되는구나 생각했는데 확장자 문제 때문에 안되고 있었네요 ㅋㅋ

설정도 꼼꼼하게 코딩도 꼼꼼하게 -ㅅ-)b

PHP 에러, Cannot execute queries while other unbuffered queries are active.

PHP-PDO, mySQL에 대한 이야기 입니다. -ㅅ-)

프로젝트를 다른서버로 이전 작업도중에 다음과 같은 오류를 겪게 되었습니다.

PDOException: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

열심히 구글링 해본결과 … 특별히 해결법을 찾을수가 없었네요…

다만 반복적인 쿼리를 2번이상할 때, 발생하는 것으로 확인했습니다.

전 서버에서는 무리 없이 잘되었는데…. (핑게 핑게..ㅋㅋ )

개발할 때 ORM에서 쿼리를 블럭 단위로 사용하게 되는데 insert하기전에 타임존을 설정하는 쿼리가 반복되어 생기는 문제였습니다. -_-;

SET time_zone='GMT';
  INSERT INTO
    `tr_clas_attend`
  (`cls_idx`, ~ 생략 ~ 

뿐만 아니라 set names utf8; 도 마찬가지더군요….

쿼리 시작시 한번만 적용하도록 수정하여 잘 해결되었습니다.

환경이 바뀌면 시스템이 잘못되었다고 생각할 때가 있는데, 하나하나 되집어보는 습관을 들여야 할 거 같네요…

무엇보다 개발할때, 전체를 생각하면서 개발해야하는데, 부분적인 것만 보고 개발해서 그랬던거 같습니다. -ㅅ-)

해결 과정중에 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 요놈을 PDO 인스턴스의 어트리뷰트로 설정했는데 일단 한글이 작동하지 않았고, 여러가지 문제가많이 생기더군요…

삽질기 끝….

PHAR :: PHP를 JAVA의 JAR 처럼 써보자

JAVA에서 여러 파일을 하나의 파일로 만들어주는 JAR가 있습니다.

JAVA에서는 jar파일 하나만으로 javaw -jar 어쩌구.jar 하면 프로그램이 실행됩니다. ^^;;

PHP에서 사이트를 배포할 때 하나의 파일로 배포한다면 더 빨리 배포할 수 있고,
라이브러리 배포 및 유지관리 측면에서도 유리한 점이 많을 것이라 생각됩니다.
(물론 압축을 풀어보면 알수있지만;; 아무나 파일을 못만지게 할수도 있고;;)

그래서 이번에는 PHP를 하나의 파일로 패키징(?) 할수 있는 PHAR을 알아봅시다.

PHP에 대한 환경설정이 필요합니다.

php.ini 파일에서 다음 부분을 On에서 Off로 수정합니다.

phar.readonly = Off

수정 후에는 웹서버를 재시작 해주세요 -ㅅ-)

폴더 구조를 한번 살펴봅시다.
PHP를 이용해서 빌드(?) 환경을 만든다고 생각하시는게 이해 하시기 빠를 것 같습니다.
src 폴더에 빌드할 PHP파일들을 넣어둡니다. 결과물은 build에 떨어집니다.
build 폴더의 권한은 PHP가 쓰기 작업을 할 수 있도록 707로 만들어둡니다.
phar_folder

그…리..고…..

src 폴더에 예제로 사용할 파일들을 만듭니다.
이건 예제일 뿐이고 -_- 실제로 사용하실 파일들은 잘 준비해보세요..
common.php

<?php
class MyApp
{
	public function run($name) {
		echo "Welcome 안녕하세요 헬로우,";
		echo $name;
	}

}

파일을 인클루드 하는 부분을 자세히 보세욥.. 이렇게 phar 파일 속에 있는 파일을 개별로 지정 할 수 있습니다.
index.php

run("주선주선");

이젠 프로그램도 준비가 되었겠다… 빌드하는 스크립트를 만들어 봅시다.
한방에 되면 좋겠지만…. 한방에 안됩니다.
빌드 스크립트의 위치는 앞에서 보여드린 phar폴더에 위치 시켜주세요. (아니면 경로를 상대적으로 잡으시면 원하시는 위치에도..)
build.php

<?php

$srcRoot = "./src";
$buildRoot = "./build";
 
$phar = new Phar($buildRoot . "/myapp.phar", 
 FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_FILENAME, "myapp.phar");
$phar["index.php"] = file_get_contents($srcRoot . "/index.php");
$phar["common.php"] = file_get_contents($srcRoot . "/common.php");
$phar->setStub($phar->createDefaultStub("index.php"));

php 사이트에서 보고 온거라 뭐라고 말은 못하겠지만 -ㅅ-) ㅋㅋ 소스 파일을 가져다가 압축하는 프로세스 인것 같스빈다.
추가할 파일을 하나하나 잘 넣어줘야합니다. 파일에 경로가 포함되어있으면 경로까지도 ….

이제 빌드를 해봅시다. 콘솔에서 사용하셔도 되고 브라우저에서 하셔도 됩니다. (저는 콘솔에서)

$ php build.php 

그러면, build 폴더에 myapp.phar이 생성됩니다.

myapp.phar 파일을 실제로 구동해봅시다.

<?php
require "./build/myapp.phar";

(음.. 이게 답니다. -_- )

phar_run

여기까지 입니다.

즐거운 개발 되시길 ….

윈도우 mongoose에 php7 사용해보기

정말 간단하게 윈도우 로컬에서 PHP로 해야할 작업이 있어서 찾아보았습니다.

usbwebserver를 쓸려고 했는데 크기가 더 작은 녀석이 있네요…

mongoose 웹서버 입니다.

물론 .. 나름 구동방식에 있어서 장단점은 있지만 로컬에서 혼자 개발하는 용도로는 최적인 것 같습니다.

다운로드 링크는 다음주소에 있습니다.

https://code.google.com/archive/p/mongoose/

5.0이 최신이긴하지만… php가 잘 작동하지 않습니다.

mongoose_download

4.1 버전을 다운로드 합니다. 물론 이 속에 들어있는 PHP 버전은 5.x 입니다.

압축을 풀어보면 다음과 같은 파일이 있습니다. web_root 에 php프로그램을 저장합니다.
moongoose_files
mongoose.exe를 실행하면 윈도우 트레이에 아이콘이 뜨고 localhost:8080으로 브라우저로 접속해 볼수 있습니다.
그대로 써도 상관은 없지만 php의 extension이 다 빠진 상태라 난감합니다. ㅋㅋ -ㅅ-) sqlite3 정도 되는 수준….

이제 mongoose를 쓸만하게 만들어 볼겁니다.

1. http://www.php.net에가서 php7 윈도우 버전 바이너리를 받아옵니다. 받아온 파일은 mongoose하위폴더에 php7으로 위치 시킵니다.
php5ts.dll과 php-cgi.exe는 php5 버전임으로 삭제 합니다.
대략 폴더/파일이 다음과 같은 모양이 됩니다.
mongoose_files2

2. mongoose.conf 파일을 편집합니다. (html도 추가해주고 php-cgi.exe 경로도 넣어주고 …. )
내장된 설정창에서도 변경이 가능하지만 절대경로로 들어가버려서 폴더 위치를 옴기면 설정이 변경되어 버립니다.
(다음과 같이 상대경로로 잡아두면 cd, usb등에 넣어다닐때 편리합니다.)

cgi_pattern **.cgi$|**.pl$|**.php$|**.html$
cgi_interpreter php7/php-cgi.exe
listening_ports 8080,8081s
document_root web_root
ssl_certificate ssl_cert.pem
url_rewrite_patterns /xy=web_root\index.php

3. php.ini 파일을 생성합니다. 물론 mongoose 폴더에 같이 둡니다. 간단하게 필요한 extenstion 들만 추가해서 간단하게 만듭니다.
이것저것 필요한 설정들을 넣어주도록 합니다. 이 내용은 php7 폴더에 있는 php.ini-dest 등을 참고해주세요.

date.timezone = "Asia/Seoul"

extension_dir = "./ext"
extension=php_gd2.dll

그러면 최종적으로 파일들은 이렇게 됩니다.
mongoose_files3

4. 해도되고 안해도 되는 php파일정리
이렇게 해주면 용량이 매우 줄어듭니다. -ㅅ-)
mongoose_files4

mongoose-php7

이렇게 해서 외장하드에서 관리하는 포토겔러리를 만들었습니다.
자세한 소스는 다음에 ….. -ㅁ-)
아직 정리가 되지 않음….

Ubuntu16에서 apache2,php7 설치하기

Ubuntu16에서 apache2,php7 설치하기

우분투 서버는 처음 써봤습니다. -ㅅ-);;

제가 설치했던 방법을 기록해 봅니다. 클라우드 서버를 개설하더라도 하드웨어 준비는 하지 않겠지만

설치는 해야하지 않겠습니까 -ㅅ-)!!!

Ubuntu 16 – server가 먼저 설치되어있다는 가정하에 시작합니다.

지금까지 사용했던 centos나 amazone linux에서는 yum을 사용했었으나

ubuntu에서는 apt-get을 사용합니다. ubuntu를 사용하다보니 적응 안되는 부분도 조금씩 있긴 합니다만…

(관리자 권한을 위해 sudo를 쓴다든지…. )

1. root 권한으로 실행
Ubuntu는 로그인하면 사용자로 로그인 되기 때문에 관리자 권한을 얻어야지만 설치 명령을 실행할 수 있습니다.
다음 커멘드를 입력 후 로그인 중인 계정의 비밀번호를 입력하면 root를 사용하 실 수 있습니다.

# sudo su - 

2. 서버 업데이트
다음 명령을 통해 패키지 리스트를 갱신합니다. 현재 배포중인 최신버전의 패키지들을 설치할 수 있습니다.

# apt-get update

그리고 그 최신버전 패키지들에 맞게 설치된 패키지들을 버전업합니다.

# apt-get upgrade

3. Apache2 설치
yum 과 비슷하게 다음과 같은 명령으로 간단하게 설치됩니다.

# apt-get install apache2 

4. Apache2 모듈 설정 on/off
Apache2 모듈 설정을 합니다. 필요한 모듈은 추가해주고 필요없는 모듈은 제거합니다.

모듈의 활성화

# a2enmod rewrite headers

모듈의 비활성화

# a2dismod -f autoindex

apache2 설정은 /etc/apache2에서 하게 되는데 위의 명령을 통해서 conf-availble 폴더에서 conf-enable 폴더로
링크가 걸리는것 같습니다. (mod도 마찬가지)

5. PHP7 설치
Ubuntu 16부터는 패키지에 기본적으로 PHP7이 적용되어있습니다.
PHP5를 설치할 수도 있겠지만… 장기적으로 볼때 PHP업그레이드를 통해 지원 받을 수 있는 기간이 PHP7이 최신버전이니 더 길겠죠…
아직도 php.net에 가보면 버그픽스들이 올라옵니다.

다음 명령을 통해 PHP7.0.x 를 설치합니다.

# apt-get install php

그리고 추가적으로 필요한 모듈을을 설치합니다.

# apt-get install php-mysql php-xmlrpc php-xml php-curl php-gd php-pear

설치가능한 모듈 리스트는 다음 명령으로 확인 가능합니다.

# apt-cache search php-

리스트중 필요한 기능들을 설치하실 수 있습니다.

6. Apache2 – PHP7 연동 모듈을 설치합니다.

# apt-get install libapache2-mod-php7.0

7. 서버 시작
서버를 시작합니다.

# service apache2 start

/var/html 폴더에 phpinfo.php 파일을 만들고 http://호스트/phpinfo.php 를 브라우저로 호출해봅니다.
php7-0-8

일단은 여기까지 정도면 클라우드 서버에 사용하기에 적합할 것입니다. -ㅅ-)b
(DB는 별도서버로 PaaS방식으로 사용하는게 안정적이라… )

기타. VirtualHost 구성방법 – http://webdir.tistory.com/213

여담) 그동안 설치를 안해봐서 그런지 …. -_-; 뭔가 생소해졌다.

예고) 다음번에는 조만간 클라우드 서버에서 서버 세션공유 관련된 글을 게시해보겠습니다. ㄷㄷㄷ