반응형
반응형

SVN에 있는 폴더 및 파일을 트리구조로 보여주고, 다운로드를 할 일이 생겼는데,

Size정도는 보여주어야 할 것 같아서, 가져와보니 byte형식이었다.


그래서 편의를 위해 MB, KB... 정도는 보여주어야 한다는 욕심때문에, 검색해보니 역시나 있었다.


아래와 같이 function을 구현해서 사용하면 잘 나온다.



function bytesToSize(bytes) {
    var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
    if (bytes == 0) return '';
    var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
    if (i == 0) return bytes + ' ' + sizes[i]; 
    return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
};
반응형
,
반응형

ajax를 이용하여, file upload를 할 때, 아무런 옵션을 주지 않고 send하게 되면, illegal invoice 어쩌고하는 오류가 발생할 수 있다.


이런 경우 아래와 같이 contentType, processData를 false로 해주면, 에러가 발생하지 않고 업로드가 잘 되는 걸 볼 수 있다.



 var data = new FormData();
    $.each($('#file_id')[0].files, function(i, file) {          
        data.append('file', file);
        });

    $.ajax({
        url: 'api/fileupload'
        , type: 'post'
        , dataType: 'text'
        , data: data
        , cache: false
        , contentType: false
        , processData: false
        , error: function(e) {
            console.log(e);
        }
    });    
반응형
,
반응형

전 리눅스를 많이 써보지 않았기에.. 명령어 등이 매우 어색하더군요. 

 

현재 개발 시 시스템 팀에서 제공해주는 아파치 서버를 사용하고 있는데..

web.xml 설정을 바꿀일이 생겼는데 해당 경로로 가서,

vi web.xml 라고 치니.. 권한이 없다고 나오더군요.

 

권한이 없을 경우 sudo vi web.xml 이라고 치니 권한을 무시하고 접근이 가능하더군요.

 

기초적인 것이긴하지만.. 시스템 관련 쪽을 모르는 저로썬 유용한 정보라서 포스팅!

반응형
,
반응형

얼마 전에 웹페이지에서 Shell Script를 호출해서 mysql쿼리를 실행하는 기능을 만들었던 적이 있었습니다.

 

제가 게임 퍼블리싱 개발 쪽 일을 하고 있는데,

 

개발사에서 요청이 많이 들어오기 때문에, 아예 그냥 편리하게 만들어놓고,

니들이 알아서 해라~ 라고 하기 위해서였죠.

 

쉬울줄 알았는데, 리눅스 터미널을 많이 사용해보지 않은 저로써는 약간의 삽질이 필요했었습니다.

 

일단 리눅스 터미널에 들어가서 mysql --help 를 쳐보았습니다.

 

option들이 나오더군요.

 

원격으로 접속하기 위해 필요한 -h(호스트), -u (유저), -p (패스워드), -e (쿼리) 의 옵션이 보이더군요.

 

의외로 빨리 찾은 듯하여, 즐거운 마음으로 위 옵션들을 이용해서 Shell Script를 작성했었죠.

 

mysql -h {호스트} -u {유저} -p {패스워드} -e {쿼리} 로 일단 테스트를 해보았습니다.

 

안되네요???!!

 


-p 다음에 패스워드 입력시에는 띄어쓰기를 하지 않고 바로 입력을 해야되는거였습니다.

 

따라서, 정답은...

 

mysql -h {호스트} -u {유저} -p{패스워드} -e {쿼리} 라는거죠.

 

다른건 띄어쓰면서 왜 패스워드는 붙여쓰는지-_-.. 암튼 해결!

반응형
,
반응형

현재 사용하고 있는 버전이 Mysql 5.5버전에 innoDB를 사용하는 테이블에서 like 쿼리를 날리니, 

full text 검색이 지원이 되지 않아, 쿼리가 몇초씩 걸리더군요.

 

5.6부터는 지원을 한다고는 하는데, 불안정할 것 같아서 이번 기회에 Sphinx라는 검색엔진을 붙여보기로 했습니다.

 

 

1. 설치

 

