버블정렬 (Bubble Sort)

1) 앞뒤로 데이터를 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬하는 방식이다. 거품이 보글보글 올라가는 모습과 비슷하다.

2) 가장 구현하기 쉬우나 비효율적인 알고리즘이다.

3) 네이버 지식백과 [버블정렬] 참조



삽입정렬 (Insert Sort)

1) 아직 정렬되지 않은 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해 가며 정렬하는 방식이다.

2) 정렬된 위치에 삽입하는 방식은 LinkedList를 통해 쉽게 구현할 수 있다. 만약 ArrayList를 사용할 경우 삽입시 모든 원소를 한칸씩 이동하여야 하기 때문에 비효율적이고 속도가 느리다.

3) 네이버 지식백과 [삽입정렬] 참조



퀵정렬 (Quick Sort)

1) pivot값을 기준으로 작은 값은 앞으로, 큰 값은 뒤로 가도록 하여 작은 값과 큰 값을 서로 분리해가며 정렬하는 방식이다.

2) 이 알고리즘은 재귀(recursive)적이다.

3) 버블정렬이나 삽입정렬보다 훨씬 효율적인 성능을 발휘한다.

4) 네이버 지식백과 [퀵정렬] 참조



병합정렬 (Merge Sort)

1) 분할정복(Divide and Conquer) 알고리즘이다.

2) 여러개의 데이터를 재귀적으로 반으로 나누어 정렬처리하며, 최종적으로 결합(Combine)을 하는 방식이다.



※ 참고자료

- 자바 프로그래밍 면접, 이렇게 준비한다

'기타' 카테고리의 다른 글

자바 컬렉션 Map  (1) 2016.02.13
자바 컬렉션 List  (0) 2016.02.13
Posted by SungHoon, Park
,

IE 브라우저에서는 정말 예외케이스가 많은 것 같다.

IE에서 GET 방식으로 jQuery.ajax() 요청을 할 경우 같은 URL에 대해 캐싱(caching)이 먹어 응답결과가 갱신되어 넘어오지 않는 문제가 있다.


이를 해결하기 위해서 다음과 같은 방법으로 코드를 변경해주면 된다.


1. cache:false 옵션 활용

1) ajaxSetup() 함수로 cache:false 값을 global하게 설정한다.

- 제일 깔끔한 방법. 추천!

- 공통 JSP 등에 아래와 같이 설정을 하게 되면 매번 ajax 호출시마다 설정하는 번거로움을 피할 수 있다.

<script type="text/javascript">
jQuery.ajaxSetup({
cache: false
});
</script>

2) 1회성일 경우 ajax 호출시 cache:false값을 설정해주면 된다.

<script type="text/javascript">
jQuery.ajax({
url:"http://www.naver.com",
cache: false,
dataType: "json",
success: function (result) {},
error: function () {}
});
</script>

2. new Date()로 URL에 TIMESTAMP값 추가하기

- 다른 URL로 인식할 수 있도록 가변적인 TIMESTAMP값을 넣어준다.

<script type="text/javascript">
jQuery.ajax({
url:"http://www.naver.com?t=" + new Date().getTime(),
dataType: "json",
success: function (result) {},
error: function () {}
});
</script>


Posted by SungHoon, Park
,

MPM(Multi Processing Module)은 아파치에 들어오는 요청을 프로세스/쓰레드 기반 방식으로 처리하며,

다음과 같이 Prefork, Worker 2가지 방식을 선택할 수 있다.


Prefork 방식


1. 기본 설정이며, 1개의 프로세스에 1개의 쓰레드가 요청을 처리한다. (프로세스:쓰레드=1:1)


2. 요청별로 프로세스가 생성되기 때문에 메모리 정보를 공유하지 않으므로 안정적인 장점이 있다.


3. 각 요청마다 하나의 프로세스가 소비되기 때문에, 메모리의 사용량이 높다.


4. 설정정보


<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers       10
    MaxClients            2048
    MaxRequestsPerChild   0
</IfModule> 


1) StartServers

- 웹서버 시작시 띄우게 되는 자식 프로세스 수. 디폴트값 3.

