반응형

출처 : https://12bme.tistory.com/176?category=734721

 

[오픈소스] 메시지큐(Message Queue) 알아보기

메시지 큐 개념을 다시 잡아보고자 학습용도로 작성한 포스팅입니다. 출처는 http://zzong.net/post/3 입니다. 메시지 지향 미들웨어(Meesage Oriented Middleware: MOM)은 비동기 메시지를 사용하는 다른 응용 프..

12bme.tistory.com

메세지 지향 미들 웨어[Message Oriented Middleware : MOM]이란?

-  비동기 메세지를 사용하는 다른 응용프로그램 사이의 데이터 송수신을 의미.

 

이러한 MOM을 구현한 시스템을 Message Queue, 즉 MQ라고 칭한다.

 

MQ는 프로그램간, 프로세스간 데이터를 서로 교환할 때 사용하는 방법이다.

데이터를 교환할 때 시스템이 관리하는 메세지큐를 하용하는데 이때 사용하는 프로토콜을 

AMQP[Advanced Message Queing Protocol]이라고 한다.

 

 

메세지 큐의 장점은 크게 6가지가 있다.

1. 비동기 : Queue에 넣기 때문에 나중에 처리 할 수 있다.

2. 비동조 : Application과 분리 할 수 있다.

3. 탄력성 : 일부가 실패하더라도 Apllication 전체에 영향이 가지 않는다.

4. 과잉 : 실패할 경우 재실행이 가능하다.

5. 보증 : 작업의 처리상황을 알 수 있다.

6. 확장성 : 다수의 프로세스들이 큐에 메세지를 보낼 수 있다.

 

MQ는 주로 대용량 데이터를 처리하거나 채팅 혹은 비동기 데이터를 처리할 때 사용한다.

프로세스 단위로 처리하는 우베 요청이나 일반 프로그램 사용 시 사용자 혹은 데이터의 급증 시 

응답 대기 시간이 지연되어 서비스의 장애르 초래할 수 있기 때문에 우선 MQ 로 메세지, 데이터를 집중한 후 

필요한 프로그램에 작업을 분산시키는 것이 주 목적이다.

 

 

MQ 프로그램들은 다음 포스팅에서...

반응형

'Server' 카테고리의 다른 글

서버 Socket 설정하는 방법들  (0) 2019.09.06
게임 서버에서의 Log 구성  (0) 2019.09.04
게임 서버에서의 Log의 분류  (0) 2019.09.04
IOCP 동작원리에 대하여[작성중]  (0) 2019.08.26
IOCP에 대하여  (0) 2019.08.26
Posted by Sweetmeats_boy
반응형

우선 스레드란 프로세스 내부에서 공통 자원을 토대로 실행되는 가장 작은 작업단위라는 것을 모두 알 것이다.

 

멀티스레드란 한개의 프로세스 내에서 여러 스레드가 동시 다발적으로 작업을 수행하는 것을 의미한다.

 

그렇다면 멀티스레드의 장단점은 무엇일까?

 

우선 장점으로는 크게 응답성, 자원공유, 경제성, 멀티프로세서 활용 이렇게 4가지가 존재한다.

 

대화형 프로그램을 멀티스레드화 하면, 프로그램의 일부 스레드가 지연되더라도 다른 스레드가 여전히 수행된다.

 

예를 들면 웹페이지에서 이미지 로딩중에 다른 작업이 진행되는 경우 등이 응답성 측면에서의 장점에 속한다.

 

자원 공유와 경제성의 경우 같은 프로세스에 속한 스레드는 자원을 공유하기 때문에 context switching 등에서 좀더 비용이 적다는 이점이다.

 

마지막으로 멀티프로세서 활용의 경우 각각의 스레드를 다른 프로세서에서 병렬로 수행이 가능하다는 것이다.

 

단점의 경우는 크게 4가지로 볼수 있다.

첫번째로는 자원공유로 인해 발생하는 단점으로 각각의 스레드가 공유자원에 대해서 서로 간섭하는 경우가 생긴다는 것이다.

 

두번째로는 한개의 스레드만 실행 중인 경우 싱글 스레드와 차이가 없고 오히려 더 지연되는 경우가 생길 수 있다는 것이다.

 

세번째로는 멀티 스레드 적용 시 운영체제를 우선 고려해야 하고 응용프로그램의 경우 멀티 스레드를 고려한 구조로 설계되어야 한다는 것이다.

 

마지막으로는 각 스레드 별 스케줄링에 주의해야 한다는 것이다.

 

 

멀티 스레드 모델

 

멀티 스레드는 크게 3가지 모델로 구분할 수 있다.

1. 다 대 일[Many To one]

Many To one의 경우 여러 유저 스레드들이 한개의 프로세서로 매핑되는 방식이다.

스레드의 관리는 유저 레벨에서 이루어 지며 주로 커널 스레드를 지원하지 않는 시스템에서 사용한다.

다만, 이 경우 한개의 스레드만 커널에 접근 할 수 있다는 단점이 존재한다.

이 단점 때문에 진정한 의미의 동시성이 지원되지 않는다.

 

 

2. 일 대 일[One to One]

One to One의 경우 한개의 스레드를 한개의 프로세서에 한개의 스레드를 매핑 시키는 방법이다.

이 경우 위의 Many To One 모데에서 발생하던 단점인 특정 스레드가 커널 사용시 다른 스레드가 중단되는 단점이 사라진다. 

그러나 커널 스레드도 한정된 자원을 사용하기 때문에 무한정 생성할 수는 없으며 항상 스레드 생성 갯수를 염두해 두어야 한다.

 

 

