ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해 99 8주차 WIL
    카테고리 없음 2022. 7. 3. 19:03

    Weekly I Learned

    6/27~ 7/03 : 실전프로젝트


    실전 프로젝트 첫주가 지났다. 역시 계획 대로 쉽게 흘러가진 않는다. 시작부터 조급함에 힘들었던것 같다. 우리만의 페이스를 유지하는게 중요하단 생각을 했다. 이번주 우리팀의 주요 기능인 채팅기능 구현관련해서 여러 팀원들이 고생하였다. 아직 최종적인 결과물이 나오지 않아 이어지는 한주도 그 부분에 있어 많은 걱정이 된다. 개인 적으로는 어제부터 이번프로젝트에 적용될 검색 기능에 대해 스터디를 진행중이다. 현재 검색하고자하는 문자열이 포함된 내역을 조회하는 기능은 팀원의 노력으로 구현되어있으나 공백이나 글자가 조금 다른 부분에 대한 처리를 비롯해 Data가 많이 쌓여있을때 검색 성능 향상을 위한 알고리즘 등 추가적으로 적용해야 될 부분이 있어보인다.

     

    핵심 키워드

     

    어간 추출 검색 기법(Word stemming)

      책이름이 저장되어있는 데이터 베이스에서 “Refactoring: Improving the Design of Existing Code”라는 책을 찾는다고 하면 보통 책의 정확한 제목보다는 비슷한 단어, 예를 들어 “refactor”, “refactors”, “refactored” , “refactoring”과 같은 단어를 사용하여 책을 찾아보게 될 것이다. 이와 같은 검색 기법을 Word stemming 이라고 한다.

    Full-Text Search

      텍스트를 다양한 방식으로 미리분석하여 인덱싱을 해놓고 빠르게 자료를 검색해내는 기법을 말한다. 위의 어간 추출 검색 기법과 같이 그것이 어근일 수도 있고, 비슷한 의미의 단어일 수도 있고, 반대말일 수도 있다. 한가지 공통된 특징은 텍스트를 검색 대상으로 하며, 사전에 관련 데이터를 가지고 인덱싱이 되어 있어야 한다는 것이다.

    관련 라이브러리로는  Lucene이 있으며, Hibernate Search ORM이 Lucene의 사용성을 증가 시킨다

     

      Lucene은 인덱싱/검색 라이브러리이다. 문자열만 입력 받는다

    • Stemming : 어근별로 인덱싱 (ex : "bikes" 같은 경우 "bike"로 바꿔서 인덱싱)
    • Stop Words Filtering : 의미를 이해하는데 불필요한 단어를 제거 (ex : "a", "the" 같은 관사 제거)
    • Text Normalization : 영어의 경우에 쓰이는 액센트와 같은 기타정보를 표시하는 의미에 영향이 없는 정보를 없애는 과정
    • Synonym Expansion : 유의어를 인덱스에 추가

    WebRTC (Web Real-Time Communication)

      별도의 플러그인 설치 없이 실시간으로 미디어(오디오, 비디오, 텍스트, 파일 등)를 최대한 서버를 거치지 않고 Peer간 전송할 수 있는 오픈 소스 웹 기반 기술

    • Signaling Server : WebRTC에서 가장 기본이 되는 서버
      서로 다른 네트워크에 있는 Peer들을 연결시키기 위해서는 Session Control Message, Error Messages, Codec, Bandwith 등의 정보를 SDP(Session Description Protocol)을 사용하여 각각의 Peer들에게 전달돼야 하며 이 프로세스를 Signaling 이라고 하고, Signaling Server가 이를 중계하는 역할을 한다.
      WebRTC와는 별개로 Signaling Server는 직접 구축해야하며, 일반적으로 클라이언트와 WebSocket을 사용하여 통신한다 
    • STUN Server (Session Traversal Utilities for NAT)
      Signaling Server를 이용하여 Peer간의 통신이 가능하나 통신 중간에 방화벽, NAT 환경에 놓여 있는 Peer에 대해서는 직접적인 Signaling이 일불가능하다. 이를 해결하기 위해 STUN Server 와 TURN Server가 필요하다
      STUN Server로부터 클라이언트 자신의 공인 IP(Public Address)를 확인한 후, 해당 IP를 활용하여 Signaling 하게 된다. (STUN Server는 Google등의 오픈 소스 이용이 가능하며, 단순 정보 제공을 위한 서버라 트래픽이 현저히 낮아 무료 서버를 사용해도 크게 문제는 없다)
    • TURN(Traversal Using Relays around NAT) Server
      앞선 STUN Server를 이용하면 80%정도는 Signaling을 통한 연결이 가능하나 20%정도는 그렇지 못한데 보호정책이 강한 NAT나 라우터, 보통 Symmetric NAT 환경에서 나타난다. 
      TURN Server는 Symmetric NAT 제한을 우회할 수 있게끔 해주는 기능을 한다. Peer간 모든 트래픽을 중계해주기 때문에 상당한 부하를 감당해야하며, 비용 또한 크게 발생. TURN Server는 안정적인 서비스를 위해서 직접 운영하는 것이 필요하다. (COTURN이라는 오픈 소스가 유명)
    • WebRTC의 구현 방식은 크게 3가지 Mesh, SFU, MCU (이번 프로젝트는 4인 접속 환경이여서 Mesh로 진행해도 괜찮을거 같다)

    시스템 아키텍처(Systems architecture)

      시스템의 구조, 행위, 더 많은 뷰를 정의하는 개념적 모형. 시스템 목적을 달성하기 위해 시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용하는지, 정보가 어떻게 교환되는지를 설명

    1. 시스템 아키텍처는 시스템의 구성 및 동작 원리를 나타냄
    2. 시스템 아키텍처는 시스템의 구성 요소에 대해 설계 및 구현을 지원하는 수준으로 자세히 기술
    3. 구성 요소 및 시스템 외부 환경과의 관계 묘사
    4. 요구 사양과 시스템의 전체 수명 주기를 고려
    5. 시스템의 전체적인 최적화가 목표

     

    참고자료

     

    주간 마무리

     

    이번주는 뭔가 어영부영 지나간 느낌이 든다. 아쉬운 한주였다. 그러다 보니 다가오는 주가 부담이 될듯 하다. 위에서 정리한 전반적인 프로젝트의 시스템 아키텍처 작성부터, Web RTC, 검색 알고리즘, GPS 기능과 지난주 끝나지 못한 Websocket에 redis 적용까지 난항이 예상된다. 그래도 이모두를 해결한다면 한단계 더 성장할 수 있겠지?

     

    댓글

Designed by Tistory.