Category Archives: Concept

concept, knowledgeBase, architecture
프로젝트 진행에 필요한 개념을 설명합니다.

[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 를 줄이기 위함.

[Concept | Encription] 암호화 유형

암호화의 종류와 장단점을 정리하고 시스템 개발에 어떤 유형이 적용되는지 알아보자.


작성일 : 2017-03-04
수정일 : 2021-04-15

1> 암호화의 종류

유 형 특 징 종 류
단방향 해쉬함수 암호화키 없음 SHA, HAS-160, MD5
양방향 대칭키 블록암호 암호화키 == 복호화키 DES, AES, SEED, HIGHT
스트림암호 A5/1, A5/2, A5/3
비대칭키 암호화키 != 복호화키 RSA, EIGamal, 전자서명

2> 단방향 암호화 – 해쉬함수

① Encryption : 송신자는 해쉬함수를 이용해 평문을 암호화 한다.
② Transmit : 암호문을 수신자에게 전송한다.
③ Compare : 전송된 암호문과 저장된 암호문을 비교한다.
※ 암호문을 복호화 하는것은 불가능하다.

장점
* 암호화키를 사용하지 않으므로 공유절차 없이 보안을 유지할 수 있음
단점
* 복호화가 필요한 경우에는 사용이 불가능함
사용예
  사용자 개인정보를 암호화 하여 디비에 저장하고 인증시 암호화된 값으로만 비교

3> 양방향 암호화

3-1> 대칭키 암호화 (비밀키 암호화)

암호화 키를 생성하여 송신자(A)와 수신자(B)가 공유하는 방식.
① Create Private Key And Share : 암호화키를 생성하여 서로 공유한다.
② Encryption : 공유된 암호화키를 이용해 평문을 암호화 한다.
③ Transmit : 암호문을 수신자에게 전송한다.
④ Decryption : 공유된 암호화키를 이용해 암호문을 복호화 한다.

장점
* 암호화 연산 속도가 빨라 효율적으로 시스템 구축가능
단점
* 암호화 / 복호화를 위해 키가 공유되어야 하므로 노출되기 쉬움
* 키가 노출될 우려 때문에 개발 버전업 또는 일정 주기로 변경관리 해주어야 함
  (노출될 우려가 전혀 없다면 최초 생성된 키를 계속 사용하기도 함)

3-1-1> 블록 암호

고정된 크기의 블롣단위로 암·복호화 연산을 수행하며 각 블록의 연산에는 동일한 키가 이용된다. 전치와 환자를 반복시켜 암호화하면 평문의 통계적 성질이나 암호 키와의 관계가 나타나지 않아 안전한 암호를 구성할 수 있다.

3-1-2> 스트림 암호

이진화된 평문 스트림과 이진 키스트림 수열의 XOR 연산으로 암호문을 생성하는 방식으로 주기, 선형 복잡도 등 안전성과 관련된 수학적 분석이 가능하고 알고리즘 구현이 쉬운 특징이 있다.


3-2> 비대칭키 암호화 (공개키 암호화)

송신자(A)는 수신자(B)의 공개키(Public Key)로 암호화하여 전송하고 수신자(B)는 비밀키(Secret Key)로 복호화함.
① Create Key Pair And Share Public Key : 키쌍을 생성하고 공개키를 공유한다.
② Encryption : 공유된 공개키로 평문을 암호화 한다.
③ Transmit : 암호문을 수신자에게 전송한다.
④ Decryption : 자신만 알고있는 비밀키를 이용해 암호문을 복호화 한다.

장점
* 다른 유저와 키를 공유하지 않더라도 암호화가 가능함.
* 공개키로 누구나 암호화를 할 수는 있지만 송신자만 보유한 비밀키가 없으면 복원이 불가함.
* 연산이 많고 복잡하나 공개키와 비밀키를 활용한 광범위한 인증이 제공됨.
단점
* 수학적인 난제를 기반으로 설계되어 연산비용이 높아 효율성이 떨어짐.

4> 자세한 설명은 [KISA 홈페이지] 참조