- 운영시 MinSpareServers, MaxSpareServers에 의해 프로세스가 변동되므로 설정시 큰 의미는 없다.


2) MinSpareServers

- 클라이언트 요청이 적을 경우 아파치는 이 값만큼 자식 프로세스를 유지하려 시도한다.

- 즉, 절대적인 값이 아니다.


3) MaxSpareServers

- 클라이언트 요청이 많을 경우 아파치는 이 값만큼 자식 프로세스를 줄이려고 시도한다.

- 역시 절대적인 값이 아니다.


4) MaxClients

- 클라이언트 요청을 동시에 처리될 수 있는 최대값. 이 값을 초과하면 ListenBackLog에 설정된 값만큼 큐잉 된다.

- 동시접속이 많을 경우 이 값을 증가시켜 준다.

- 이 값은 아파치+톰캣 연동시 톰캣의 maxThreads값과 맞춰주는 것이 좋다.


5) MaxRequestsPerChild

- 자식 프로세스에서 처리할 수 있는 요청갯수를 제한한다.

- 0으로 설정하면 무한대.

- 500이라는 값으로 설정을 하게 되면 자식 프로세스는 500번의 요청을 처리하고 프로세스는 다시 fork되어야 한다.



Worker 방식


1. 1개의 프로세스에서 여러개의 쓰레드가 요청을 처리한다. (프로세스:쓰레드=1:N)


2. Prefork보다 메모리를 적게 사용하는 장점이 있으나, 프로세스내 메모리 정보는 쓰레드간 공유된다.


3. 동시접속이 많을 경우, Prefork방식보다 유리하게 처리할 수 있다.


4. Worker방식을 사용하기 위해서는 컴파일시 --with-mpm=worker 옵션을 주어야 한다. 현재 아파치의 MPM방식을 확인하기 위해서는 httpd -V 또는 http -l 명령을 실행하면 된다.


5. 설정정보


<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>


1) StartServers

- Prefork방식과 동일


2) MaxClients

- 클라이언트 요청을 동시에 처리할 수 있는 최대값(프로세스 X 쓰레드)


3) MinSpareThreads

- 최소로 유지하려 하는 쓰레드 값


4) MaxSpareThreads

- 최대로 유지하려 하는 쓰레드 값


5) ThreadsPerChild

- 자식 프로세스가 가질 수 있는 쓰레드 최대값


6) MaxRequestsPerChild

Prefork방식과 동일



※ 참고자료

http://www.koreaidc.com/bbs/set_view.php?b_name=idcpds&w_no=153

http://mcpaint.tistory.com/151

http://www.isfull.com/bbs/board.php?bo_table=tb_xnux&wr_id=286

http://itnp.kr/roller/home/entry/아파치_동시_접속자_수_늘리기

http://jjosh.tistory.com/entry/최대-성능을-위한-아파치-환경설정


'서버 > 아파치' 카테고리의 다른 글

[아파치] mod_rewrite 모듈  (0) 2016.02.23
[아파치] mod_setenvif 모듈  (0) 2016.02.22
[아파치]VirtualHost 설정  (0) 2016.02.21
[아파치]httpd.conf 서버설정  (0) 2016.02.20
[아파치] httpd.conf 전역설정  (0) 2016.02.12
Posted by SungHoon, Park
,

/ (루트)

- 파일시스템 구조에서 최상위를 가리키는 루트 디렉토리이다.

- 모든 것들이 이 디렉토리 안으로 들어가며, 모든것의 출발점이다.


/boot

- 부트로더, 커널 등 부팅에 필요한 요소가 저장된다.


/bin과 /sbin

1) /bin

- 일반 사용자가 사용하는 프로그램이 저장된다.

- /bin -> /usr/bin 심볼릭 링크


2) /sbin

- 관리자가 사용하는 프로그램이 저장된다.

- /sbin -> /usr/sbin 심볼릭 링크


/dev

- 장치(디스크, 그래픽카드, 사운드카드 등)에 관련된 파일들이 있다.

- 시스템 도구가 특정 컴퓨터의 하드웨어에 간편한 방법으로 접근할 수 있도록 한다.


예)

/dev/sda

/dev/sda1

/dev/sda2