http://sphinxsearch.com/downloads/release/ 로 이동해서, 본인 OS 버전에 맞는 것을 받아줍니다.

(저는 Cent OS 5.X버전을 기준으로 설명하겠습니다.)

 

다운받기가 귀찮으신 분은 wget을 이용해서 바로 받아주시면 되겠습니다.

wget http://sphinxsearch.com/files/sphinx-2.0.5-1.rhel5.x86_64.rpm  (2.0.5버전 rpm) 

이렇게 하면, 위 명령어를 친 경로에 파일이 받아집니다.  

 

rpm을 설치해줍니다. 

[rpm옵션]

설치 옵션: -i 또는 -U   (install, upgrade)
제거 옵션: -e             (erase)
질의 옵션: -q             (query)
기타: -v              (정보 표시)
       -h              (진행상태 표시)
       --force        (강제설치)
       --nodeps     (의존성 무시)

 

$ rpm -Uvh sphinx-2.0.5-1.rhel5.x86_64.rpm 

 

이렇게 하면 설치완료!

 

 

2. Sphinx.conf 설정

 

설치된 폴더로 이동해보시면 Sphinx.conf 라는 설정파일이 있습니다. (저는 /etc/sphinx/ 라는 경로에 설치되더군요.)

설정하기 전에 주의하실 점은, 사용하고 계신 mysql의 charset을 아래 설정과 동일하게 해주어야 한다는 점입니다.

전 UTF-8을 기준으로 설명하도록 하겠습니다. 

 

열어보면 아래와 같은 구조로 되어 있습니다.

자세한 내용은 주석 참조

 

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
source src1
{
        type                      = mysql
        sql_host                = {DB호스트}
       sql_user                = {ID}
       sql_pass               = {PASSWORD}
       sql_db                   = {DB}
       sql_port                 = {PORT}  # optional, default is 3306
        sql_query_pre         = SET NAMES UTF8                  # 쿼리 실행 전에 처리되는 구문
        sql_query_pre         = SET CHARACTER SET UTF8    # 쿼리 실행 전에 처리되는 구문
        # 결과 값을 가져올 쿼리 (항상 아래 sql_attr_xxxx 들과 매칭을 시켜주어야 정상적으로 인덱싱 됩니다.)
        sql_query               = SELECT test_id, test_value, UNIX_TIMESTAMP(test_dt) AS test_dt FROM test_table 
        sql_attr_timestamp   = test_dt      # 결과 값 중 timestamp 형태를 가진 컬럼에 대해 명시
        sql_attr_uint            = test_id      # 결과 값 중 uint 형을 가진 컬럼에 대해 명시
        # string만 sql_field_string을 사용하는 이유는 sphinx는 기본적으로 string형태를 가진 컬럼을 기준으로 인덱싱 하기 때문에
        # 굳이 추가하지 않아도 되지만, java코드에서 log 등을 확인하기 위해 추가합니다.)
        sql_field_string        = test_value # 결과 값 중 string 형을 가진 컬럼에 대해 명시       
        # $id는 sphinx내에서 인덱싱한 값들에 대한 고유값으로, 테이블 내에서 sequence id로 사용하는 컬럼을 매칭시켜 줍니다.)
        sql_query_info          = SELECT * \
                                  FROM test_table \
                                  WHERE test_id=$id
}

index test_idx
{
        source                 = src1
        path                     = /var/data/rt         # 인덱싱 될 데이터들을 저장할 경로
        docinfo                 = extern
        # 한글 처리를 위해 utf-8로 해주고, charset_table 추가 (공식홈 참조)
        charset_type          = utf-8
       charset_table         = 0..9, A..Z->a..z, _, a..z, U+AC00..U+D7A3,\
                                      U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9
        min_word_len         = 1      # 검색 시 단어로 취급할 문자의 수 (1은 한 글자도 단어로 취급한다는 의미)
        min_prefix_len         = 0     
        min_infix_len           = 1
}

indexer
{
        mem_limit               = 256M          # indexer가 사용할 메모리 최대치(기본값)
}

