SMALL

커널 레벨 쓰레드


커널 레벨 쓰레드는 운영체제가 제공하는 시스템 함수 호출을 통해서 쓰레드 생성을 요구해야 한다. 쉽게 말하면 사용자 요청에 따라 쓰레드 생성 및 관리를 하는 것이 커널을 말한다.


장점

커널에서 직접 제공해주므로 안정성과 다양한 기능이 제공된다.


단점

유저 모드에서 커널 모드로의 전환이 빈번하게 이루어 지기 때문에 성능 저하가 있다.


유저 레벨 쓰레드


유저 레벨 쓰레드는 커널에서 쓰레드 기능을 지원하지 않을 때, 쓰레드 기능을 가진 라이브러리를 활용하는 방식을 말한다.


장점

커널은 쓰레드의 존재를 모르기 때문에 유저 모드에서 커널 모드로 전환이 없기 때문에 성능이 좋다.


단점

운영체제는 프로세스의 존재만 알고, 쓰레드의 존재를 모르기 때문에 쓰레드 문제가 발생하지 않게 프로그래밍을 해야 하는데, 프로그래밍이 어렵고, 커널 레벨 쓰레드에 비해 결과 예측이 어려워진다.

LIST

'전공 > 운영체제' 카테고리의 다른 글

Mutex(뮤텍스), Semaphore(세마포어)  (0) 2020.09.17
Starvation(기아현상), Aging(노화)  (0) 2020.09.17
Thread Pool(스레드 풀)  (0) 2020.09.17
페이지 테이블  (0) 2020.09.14
Segmentation, Paging  (0) 2020.09.14
SMALL

트랜잭션이란?


트랜잭션은 데이터베이스의 상태를 변화시키는 작업 단위를 의미한다.


ATM 출금을 예시를 들어본다.


1. 예금 출금을 누른다.

2. 카드를 넣는다.

3., 비밀번호를 누른다.

4. 출금할 금액을 입력한다.

5. 출금 완료


위와 같은 과정을 트랜잭션이라고 한다.


트랜잭션 특징


트랜잭션 특징에는 ACID 라는 4가지 특징이 있다.


  • 원자성(Atomicity)
원자성은 트랜잭션이 데이터베이스에 모두 반영되거나, 아니면 전혀 반영되지 않아야 한다.

위의 ATM 출금 과정에서 비밀번호를 실패하면 트랜잭션을 실패를 하고, 출금 완료까지하면 트랜잭션을 성공 하는 것이 원자성이다.

  • 일관성(Consistency)
일관성은 트랜잭션의 작업 처리 결과가 항상 일관성 있어야 한다.

위의 ATM 출금을 완료하면 A의 계좌의 남은 잔액과 출금한 금액의 합이 ATM 출금하기전의 잔액과 같아야 하는 것이 일관성이다.

  • 고립성(Isolation)
고립성은 하나의 트랜잭션이 실행 중 일때 변경한 데이터는 트랜잭션이 완료 될 때까지 다른 트랜잭션이 참조할수 없어야 한다.

위의 ATM에서 A의 계좌로 출금 중 일때는 A의 계좌에 대해 관여 할 수 없는 것이 고립성이다.

  • 지속성(Durability)
지속성은 트랜잭션이 완료되면, 영구적으로 데이터가 보존 되어야 한다.

위의 ATM에서 출금 완료를 하면 영구적으로 잔액이 저장되어야 하는 것이 지속성이다.

Commit, Rollback 연산


  • Commit
커밋은 하나의 트랜잭션이 완료되었음을 알려주는 것이다.
ATM 출금이 완료되면 커밋이 되었다라고 말을 한다.

  • Rollback
롤백은 하나의 트랜잭션 처리가 비정상적으로 종료되면 다시 처음 상태로 되돌리는 것이다.
ATM 출금 과정 중 어느 과정에서 에러가 나면 다시 처음 화면으로 돌아 가는 것이다.


LIST

'전공 > 데이터베이스' 카테고리의 다른 글

UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
DB정규화  (0) 2018.05.17
조인  (0) 2018.05.02
SQL 인젝션  (0) 2017.11.24
SMALL

스택(Stack)?


한 방향에서 자료의 입력과 출력이 이루어지는 자료구조이며 LIFO(Last In First Out)라고 불린다. 

ex) 함수의 콜스택, 문자열 역순 출력, 연산자 후위표기법


큐(Queue)?


한 방향에서는 자료의 입력이 이루어지고, 반대편 방향에는 자료의 출력이 이루어지는 자료구조이며 FIFO(First In First Out)라고 불린다.

ex) 버퍼


덱(Deque)?