/dev/sdb


- 이 경우 sd는 SCSI 디스크를 의미하며, a, b는 디스크의 순서이다. sd 뒤의 1, 2는 파티션 번호이다.

- 하드 디스크의 경우는 hd로 시작한다.


/etc

- 시스템에서 가장 중요한 디렉토리라 할 수 있다.

- /etc에는 시스템 또는 사용자가 설치한 애플리케이션의 환경설정 파일등이 담기게 된다. (웹서버 등)

- 백업이 필요할 경우 /etc 디렉토리의 환경설정 파일 백업도 고려해야 한다.


/home

- 사용자의 홈 디렉토리


/lib

- 애플리케이션에 필요한 라이브러리 파일이 저장된다

- 라이브러리는 패키지 형태로 애플리케이션 사이에서 공유된다.

- 직접 건드릴 일은 없겠지만, 그래야 하는 상황이라면 조심해야 한다. 시스템 안정성에 영향을 미칠 수 있다.


/lost+found

- 파일시스템에 문제가 있을 시 문제가 발생한 파일의 아이노드 번호가 이곳에 저장된다.


/mnt

- mount를 의미한다.

- 네트워크 공유, 외장 하드디스크 등을 연결하려면 /mnt 하위에 디렉토리를 만들어 마운트하게 된다.


/media

- 최근에 등장한 디렉토리이며, USB나 카메라 등과 같은 이동식 미디어가 마운트된다.


/opt

- 서드파티 소프트웨어나 애플리케이션이 이 디렉토리를 사용한다.


예) 오라클 DB의 Default 설치경로


/root

- 루트 사용자의 홈 디렉토리 (/와 혼동하지 말자)


/proc

- 시스템 정보 및 프로세스(process) 정보를 확인할 수 있는 디렉토리

- 정보들은 커널에서 메모리상에 만들어주기 때문에 가상 파일시스템이라 할 수 있다.


예)

cat /proc/cpuinfo

cat /proc/meminfo


/srv

- 파일을 다루는 서비스에서 데이터를 저장하는 곳이다.


/sys

- 시스템 정보가 담기며, /proc과 달리 실제 파일이 저장된다.


/tmp

- 임시파일이 저장된다.

- 모든 애플리케이션이 이 디렉토리에서 파일을 만드며, 임시저장소로 이곳을 사용한다.


/usr

- 모든 애플리케이션이 설치되는 곳이다.


/var

- 로그파일, 캐시파일, 잠금파일 등이 저장된다.



※ 참고자료

- 리눅스와 함께하는 라즈베리 파이. 92-105


Posted by SungHoon, Park
,



텍스트 복사하기

1) 한줄복사

예제1) yy (한줄복사) → p (붙혀넣기)

예제2) V(한줄선택) → y(복사)  p (붙혀넣기)


2) 블록으로 선택하여 복사

예제) 비주얼 모드(Visual Mode) 상태에서 방향키로 텍스트의 블럭 선택 → y(복사)  p (붙혀넣기)


※ 참고자료

http://www.viemu.com/



'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] strings 명령어  (0) 2016.08.30
[리눅스] vi 에디터에서 텍스트 바꾸기  (0) 2016.06.08
[리눅스] find  (0) 2015.12.16
[리눅스] sort  (0) 2015.12.09
[리눅스] tar, zip  (0) 2015.12.08
Posted by SungHoon, Park
,

디렉토리에 존재하는 파일을 찾는 명령어이다.

기본형식은 "find [대상디렉토리] -name [파일명]"이다.


[옵션설명]

  • -name : 파일명으로 검색한다.
  • -iname : -name과 같이 파일명으로 찾으나, 대소문자를 구분하지 않는다. (insensitive)
  • -type : 파일타입을 지정한다.
    • b : block (buffered) special
    • c : character (unbuffered) special
    • d : directory
    • p : named pipe (FIFO)
    • f : regular file
    • l : symbolic link
    • s : socket
    • D: door (Solaris)
  • -user : 소유자로 검색한다.
  • -perm : 허가권으로 검색한다.
  • -size : 파일 크기로 검색한다.
  • -exec : 외부명령을 실행한다.