searchd
{
        compat_sphinxql_magics  = 0        # 추가하지 않으면 에러가 발생하는 경우가 있으므로, 그냥 추가
                                                    # 이건 거의 정보가 없어서, 삽질할 가능성이 높으므로, 그냥 추가합니다.
        listen                    = 9312
        listen                    = 9306:mysql41
        log                       = /var/log/sphinx/searchd.log      # 인덱싱 된 결과 로그가 추가될 경로
        query_log              = /var/log/sphinx/query.log          # 인덱싱 처리 시 위에 명시된 쿼리에 대한 로그가 추가될 경로
        read_timeout          = 5
        max_children         = 30
        pid_file                  = /var/run/sphinx/searchd.pid
        max_matches         = 1000
}


여기까지 세팅 완료!

 

 

 

3. 실행 (설정 파일이 바뀌거나 데이터가 바뀔 경우 매번 해줘야 하는 작업)

 

   1) INDEXING (설정파일에 명시된 모든 index를 indexing한다. 옵션을 다르게 주면, 개별 indexing도 가능하지만, 귀찮으므로 all로 ㄱ)

     : indexer --all {설정파일 : sphinx.conf} 

 

   2) SEARCHD(데몬 띄우기)

     : searchd --config {설정파일}

 

   3) INDEX를 이용한 쿼리 실행 확인 

      (여기서 한글로 테스트하는 건 별로 의미가 없으니, 대충 영어로 테스트하고 넘어갑시다. like검색처럼 못찾는다면,

       설정이 잘못된거니까 설정 파일 수정 후 데몬을 죽이고, 다시 indexing한 후 테스트 합니다.)

     : search {keyword}

 

      ※ pid를 이용하지 않고 sphinx 데몬을 죽이는 법 : searchd --stop

         (여러개가 뜨면 느려질 수 있으므로, 다시 indexing할 때는 왠만하면 실행해줍니다.)

 

 

4. JAVA 코드를 이용한 연동

 

http://sphinxsearch.com/downloads/release/ 로 다시 이동해서, windows OS용을 하나 받아서, 압축을 풀어봅니다.

압축을 푼 내용 중에 보면 api폴더가 있는데, 그 안에 java를 이용해서 연동할 수 있는 example코드가 있습니다.

 

 

test.java를 열어보면, 테스트를 할 수 있도록 연동코드가 들어가 있는데,

like검색처럼 하기 위해서는 MATCH MODE를 바꿔주어야 합니다.

기본적으로 SPH_MATCH_ALL 이라고 되어 있는데, SPH_MATCH_ANY 로 바꿔주어야 like검색이 됩니다.

 

나머지 부분은, 다른 코드들을 참조하셔서 filtering이라던지 sorting이라던지 mysql과 동일하게 이용하실 수 있습니다.

 

filtering이라던지, sorting같은 경우 java코드에서 처리하는 것이 indexing 설정파일에서 하는 것보다 성능이 좋더군요.

 

연동코드까지 마친 후에는, 위에 3번의 indexing작업을 crontab 등을 이용해서 주기적으로 업데이트 해주는게 중요합니다.

반응형
,
반응형

로컬 PC에 가상환경 구축에 대해서 간단히 정리합니다.

 

1. VirtualBox 다운로드 및 설치 

https://www.virtualbox.org/wiki/Downloads

 

2. CentOS 6.5 Netinstall ISO파일 다운로드

http://ftp.daum.net/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso 

 

3. VirtualBox 실행 후 가상머신 추가 및 설치 진행 

 - 종류 : Linux

 - 버전 : Red Hat (64 bit) // 64bit로 명시적으로 적어주지 않으면, 설치 시작 화면 진입 전에 cpu관련 오류가 발생함.

 - 64bit로 되어있는 경우에도 에러가 발생하는 경우 CMOS Setup에 들어가서 CPU Vitualization 관련 옵션을 On해준다.

 - 설치 진행 도중, HDD, CD/DVD 등 CentOS이미지 경로를 고르는게 나오는데, HTTP를 선택하여 아래 URL을 입력해준다.