자료의 입력과 출력을 양 쪽 끝에서 가능하게 하는 자료구조


  • 스크롤(Scroll) : 입력이 한쪽에서만 가능하도록 제한한 덱
  • 셀프(Shelf) : 출력이 한쪽에서만 가능하도록 제한한 덱


LIST

'전공 > 자료구조' 카테고리의 다른 글

트리 순회  (0) 2020.09.13
트리(Tree)  (0) 2020.09.13
선형구조와 비선형구조  (0) 2020.09.13
연산자 우선순위  (0) 2020.09.01
벨만포드와 다익스트라 알고리즘  (0) 2018.07.04
SMALL

JOIN?


관계형 데이터베이스에서 서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되어 있는데, 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인을 사용한다.


조인에는 내부 조인이랑 외부 조인이 있다.


INNER JOIN


내부 조인은 둘 이상의 테이블에 존재하는 공통 속성의 값이 같은 것을 결과로 추출한다. 내부조인에는 동등 조인, 자연 조인, 교차 조인, 셀프 조인이 있다.


1. 동등 조인(EQUI JOIN)

둘 이상의 테이블에 존재하는 공통 속성을 비교하여 출력한다.


SELECT *

FROM emp INNER JOIN dept

ON emp.deptno = dept.deptno


2. 자연 조인(NATURAL JOIN)

조인 대상 테이블의 모든 속성을 비교하여, 공통 속성을 가진 속성으로 조인을 수행한다. 같은 이름을 가진 속성은 한 번만 나타난다.


SELECT *

FROM emp NATURAL JOIN dept



3. 교차 조인(CROSS JOIN)

교차 조인은 카티션 프로덕트로 불리며, 조인에 참여한 모든 데이터가 나타난다.


1) JOIN 조건을 잘못 기술했을 때

2) JOIN 조건을 정의하지 않았을 때

3) JOIN 조건이 JOIN 조건에 참여하는 테이블의 모든 행이 JOIN되는 경우


위와 같은 상황이면 교차 조인이 발생한다.

그래서 조인을 수행 한 뒤, 결과를 확인 해봐야한다.


SELECT *

FROM emp CROSS JOIN dept


4. 셀프 조인(SELF JOIN)
셀프 조인은 EMP 테이블에 사원 정보와 관리자 정보를 함께 보고 싶을 때, 사용한다.


SELECT e.empno, e.ename, m.empno, m.ename

FROM emp E INNER JOIN emp M

ON E.mgr = M.empno




OUTER JOIN


외부 조인은 특정 테이블의 데이터를 모두 포함하는 조인이다. 외부 조인에는 왼쪽 외부 조인, 오른쪽 외부 조인, 완전 외부 조인이 있다.


1. 왼쪽 외부 조인(LEFT OUTER JOIN)




위와 같이 왼쪽의 데이터를 모두 포함하고 있다.


SELECT *

FROM emp

LEFT OUTER JOIN dept

ON emp.deptno = dept.deptno




2. 오른쪽 외부 조인(RIGHT OUTER JOIN)



위와 같이 오른쪽의 데이터를 모두 포함하고 있다.

SELECT *

FROM emp

RIGHT OUTER JOIN dept

ON emp.deptno = dept.deptno



3. 완전 외부 조인(FULL OUTER JOIN)




SELECT *

FROM emp

FULL OUTER JOIN dept

ON emp.deptno = dept.deptno



JOIN 사용 시 주의 사항


1. SQL 문장의 의미를 제대로 파악

  -> 성능이 크게 좌우 된다.

2. 조인 조건을 명확하게 제공

  -> CROSS JOIN이 발생 할 수 있다.

3. 조인 적용 후 테스트를 수행

  -> 여러 개 테이블을 조인 할시 예상 못한 결과를 얻을수 있으니, 테스트를 습관 시해야 한다.



JOIN 사용 시 고려 사항



조인은 생각보다 많은 자원을 소비한다. 그래서 JOIN 사용 시 고려 해야 할 것이 있다.


1. 조인 대상의 양을 최소화

  -> 조인 할 집합에 먼저 조건을 걸 수 있으면 조건을 적용하여 조인의 양을 최소화한다.

2. 인덱스의 활용

  -> 조인 연산의 비용을 낮출 수 있음


LIST

'전공 > 데이터베이스' 카테고리의 다른 글

UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
DB정규화  (0) 2018.05.17
트랜잭션  (0) 2018.05.04
SQL 인젝션  (0) 2017.11.24
SMALL

JVM이란?


기술 면접 및 필기 시험에서 단골로 나오는 JVM에 대해 설명을 하겠습니다.