1. 현재 디렉토리에서 test.txt 파일명으로 찾기

예제) find . -name test.txt

2. 대소문자 상관없이 TE 텍스트가 들어간 파일 찾기

예제) find . -iname TE*

3. logs란 이름의 디렉토리 찾기

예제) find . -name logs -type d

4. 파일 사이즈로 검색
- 95k 이상 100k 이하의 파일을 검색한다.

예제) find /etc -size +10k -size -100k

5. 검색한 파일목록을 ls 명령어로 확인하기
- exec 명령어로 외부명령을 실행하며 find 결과가 {}안에 들어가게 된다.
- 끝의 \;(역슬래시 세미콜론)은 외부명령어의 끝을 의미한다.

예제) find /home1 -name "*.txt" -exec {} \;

6. find로 검색시 허가 거부됨(Permission denied)이 뜰 경우

1) 루트에서 파일을 검색하게 되면 Permission denied가 자주 뜰 수 있다. 이 경우 Standard Error 출력을 /dev/null로 버리면 된다. 참고로 /dev/null은 휴지통임.

2) 리눅스/유닉스 I/O Streams numbers

Handle

Name

Description

0

stdin

Standard Input 

1

stdout

Standard Output

2

stderr

Standard Error


예제) find / -name *.txt 2>dev/null



'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] vi 에디터에서 텍스트 바꾸기  (0) 2016.06.08
[리눅스] vi 에디터 기본  (0) 2015.12.28
[리눅스] sort  (0) 2015.12.09
[리눅스] tar, zip  (0) 2015.12.08
[리눅스] ls  (0) 2015.11.06
Posted by SungHoon, Park
,

sort 명령은 텍스트파일의 라인을 정렬해주는 명령어이다.


[옵션설명]

  • c(check) : 정렬여부를 체크한다.
  • f(fold) : 소문자를 대문자로 간주. 즉 대소문자 구분없이 정렬된다.
  • k(key) : 입력한 필드 번호를 기준으로 정렬한다.
  • n(numeric-sort) : 텍스트를 숫자로 간주하여 정렬한다.
  • r(reverse) : 역순으로 정렬한다.
  • t(field-separator) : 필드의 구분자이다. 왜 약어가 t인지는 잘 모르겠음.

1. 8번째 필드를 기준으로 정렬하기
-k 옵션으로 공백 기준 여덟번재 필드인 파일명을 기준으로 정렬을 한다.

ls -l | sort -k 8

1) 정렬전


2) 정렬후



2. 텍스트를 숫자로 간주하여 정렬하기

- n은 텍스트를 숫자로 간주하여 정렬을 한다.


cat sample.txt | sort -n


1) 정렬전


2) 그냥 정렬했을 경우


3) -n 옵션을 추가하여 정렬





'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] vi 에디터 기본  (0) 2015.12.28
[리눅스] find  (0) 2015.12.16
[리눅스] tar, zip  (0) 2015.12.08
[리눅스] ls  (0) 2015.11.06
[리눅스] wc  (0) 2015.09.09
Posted by SungHoon, Park
,

이클립스를 사용했을때는 테스트 코드들에 대한 Coverage를 확인하기 위해서는 EclEmma 같은 별도의 플러그인을 사용했었으나, 인텔리J 경우에는 Coverage 측정도구가 자체적으로 내장되어 있다.

또한, Coverage Runner로 [IntelliJ IDEA], [JaCoCo], [Emma] 3가지 중 원하는 측정도구로 개발자의 입맛에 맞게 선택이 가능하다.


1. [Run/Debug Configarations]에 들어가서 [Code Coveage]를 설정하자.

- branch coveage도 체크를 해야 하기 때문에 아래와 같이 설정화면에서 Tracing 옵션을 선택한다.



2. Coveage 표시 색상을 변경한다.

1) [Settings] → [Editor] → [Colors & Fonts] → [General] 선택

2) 기본설정된 표시는 에디터 좌측영역에만 표시되기 때문에 확인하기 어렵다. EclEmma처럼 라인이 다 칠해지도록 변경한다.

3) 개인적으로 추천하는 색상은 아래와 같다. (Darcula 테마에 맞춰진 것이기에 테마에 따라 별도 설정이 필요할 듯)