http://ftp.neowiz.com/centos/6.5/os/x86_64/

 - 모드를 고르라고 하면, 가급적 SoftWare Development 어쩌고로 설치하는 것이 정신건강에 좋다. (가장 아래에 있음)

 

4. 설치 후, 거의 필수적으로 실행해야 하는 명령어

 - yum install -y make kernel-devel gcc perl

 - yum groupinstall "Development Tools"

 

5. 게스트 확장 설치

 - 일단 떠있는 가상머신을 완전히 끈다.

 - 가상머신에서 우측 마우스를 눌러 설정으로 들어간다.

 - 저장소 탭을 선택, 컨트롤러 IDE에서 CD/DVD 장치 추가를 해준다.

 - VirtualBox경로(경로를 기본으로 설치했다면 ProgramFiles/Oracle/VirtualBox)에 있는 VBoxGuestAdditions.iso를 마운트 해준다.

 - 가상머신 시작

 - /media/마운트된 폴더/VBoxLinuxAdditions.run 실행

 

 

중간중간 뭔가 삽질을 더 했던거 같은데... 인상깊게 생각나는것은 이정도.. ㅠㅠ

다음에 설치할 기회가 되어서, 문제를 새롭게 발견하면 여기다가 추가해야겠다. 

반응형
,
반응형

SELinux를 꺼주면 된다.. 

반응형
,
반응형

설치, 삭제 시에 Windows 환경변수 Path에 있는걸 싹 날려버리는 문제가 있음. ㅡㅡ;;

안그래도 깔기 껄끄러워서, 깔았다가 지웠더니 환경변수도 같이 지워버리네;;

 

그래서 telnet도 안되고 netstat도 안되고... ㅠㅠ

컴퓨터도 느려진 느낌.. 

 

해결방법은, 환경변수를 다시 넣어주면된다.

C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;

 

얘는 왜 윈도우 기본설정까지 건드리지??? 다시는 안깔아야지. 

반응형
,
반응형
JAVA_HOME 경로랑 TOMCAT_HOME 경로만 시스템에 맞게 수정해서 사용하면 잘 동작할 것 같다.

퍼옴 : http://toplogical.blogspot.kr/2014/03/centos-64-tomcat.html

$ cd /etc/init.d

$ vi tomcat
#!/bin/sh
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
#JAVA_HOME=/usr/local/java/jdk
#export JAVA_HOME
#PATH=$JAVA_HOME/bin:$PATH
#export PATH
#Source function library.
. /etc/rc.d/init.d/functions
source /etc/profile
export TOMCAT_HOME=/usr/local/tomcat
# See how we were called.
case "$1" in
start)
echo -n "Starting tomcat EXPERIMENTAL: "
daemon $TOMCAT_HOME/bin/startup.sh
echo
;;
stop)
echo -n "Shutting down tomcat EXPERIMENTAL: "
daemon $TOMCAT_HOME/bin/shutdown.sh
echo
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0



$ chmod 755 tomcat
$ chkconfig --add tomcat
$ chkconfig --level 234 tomcat on
$ chkconfig --list tomcat


반응형
,
반응형

아파치 경로만 바꿔서 사용하면 될듯 

 

퍼옴 : http://firedev.tistory.com/entry/CentOS-apache-service-%EB%93%B1%EB%A1%9D

 

[root@localhost /]$ cp /usr/local/server/apache/bin/apachectl /etc/init.d/httpd


chkconfig 를 이용하여 자동실행을 등록한다


[root@localhost /]$ chkconfig --add httpd

 

httpd 서비스는 chkconfig 를 지원하지 않습니다

 

[root@localhost /]$ vi /etc/init.d/httpd

#!/bin/sh 밑에 추가 5줄


# chkconfig: 2345 90 90
# description: init file for Apache server daemon
# processname: /usr/local/server/apache/bin/apachectl
# config: /usr/local/server/apache/conf/httpd.conf
# pidfile: /usr/local/server/apache/logs/httpd.pid

 

정상적으로 등록이 되는지 확인해 보자.

 

[root@localhost /]$ chkconfig --add httpd 

[root@localhost /]$ chkconfig --list | grep httpd

반응형
,
반응형