JVM은 Java Virtual Machine의 줄임말이며 자바 바이트 코드를 OS에 맞게 해석 해준다. 자바 컴파일러는 java 파일을 자바 바이트 코드로 변환시켜 .class 파일을 생성 시킨다. 바이트 코드는 기계어가 아니므로 OS에서 바로 실행 되지 않는다. OS가 바이트코드를 이해시켜주도록 도와주는 것이 JVM이다.

바이트 코드는 JVM위에서 OS 상관없이 실행된다. 이것이 Java의 가장 큰 장점 중 하나이다.


JVM 구조



JVM 구조는 3가지 영역으로 나누어진다.


1) Class Loader

런타임 시점에서 클래스를 로딩하여 클래스의 인스턴스를 생성하여 클래스 로더를 통해 메모리에 로드하게 된다.


2) Runtime Data Areas

JVM이 프로그램을 수행하기 위해 OS로 부터 별도로 할당 밭은 메모리 공간이며, 크게 5가지 영역으로 나눌 수 있다.

  • PC Regisiter

 1. 스레드가 생성 될 때마다 생성되는 공간

 2. 스레드가 어떤 부분을 어떤 명령으로 실행할 지 기록

 3. 현재 실행되는 부분의 명령과 주소를 저장

 4. Native Method를 수행할 때는 PC Register는 Undefined 상태가 된다. 이것은 JVM을 거치지 않고 바로 API를 통해 바로 수행하게 된다는 의미인데, JAVA는 플랫폼에 종속 받지 않는 것을 의미한다.


  • JVM Stack
 1. 매서드가 호출되면 매서드와 매서드 정보를 스택에 쌓게된다.
 2. 매서드의 매개변수, 지역변수, 임시변수, 매서드 호출한 주소를 저장 
 3. 매서드 종료 시 메모리 공간에서 사라짐
  • Native Method Stack
 1. Java 외의 언어로 작성된 네이티브 코드들을 위한 Stack

 2. JNI(Java Native Interface)를 통해 호출되는 C/C++ 등의 코드를 수행하기 위한 Stack

 3. JNI를 이용하여 JVM 내부에 영향을 주지 않기 위해서이다.


  • Method Area
 1. 모든 쓰레드가 공유하는 메모리 영역

 2. 클래스, 인터페이스, 매서드, 필드, Static 변수를 저장


  • Heap
 1. 런타임시 동적으로 할당하여 사용 하는 영역
 2. new 연산자로 생성된 객체와 배열을 저장

3) Execution Engine

Load된 클래스의 바이트코드를 실행하는 런타임 모듈이 Execution Engine이다.
클래스 로더를 통해 JVM 내의 런타임 데이터 영역에 배치된 바이트 코드는 Execution Engine에서 실행되며, 자바 바이트 코드를 명령어 단위로 읽고 실행



자주 나오는 질문


1. Stack 영역에서 메모리의 제한된 크기 이상을 사용하게 되면 오버플로우가 발생한다.

2. Heap 영역에서 메모리 할당/해제 동작이 반복되면 메모리 단편화 현상이 일어난다.

3. Heap 영역과 Stack 영역에 대한 메모리 접근속도는 Stack가 훨씬 빠르다. 왜냐하면 Stack는 미리 할당 된 공간을 사용하는 것이고 Heap은 사용시마다 할당 되기 때문이다.


LIST

'전공 > JAVA' 카테고리의 다른 글

JNI  (0) 2020.06.24
try-with-resource  (0) 2018.07.08
컬렉션  (0) 2018.05.13
접근제어자  (0) 2018.05.02
오버라이딩과 오버로딩  (0) 2017.11.24
SMALL

 4-way-handshake?


TCP 연결을 위해 3-way-handshake를 했다면 연결을 종료 할 때는 4-way-handshake를 사용한다.



최초의 상태는 서로 통신 중이기 때문에 양쪽이 ESTABLISHED 상태이다.


1. 통신을 종료하려는 Client가 서버에게 FIN 패킷을 보내고 Client는 FIN_WAIT_1 상태로 대기한다.

2. FIN 패킷을 받은 Server는 해당 포트를 CLOSE_WAIT로 바꾸고 잘 받았다고 ACK를 Client에 전하고 ACK를 받은 Client는 FIN_WAIT_2 상태로 변경한다.

그리고 동시에 Server에서는 해당 포트에 연결되어 있는 Application에게 Close()를 요청한다.

3. Close() 요청을 받은 Application은 종료 프로세스를 진행시켜 최종적으로 Close()가 되고 Server는 FIN 패킷을 Clinet에게 전송 후 자신은 LAST_ACK로 상태를 변경한다.