3. 다 대 다

Many To Many 의 경우 여러개의 유저 스레드를 여러 개의 커널 스레드로 매핑시키는 방법이다.

Many to One, One to One의 단점을 해결하기 위해 고안된 방법이다.

커널 스레드는 생성된 사용자 스레드와 같은 수 또는 그 이하로 생성되어 스케쥴링 한다.

Many to One 방식에서 스레드가 시스템 호출 시 중단 되는 현상, One to One의 스레드 생성 갯수제한에 대해서 고민하지 않아도 된다. 커널에서 유저 스레드와 커널 스레드의 매핑을 조절하기 때문이다.

[출처 : 위키 https://ko.wikipedia.org/wiki/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%94%A9 ]

 

 

 

 

반응형

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

게임에서의 랜덤값에 대해서  (0) 2019.09.02
FirebaseMessage 란?  (0) 2019.07.31
ORM이란?  (0) 2019.06.23
LockFree란?  (0) 2017.03.03
메모리 거짓 공유란?  (0) 2017.01.13
Posted by Sweetmeats_boy

2019. 6. 23. 19:27 기타 상식

ORM이란?

반응형

O.R.M(Object Relational Mapping) 이란 무엇인가

 

 

간단히는 C#의 property / Java의 getter,setter를 이용하여

 

객체지향프로그래밍(O.O.P)의 객체와 관계형 데이터베이스 간의 Mapping을 지원해주는

 

Framework 혹은 Tool들을 의미한다.

 

 

그렇다면 ORM에는 어떤 것들이 있을까?

 

대표적으로 아래의 ORM들이 가장 대중적이다.

  • MyBatis.
  • iBatis.
  • JPA.
  • Hibernate

이 중 MyBatis, ibatis가 많이 쓰인다고 한다.

 

그렇다면 ORM들의 장단점은 어떨까

 

우선 장점에 대해서 알아보자.

1. 개발자로 하여금 좀 더 직관적이고 로직에 집중할 수 있게 도와준다.

 - SQL이 아닌 객체에 접근해서 Data를 조작하기 때문에 좀더 직관적이다.

 - SQL사용시 필요한 부수적인 코드들을 줄일 수 있다.

 - 객체에 관해 코드를 작성하므로 가독성이 높아진다.

 

2. 코드 재사용성 증 및 유지보수의 편리성이 증가한다.

 - Mapping 정보를 명확히 하기 때문에 ERD를 일일히 확인하지 않아도 된다.

 - MVC패턴에 활용하기 쉽다.

3. DBMS에 대한 종속성을 줄일 수 있다.

 - 개발자는 객체 정의에 집중함으로써 DBMS를 교체하는 등의 작업에서 작업 시간, 리스크를 줄일 수 있다.

4. SQL을 몰라도 독립적으로 개발이 가능하다.

 

반대로 단점들은 무엇이 있을까

1. 오롯이 ORM만 사용해서 모든 서비스를 구현할 수 없기 때문에 DBMS로 부터 완벽히 독립할 수 없다.

 - 필요한 경우 DBMS를 사용해야 하는 상황이 발생한다.

2. ORM으로 인해 프로젝트의 복잡성, 난이도가 증가할 수 있다.

3. 잘못된 사용으로 인해 속도가 느려지거나 기타 문제가 발생할 수 있다.

4. DBMS의 고유 기능을 사용 못하는 경우가 발생한다.

5. 프로시저 사용이 많은 환경에서는 ORM 적용으로 얻는 장점을 활용하기 힘들다.

 - 기존의 프로시저를 많이 사용하던 경우, 일일히 객체와 Mapping 시켜줘야 하며,

   이 과정에서 비용(리스크, 시간소모 등)이 발생한다.

 - 예 : User라는 table에 대해서 Person, Address 라는 객체를 구분해서 생성하는 경우

6. The Object-Relational Impedance Mismatch( 객체와 DBMS의 불일치성 ?)

 - Granualrity ( 세분성 )

    . 경우에 따라서 DB의 Table 명세보다 객체를 과도하게 만들 수 있다.

      -> User라는 Table이 Person, Address라는 클래스로 구분해서 생성하는 경우 등등

 - Inheritance ( 상속 )

    . ORM에서는 상속 개념을 사용할 수 없다.

 - Identity ( 일치 )

    . RDBMS에서는 Pk값등으로 일치여부를 판별하지만 자바는 객체주소 비교, 객첵밧 비교를 모두 지원한다.

 - Associations ( 연관성 )

    . 객체 지향 언어는 Referance를 통해 객체를 참조하지만 RDBMS는 외래키로 객체를 참조한다.

     -> 이 경우 쌍방향 참조를 할 때 java는 각 객체가 서로를 참조할 변수를 지녀야 하지만

         RDBMS는 외래키만 참조하면 된다.

      -> 즉, Java의 경우 방향정을 지니며 RDBMS는 방향성을 지니지 않는다.

 - Navigation ( 탐색 / 순회 )

    . Java의 경우 객체간의 연결을 통해서 이동하며 탐색/순회 한다

    . RDBMS에서는 일반적으로 쿼리를 최적화하여 엔티티를 탐색 및 선택한다.

반응형

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

FirebaseMessage 란?  (0) 2019.07.31
멀티 스레드에 관해서  (0) 2019.07.14
LockFree란?  (0) 2017.03.03
메모리 거짓 공유란?  (0) 2017.01.13
Concurrency와 Parallelism의 차이에 대하여  (0) 2017.01.12
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함