Author Archives: opendocs

[Setting | NGINX] Windows OS 설치 및 설정

윈도우에 NGINX 서버 설정방법을 정리한다.


작성일 : 2022-05-24

1> 아래 경로에서 NGINX 다운로드

NGINX DOWNLOAD


2> 압축해제 & nginx실행


3> 서비스 확인

로컬서버 접속

위와 같은 화면이 뜬다면 서비스가 정상 실행됨


4> 서비스 소스 폴더 설정

nginx/conf 폴더에 nginx.conf 파일을 아래와 같이 수정

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   C:/_Work/source/sample/build;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

root C:/_Work/source/sample/build; 부분에는 서비스할 index.html 파일이 있는 경로를 지정


5> 변경된 설정 적용을 위해서 아래 명령으로 서비스 재시작

cd [NGINX_PATH]
nginx -s reload

6> 페이지 새로 고침으로 변경된 페이지 확인

[Concept | Java] Garbage Collection 종류

Garbage Collection의 종류와 특징을 정리한다.


작성일 : 2022-03-31


1> Serial GC

- 한개의 스레드가 동작하여 메모리를 해제
- 동작이 느리고 Stop The World 시간이 길어 근래에는 사용되지않음
- Java 실행시 옵션 : -XX:+UseSerialGC

2> Parallel GC

- Minor GC에서 멀티스레드가 동작하여 메모리를 해제
- Serial GC대비 Stop The World가 짧음
- Java 8의 Default GC
- Java 실행시 옵션 : -XX:+UseParallelGC

3> Parallel Old GC

- Minor GC & Major GC에서 멀티스레드가 동작하여 메모리를 해제
- Major GC에서 Mark-Summary-Compact 방식을 사용
- 멀티스레드 개수를 옵션으로 지정가능 (-XX:+ParallelGCThreads=n)
- Java 실행시 옵션 : -XX:+UseParallelOldGC

4> CMS GC (Concurrent Mark Sweep)

- Stop The World 최소화를 위해 만든 GC
- 4단계로 이루어짐
   1> Initial Mark : 참조 객체 마킹
   2> Concurrent Mark : 마킹된 객체를 추적
   3> Remark : 정리대상 확정
   4> Concurrent Sweep : 미사용 객체 제거

5> G1 GC (Garbage First)

- 기존 달리 논리적인 단위(Region)로 구분하여 메모리를 관리
- Young / Old 영역을 명확히 구분하지 않으며 2가지 추가적인 논리단위가 있음
  1) Humonogous : Region 크기의 50%를 초과하는 큰객체 저장용
  2) Available / Unused : 아직 사용되지 않는 Region
- Heap전체를 탐색하지 않고 부분탐색하여 처리속도가 빠름
- Heap메모리가 클수록 잘 동작함 (Heap이 너무작을경우 미사용 권장)
- Java 9+의 Default GC
- Java 실행시 옵션 : -XX:UseG1GC

[Concept | Java] Garbage Collection 구동원리

JVM에서 메모리가 어떻게 관리되어지는지 이해하기 위해 Garbage Collection (GC) 구동원리를 정리한다. 개발 최적화와 서버 튜닝을 위해 이해하고 있어야 한다.


작성일 : 2022-03-30


1> 메모리 영역의 구분

1-1> Young Generation

- 새롭게 생성된 객체는 Eden 영역에 할당된다.
- Young Generation에서 발생하는 Garbage Collection을 Minor GC 라 한다.

1-2> Old Generation

- Young Generation에서 계속 사용되고 있다고 판단되는 객체가 Old Generation으로 이동된다.
- Old Generation에서 발생하는 Garbage Colleciton을 Major GC 또는 Full GC 라 한다.

2> Garbage Collection

2-1> Mark & Sweep

Mark : 메모리의 사용여부를 식별해 사용(Reachable)과 미사용(Unreachable)로 구분
Sweep : 미사용(Unreachable)으로 구분된 메모리를 해제
Compact : Sweep 과정에 의한 메모리 단편화를 복원

2-2> Minor GC

Before
After
1) 객체가 생성면 Eden영역에 메모리 할당
2) Eden 영역이 꽉차게되면 Minor GC 실행
  2-1) 미사용(Unreachable) 메모리는 해제(Sweep)
  2-2) 사용(Reachable)되는 메모리는 Survivor Space(From)로 이동 
      (두개의 Survivor Space 중 1개는 반드시 UnUsed-미사용 상태)
3) '1)' ~ '2)' 과정이 계속 반복되다가 Survivor Space(From) 가 가득차면 사용되고 있는 메모리를 다른 Survivor Space(To)로 이동
4) 계속 사용될 경우 Old 영역으로 이동

2-3> Major GC

1) Old Generation 영역이 꽉차게 되면 Major GC 실행
2) JVM이 어플리케이션의 실행을 멈추고 메모리를 수집
* 대부분의 성능개선은 Major GC 로 인한 Stop The World 를 줄이기 위함.