4. FIIN_WAIT_2에서 Server가 연결을 종료했다는 신호를 기다리고 FIN을 받으면 ACK를 Server에 전송하고 TIME_WAIT로 상태를 바꾼다. 그리고 일정시간이 지나면 TIME_WAIT가 CLOSED로 변경 된다. 최종 ACK를 받은 서버는 자신의 포트도 CLOSED로 변경된다.

LIST

'전공 > 네트워크' 카테고리의 다른 글

IEEE 802 위원회 LAN 표준  (0) 2018.07.01
네트워크 토폴로지  (0) 2018.07.01
회선 교환(Circuit Switching)과 패킷 교환(Packet Switching)  (0) 2018.07.01
데이터 전송 방식  (0) 2018.07.01
3-way-handshake  (0) 2018.05.02
SMALL

3-way-handshake?


TCP 통신을 위해 네트워크 연결을 3 way handshake 방식으로 연결한다.



1. Client에서 Server에 연결 요청을 하기위해 SYN 데이터를 보낸다.

2. Server에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV로 상태가 변경된다.

3. Clinet에서 SYN+ACK를 받고 ESTABLISHED로 상태를 변경, 서버에 요청을 잘 받았다고 ACK를 전송한다. ACK를 받은 서버는 상태가 ESTABLSHED로 변경된다.


3번까지 무사히 완료되면 서로의 포트가 ESTABLISHED 되면서 연결이 된다.


 Closed 

닫힌 상태 

 LISTEN

포트가 열린 상태로 연결 요청 대기 중 

 SYN_RCV

SYN 요청을 받고 상대방의 응답을 기다리는 중 

 ESTABLISHED

포트 연결 상태 


사용 하는 이유


간단히 말하면 상호 신뢰성 때문이다. 신호를 보냈으면 잘 받았냐고 상대 한테 묻고 잘 받았으면 잘 받았다고 응답을 함으로써 데이터 전송을 정확하게 하기 위해서 사용한다.

LIST

'전공 > 네트워크' 카테고리의 다른 글

IEEE 802 위원회 LAN 표준  (0) 2018.07.01
네트워크 토폴로지  (0) 2018.07.01
회선 교환(Circuit Switching)과 패킷 교환(Packet Switching)  (0) 2018.07.01
데이터 전송 방식  (0) 2018.07.01
4-way-handshake  (0) 2018.05.02
SMALL

접근 제어자란?


<종류/범위>

1. private : 같은 클래스 내에서만 접근가능

2. public : 접근 제한이 전혀 없다.

3. protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근가능

4. default : 같은 패키지 내에서만 접근 가능, 접근제어자를 지정하지 않았다면 자동으로 default로 지정


접근 제어자를 사용하는 이유


접근 제어자는 접근 할 수 있는 범위를 제한한다. 외부의 접근으로부터 데이터를 보호하거나, 굳이 보여줄 필요 없는 정보나 내부적으로 사용되는 정보를 숨기기 위해서 이다.

LIST

'전공 > JAVA' 카테고리의 다른 글

JNI  (0) 2020.06.24
try-with-resource  (0) 2018.07.08
컬렉션  (0) 2018.05.13
JVM  (0) 2018.05.02
오버라이딩과 오버로딩  (0) 2017.11.24
SMALL

http://blog.daum.net/warmfeel/108 참고


LIST

'전공 > 데이터베이스' 카테고리의 다른 글

UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
DB정규화  (0) 2018.05.17
트랜잭션  (0) 2018.05.04
조인  (0) 2018.05.02
SMALL

오버라이딩?


부모 클래스로부터 상속받은 메서드를 재정의 하는 것



위에 보시다 싶이 People 클래스를 Man 클래스가 상속을 받아서 추상 매서드를 재정의 하였습니다. 이게 바로 오버라이딩 입니다.



오버라이딩 조건


1. 매서드 이름이 동일해야 한다.

2. 매개변수가 같아야 한다.

3. 리턴 타입이 같아야 한다.


오버라이딩 주의사항


1. 접근 제어자를 부모 클래스의 매서드보다 좁은 범위로 변경 할 수 없다.

2. 예외는 부모 클래스의 매서드보다 많이 선언할 수 없다.

3. 인스턴스 매서드를 스태틱매서드 또는 그 반대로 변경할 수 없다.


오버로딩?


같은 이름의 매소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르게 하는 것





















LIST

'전공 > JAVA' 카테고리의 다른 글

JNI  (0) 2020.06.24
try-with-resource  (0) 2018.07.08
컬렉션  (0) 2018.05.13
JVM  (0) 2018.05.02
접근제어자  (0) 2018.05.02

+ Recent posts