- Full line Coverage Background : #177D24

- Partial line Coverage Background : #F0FF1E

- Uncovered line Background : #830505



3. 적용예

1) 테스트 케이스


2) 커버리지 결과



인텔리J Code Coverage에 대해 더 알고 싶으면 https://www.jetbrains.com/idea/help/code-coverage.html 링크를 참조하면 된다.



Posted by SungHoon, Park
,

tar 명령어는 파일을 묶어주는 역할을 한다.

옵션을 통해 파일을 묶어주면서 압축도 함께 사용할 수 있다.


[tar 옵션설명]

  • z (gzip) : gzip 압축사용
  • j (소문자) : bzip2 압축 사용
  • J (대문자) : xz 압축 사용
  • c (create) : 새 archive를 생성한다.
  • v (verbose) : verbose는 "말많은, 장황한"이란 뜻이다. 진행중인 파일정보를 출력해준다.
  • f (file) : archive 파일명을 지정한다.
  • x (extract) : archive 파일을 해제한다.
  • C (change) : 디렉토리 경로를 변경한다.

1. 묶기

예제1) tar -cvf test.tar *.* (모든파일)
예제2) tar -cvf test.tar test (test 디렉토리)

2. 묶기 해제


예제) tar -xvf test.tar


3. 압축묶기

- z, j, J 옵션을 통해 압축파일을 생성한다.


예제1) tar -Jcvf test.tar test (xz 압축)

예제2) tar -jcvf test.tar test (bzip2 압축)

예제3) tar -zcvf test.tar test (gzip 압축)


4. 압축풀기

- z, j, J 옵션을 통해 압축을 해제한다.


예제1) tar -Jxvf test.tar

예제2) tar -jxvf test.tar

예제3) tar -zxvf test.tar


5. 특정 디렉토리에 압축풀기


예제) tar -zxvf test.tar -C test2




그리고 tar 명령과 함께 압축 명령도 보면 좋을 것 같아서 같은 페이지에 추가 설명한다.

압축률은 최신 압축 명령어가 더 좋으며, xz > bz2 > gz 순이다.


[압축 옵션설명]

  • # (1-9까지 숫자) : 1로 갈수록 압축시간은 빠르나 압축율이 낮다. 9로 갈수록 압축시간은 느려지나 압축율은 높다. 디폴트는 6임.
  • v (verbose) : 진행중인 파일정보를 출력해준다.
  • d (decompress) : 압축을 해제한다.

 

1. 압축하기

- 명령을 실행하게 되면 .tar 파일이 .tar.gz 등으로 파일로 변경되고 파일용량도 줄어드는 것을 확인할 수 있다.


예제1) xz test.tar

예제2) bzip2 test.tar

예제3) gzip -9v test.tar

 

2. 압축풀기


예제1) xz -d test.tar.xz

예제2) bzip2 -d test.tar.bz2 (또는 bunzip2 test.tar.bz2)

예제3) gzip -d test.tar.gz (또는 gunzip test.tar.gz)



 

'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] find  (0) 2015.12.16
[리눅스] sort  (0) 2015.12.09
[리눅스] ls  (0) 2015.11.06
[리눅스] wc  (0) 2015.09.09
[리눅스] du  (0) 2015.09.07
Posted by SungHoon, Park
,

인텔리J에서 톰캣을 띄울 경우 콘솔 화면에서 한글이 깨져 출력된다.

해결방법은 다음과 같다. (두가지를 다 해줘야 함)


1. 인텔리J 실행옵션 추가

- C:\DevTools\JetBrains\IntelliJ IDEA 13.0.2\bin\idea64.exe.vmoptions (또는 idea.exe.vmoptions)

- 마지막 라인에 -Dfile.encoding=UTF-8 추가


2. 톰캣 VM옵션 추가

- 톰캣 Edit Configuration 클릭

- VM Options에 -Dfile.encoding=UTF-8 추가




설정을 하고 실행하게 되면 한글이 정상적으로 출력되는 것을 확인할 수 있다.


[AS-IS]


[TO-BE]




Posted by SungHoon, Park
,