SlideShare a Scribd company logo
1 of 21
Download to read offline
내 일촌들의 모아보기는 어떻게 제공되나?
                            - SONIC 시스템 구조 및 활용

    CTO 〉 기술연구소〉 플랫폼개발팀 〉 박정수
    Update : 2011. 10. 14




© 2011 SK Communications
내용

    I.   모아보기란?

    II. 싸이월드 서비스의 특징

    III. 모아보기를 제공 하기 위해 고려 되어야 할 점

    IV. SONIC 구성

    V. SONIC 세부 구조

    VI. 질문 / 답변



2
모아보기란?

     SONIC 시스템을 이용, 싸이월드 회원들의
      활동을 뉴스 피드로 제공
      SOcial Network Information Connector



     일촌 / 팬 기반의 소식 전달

     3가지 분류의 소식을 제공
      자싞의 활동 내역
      일촌/팬의 활동 내역
      „나‟를 대상으로 한 활동내역

3
모아보기란?
     발표자의 C로그




4
싸이월드 서비스의 특징 (1/2)
     공개 설정이 다양함
       4개의 일촌 그룹 (1/2/3/4)

       관심일촌

       팬




5
싸이월드 서비스의 특징 (2/2)

     다양한 플랫폼 (플랫폼별 Data Format 상이)
       미니홈피

       싸이블로그

       Clog

       네이트




6
모아보기를 제공 하기 위해 고려 되어야 할 점

    피드 전달이 실 서비스에    •비동기 데이터 처리

      영향을 주지 않음      •예) 태극 홈피 일촌 수 100만명




      서비스의 변화에       •스크립트를 통한 비즈니스 로직 처리

     유연하게 대응 가능      •서버 정지 없이 로직 변경 가능



                     •분당 8,000건의 새글 데이터
       빈번한 데이터
                     •분당 600,000건의 피드 발송
       삽입 / 수정       •DB 처리시 상당한 부하 예상



    문서의 수정 및 일촌 그룹   •데이터의 중복 저장 시 과다한 수정 비용 발생

     변경의 실시갂 반영      •키 데이터와 컨텐츠 데이터의 분리 저장




7
SONIC 시스템 구성
     Sonicd 데몬 제작
          비 동기 처리 가능
          스크립트로 비즈니스 로직을 구성 가능
            • 스크립트에 따라 로직이 바뀌므로 한 종류의 데몬으로 시스템 구성 가능
          저장소 기능
            • 자체 제작 B+tree 기반의 DB
            • Message-Queue
            • 각 삽입 / 수정 / 삭제 연산에 대해 트랜잭션 로그로 관리(장애 복구)


     SONIC 시스템 구성
          피드 = 키와 활동자 정보만 저장하는 토큰
          피드에 저장된 키를 통해 데이터를 쿼리
                                               Buddy

                                          Feed/Inbox

    Data Input (SVC)   Dispatcher              Meta              Interface   Query (WEB)


                                    Contents           DBCache


8
SONIC 세부 구조
     각 사용자는 자싞의 저장소를 가짐
         저장소에 „피드‟라는 작은 데이터만 저장
         피드는 하나의 데이터에 여러 개가 생성
         내부 키, 작성자, 초기 열람 권한, 서비스 종류 등
         저장 공갂을 낭비하지 않기 위해 큰 데이터는 Contents 서버에 별도로 저장


     회원당 3개의 목록                            Feed/Inbox
       내가 쓴 글                                                                 Query (WEB)
                                                                   Interface
       일촌/팬이 쓴 글
                                      Contents      DBCache
       반가운 소식

          A가 글을 작성    나에게 피드 발송   A의 내 모아보기
                                   A   A A A A

                                  B의 일촌/팬 모아보기
                 일촌인 B,C에게 발송                                            모아보기 서비스
                                   A  C A D C
                                                         한 번에 모아보기 화면에
                                  C의 일촌/팬 모아보기           필요한 데이터를 가져옴
                                   A  B D A E


9
SONIC 세부 구조
          Dispatcher
                피드 생성, 일촌변경 등 실제 Operation 수행
                모아보기의 모든 데이터 입력 처리 (입력 데이터 분석)
                외부 키 추출 후, 내부 키 매핑 작업


     {SVC:”미니홈피 게시판”,
     폴더번호 : 3, 게시글번호 :
      501, 홈주인 : “나주인”,
     제목 : “즐거운 모아보기”, 내
     용 : “즐거운 세상~”, 폴더권
     한 : “1촌공개-그룹1,3”, 글권
          한 : “1촌공개”, …}

                                                     Buddy

                                                Feed/Inbox

                                                                                   Query
          Data Input (SVC)   Dispatcher              Meta              Interface

                                          Contents           DBCache




10
SONIC 세부 구조
      Meta-comment list
           외부 데이터의 키를 Contents 서버의 UID와 연결
            SVC Key -> UID (시계열 key – timestamp)

                                       사용자 : 나주인 의 키 매핑 테이블
     홈주인 : “나주인”                       서비스 종류                  폴더 번호          게시글 번호      발급된 키
                                      미니홈피 게시판                       3             495   12eef5718ef
       서비스 종류 :
     ”미니홈피 게시판”                       미니홈피 게시판                       4             498   1300f5708ef
                                      블로그 게시판                        201         10071   1200f5708ef
      폴더번호 : 3

     게시글번호 : 501

                                                   Buddy

                                              Feed/Inbox

        Data Input       Dispatcher                Meta                    Interface     Query


                                        Contents           DBCache




11
SONIC 세부 구조
      Dispatcher
           외부키 – 내부키 매핑이 없을 시 내부키 싞규 발급
           매핑 테이블 저장 -> Meta 서버
           내부 키 : UID (시계열 key – timestamp)
                                     사용자 : 나주인 의 키 매핑 테이블
     홈주인 : “나주인”
                                     서비스 종류                   폴더 번호          게시글 번호         발급된 키
       서비스 종류 :                     미니홈피 게시판                       3                495    12eef5718ef
     ”미니홈피 게시판”
                                    미니홈피 게시판                      3                 501   1400f0708ef
      폴더번호 : 3                      미니홈피 게시판                       4                498    1300f5708ef
                                    블로그 게시판                       201           10071      1200f5708ef
     게시글번호 : 501

                                                Buddy

                                           Feed/Inbox

        Data Input     Dispatcher               Meta                    Interface         Query


                                     Contents           DBCache




12
SONIC 세부 구조
          Contents-Data
                   글 Feed의 실제 내용이 저장되는 서버
                   UID가 key인 B+tree 테이블 (Berkeley DB를 사용해 구현)
                   일부 필드 (공개권한, 댓글수, 폴더번호)는 부분 업데이트 기능을 제공
     { 1400f0708ef :                                                  내부 키 (UID)                       내용
        { SVC:”미니홈피 게시판”,                                             1400f0708ef   {
          폴더번호 : 3,                                                                     SVC      : ”미니홈피 게시판”,
          게시글번호 : 501,                                                                  폴더번호     : 3,
          홈주인 : “나주인”,                                                                  게시글번호   : 501,
          제목 : “즐거운 모아보기”,                                                              홈주인      : “나주인”,
          내용 : “즐거운 세상~”,                                                               제목       : “즐거운 모아보기”,
                                                                                        내용       : “즐거운 세상~”,
          폴더권한 : “1촌공개-그룹1,3”,
                                                                                        폴더권한     : “1촌공개-그룹1,3”,
          글권한 : “1촌공개”, …                                                               글권한      : “1촌공개”
        }                                                                           }
     }
                                                         Buddy

                                                    Feed/Inbox

        Message                                                                                         Query (WEB)
         Queue                   Dispatcher              Meta                       Interface

                                              Contents           DBCache




13
SONIC 세부 구조
            Dispatcher
                    피드 생성 후 발송
                    피드 : 서비스번호 + 내부키 + 활동자 + 피드 생성시 권한
                    발송 대상은 Buddy 서버로 부터 조회

            Buddy
                    싸이월드 회원의 일촌/팬 관계를 가지고 있는 서버
                      • 항상 실시갂으로 일촌/팬DB와 동기화 중
     {
         서비스 : 미니홈피 게시판 글,
         내부키 : 1400f0708ef.
         작성자 : 박문자,
         권한 : 1촌그룹 1,3에 공개
                                                       Buddy
     }

                                                  Feed/Inbox

         Message                                                                     Query
          Queue                Dispatcher              Meta              Interface

                                            Contents           DBCache




14
SONIC 세부 구조
       사용자 : 나주인 의 반가운 소식 테이블
       서비스 종류        내부 키        활동자               권한
     미니홈피 게시판 글    1400f0708ef   박문자          1촌 그룹 1,3에 공개
          …              …         …               …

        사용자 : 박문자 의 내가 쓴 글 테이블
       서비스 종류           내부 키      활동자              권한
      미니홈피 게시판 글   1400f0708ef    박문자         1촌 그룹 1,3에 공개
          …              …         …                …

         사용자 : 박문자 의 일촌 나일촌 의 일촌/팬 소식 테이블
       서비스 종류           내부 키      활동자              권한
      미니홈피 게시판 글   1400f0708ef    박문자         1촌 그룹 1,3에 공개
          …              …         …                …

                    {
                         서비스 : 미니홈피 게시판 글,
                         내부키 : 1400f0708ef.
                         작성자 : 박문자,                                Buddy
                         권한 : 1촌그룹 1,3에 공개
                    }                                            Feed/Inbox

                                                    Dispatcher




15
SONIC 세부 구조
      조회 시 동작 (Query)
        HTTP request 수싞
                                                             홈주인 : 나주인
                                                             방문자 : 박문자
                                                             타입 : 내가 쓴 글
                                                               개수 : 20


                               Buddy

                           Feed/Inbox

                                                 Interface        Query


                    Contents           DBCache




16
SONIC 세부 구조
      조회 시 동작
        홈주인과 방문자가 다른 경우,
         Buddy서버에서 홈주인과 방문자의 관계 쿼리

      사용자 : 12345678 의 일촌 테이블
                                                                      홈주인 : 나주인
      일촌           그룹      관심일촌                수싞금지 설정
      박문자           3           O                수신 허용
                                                                      방문자 : 박문자
      나일촌           1           X                수신금지                  개수 : 20
       …           …            …                  …



                                                                     방문자는 홈주인의
                                       Buddy                         일촌 그룹 3에 속함

                                    Feed/Inbox

                                                         Interface           Query


                            Contents           DBCache




17
SONIC 세부 구조
      조회 시 동작
           Feed-inbox 서버에서 공개 권한(그룹 3이 볼 수 있는)에 맞는 피드 n개 가져옴
           데이터가 필요한 피드는 Contents서버나 외부 서비스 서버에서 내용을 가져옴
              • 데이터가 삭제되거나 오류로 인해 조회할 수 없는 경우에는
                해당 피드를 결과목록에서 제거
          사용자 : 나주인 의 내가 쓴 글 테이블
         서비스 종류          내부 키             활동자                 권한
                                                                               홈주인 : 나주인
      미니홈피 게시판 글       1412f0708ef        나주인            1촌 그룹 1,3에 공개
            …              …                …                 …
                                                                               타입 : 내가 쓴 글
     { 1412f0708ef :
                                                                               방문자 : 박문자
     { SVC:”미니홈피 게시판”, 폴더번호 : 3, 게시글번호 : 501,                                    개수 : 20
         홈주인 : “나주인”, 제목 : “즐거운 모아보기”, 내용 : “즐거운 세상~”,
         폴더권한 : “1촌공개-그룹1”, 글권한 : “1촌공개”, … } }


                                       Buddy                                        방문자는 홈주인의
                                                                                    일촌 그룹 3에 속함
                                     Feed/Inbox

                                                                   Interface    Query


                           Contents            DBCache


18
SONIC 세부 구조
         조회 시 동작
              데이터의 공개권한을 보고 보여줄 수 없는 피드라면 결과목록에서 제거
                • 예)
                  1) 최초 피드 발송시 공개권한 : 그룹 1, 3
                  2) 게시글 권한 수정으로 그룹 1에만 공개로 수정                                                     홈주인 : 나주인
                  3) 최종 그룹 1에만 공개 권한이 있으므로 해당 피드 제거                                                타입 : 내가 쓴 글
                                                                                                   방문자 : 박문자
              결과목록의 피드 수가 부족하면 위의 과정을 다시 반복                                                         개수 : 20
       사용자 : 나주인 의 내가 쓴 글 테이블                                              { 1412f0708ef :
      서비스 종류        내부 키            활동자                      권한            { SVC:”미니홈피 게시판”, 폴더번호 : 3, 게시글번호 : 501,
                                                                               홈주인 : “나주인”, 제목 : “즐거운 모아보기”, 내용 : “즐거운 세상~”,
     미니홈피 게시판 글   1412f0708ef       나주인              1촌 그룹 1,3에 공개             폴더권한 : “1촌공개-그룹1”, 글권한 : “1촌공개”, … } }
         …            …               …                      …

                                           Buddy

                                      Feed/Inbox

                                                                     Interface            Query


                                Contents           DBCache


19
SONIC 시스템의 활용




20
Q&A
        감사합니다.




21

More Related Content

Similar to D2 sonic시스템구조및활용

프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
중선 곽
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
흥배 최
 

Similar to D2 sonic시스템구조및활용 (20)

Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015Metaworks3 Framework workbook 2015
Metaworks3 Framework workbook 2015
 
Html5
Html5 Html5
Html5
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
 
Infiniflux introduction
Infiniflux introductionInfiniflux introduction
Infiniflux introduction
 
Spring@mvc웹호스팅
Spring@mvc웹호스팅Spring@mvc웹호스팅
Spring@mvc웹호스팅
 
J2 Ee
J2 EeJ2 Ee
J2 Ee
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
 
DB Monitoring 개념 및 활용 (박명규)
DB Monitoring 개념 및 활용 (박명규)DB Monitoring 개념 및 활용 (박명규)
DB Monitoring 개념 및 활용 (박명규)
 
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SPOAZ] : Spotify 기반 개인화 음악 추천 서비스 프로젝트
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SPOAZ] : Spotify 기반 개인화 음악 추천 서비스 프로젝트제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SPOAZ] : Spotify 기반 개인화 음악 추천 서비스 프로젝트
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [SPOAZ] : Spotify 기반 개인화 음악 추천 서비스 프로젝트
 
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
 
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
 
개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기개발사는 모르는 퍼블리셔의 뒷 이야기
개발사는 모르는 퍼블리셔의 뒷 이야기
 
포트폴리오
포트폴리오포트폴리오
포트폴리오
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
인터렉티브를 위한 브리지 서버 Ver1.0
인터렉티브를 위한 브리지 서버 Ver1.0인터렉티브를 위한 브리지 서버 Ver1.0
인터렉티브를 위한 브리지 서버 Ver1.0
 

More from NAVER D2

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

D2 sonic시스템구조및활용

  • 1. 내 일촌들의 모아보기는 어떻게 제공되나? - SONIC 시스템 구조 및 활용 CTO 〉 기술연구소〉 플랫폼개발팀 〉 박정수 Update : 2011. 10. 14 © 2011 SK Communications
  • 2. 내용 I. 모아보기란? II. 싸이월드 서비스의 특징 III. 모아보기를 제공 하기 위해 고려 되어야 할 점 IV. SONIC 구성 V. SONIC 세부 구조 VI. 질문 / 답변 2
  • 3. 모아보기란?  SONIC 시스템을 이용, 싸이월드 회원들의 활동을 뉴스 피드로 제공  SOcial Network Information Connector  일촌 / 팬 기반의 소식 전달  3가지 분류의 소식을 제공  자싞의 활동 내역  일촌/팬의 활동 내역  „나‟를 대상으로 한 활동내역 3
  • 4. 모아보기란? 발표자의 C로그 4
  • 5. 싸이월드 서비스의 특징 (1/2)  공개 설정이 다양함  4개의 일촌 그룹 (1/2/3/4)  관심일촌  팬 5
  • 6. 싸이월드 서비스의 특징 (2/2)  다양한 플랫폼 (플랫폼별 Data Format 상이)  미니홈피  싸이블로그  Clog  네이트 6
  • 7. 모아보기를 제공 하기 위해 고려 되어야 할 점 피드 전달이 실 서비스에 •비동기 데이터 처리 영향을 주지 않음 •예) 태극 홈피 일촌 수 100만명 서비스의 변화에 •스크립트를 통한 비즈니스 로직 처리 유연하게 대응 가능 •서버 정지 없이 로직 변경 가능 •분당 8,000건의 새글 데이터 빈번한 데이터 •분당 600,000건의 피드 발송 삽입 / 수정 •DB 처리시 상당한 부하 예상 문서의 수정 및 일촌 그룹 •데이터의 중복 저장 시 과다한 수정 비용 발생 변경의 실시갂 반영 •키 데이터와 컨텐츠 데이터의 분리 저장 7
  • 8. SONIC 시스템 구성  Sonicd 데몬 제작  비 동기 처리 가능  스크립트로 비즈니스 로직을 구성 가능 • 스크립트에 따라 로직이 바뀌므로 한 종류의 데몬으로 시스템 구성 가능  저장소 기능 • 자체 제작 B+tree 기반의 DB • Message-Queue • 각 삽입 / 수정 / 삭제 연산에 대해 트랜잭션 로그로 관리(장애 복구)  SONIC 시스템 구성  피드 = 키와 활동자 정보만 저장하는 토큰  피드에 저장된 키를 통해 데이터를 쿼리 Buddy Feed/Inbox Data Input (SVC) Dispatcher Meta Interface Query (WEB) Contents DBCache 8
  • 9. SONIC 세부 구조  각 사용자는 자싞의 저장소를 가짐  저장소에 „피드‟라는 작은 데이터만 저장  피드는 하나의 데이터에 여러 개가 생성  내부 키, 작성자, 초기 열람 권한, 서비스 종류 등  저장 공갂을 낭비하지 않기 위해 큰 데이터는 Contents 서버에 별도로 저장  회원당 3개의 목록 Feed/Inbox  내가 쓴 글 Query (WEB) Interface  일촌/팬이 쓴 글 Contents DBCache  반가운 소식 A가 글을 작성 나에게 피드 발송 A의 내 모아보기 A A A A A B의 일촌/팬 모아보기 일촌인 B,C에게 발송 모아보기 서비스 A C A D C 한 번에 모아보기 화면에 C의 일촌/팬 모아보기 필요한 데이터를 가져옴 A B D A E 9
  • 10. SONIC 세부 구조  Dispatcher  피드 생성, 일촌변경 등 실제 Operation 수행  모아보기의 모든 데이터 입력 처리 (입력 데이터 분석)  외부 키 추출 후, 내부 키 매핑 작업 {SVC:”미니홈피 게시판”, 폴더번호 : 3, 게시글번호 : 501, 홈주인 : “나주인”, 제목 : “즐거운 모아보기”, 내 용 : “즐거운 세상~”, 폴더권 한 : “1촌공개-그룹1,3”, 글권 한 : “1촌공개”, …} Buddy Feed/Inbox Query Data Input (SVC) Dispatcher Meta Interface Contents DBCache 10
  • 11. SONIC 세부 구조  Meta-comment list  외부 데이터의 키를 Contents 서버의 UID와 연결 SVC Key -> UID (시계열 key – timestamp) 사용자 : 나주인 의 키 매핑 테이블 홈주인 : “나주인” 서비스 종류 폴더 번호 게시글 번호 발급된 키 미니홈피 게시판 3 495 12eef5718ef 서비스 종류 : ”미니홈피 게시판” 미니홈피 게시판 4 498 1300f5708ef 블로그 게시판 201 10071 1200f5708ef 폴더번호 : 3 게시글번호 : 501 Buddy Feed/Inbox Data Input Dispatcher Meta Interface Query Contents DBCache 11
  • 12. SONIC 세부 구조  Dispatcher  외부키 – 내부키 매핑이 없을 시 내부키 싞규 발급  매핑 테이블 저장 -> Meta 서버  내부 키 : UID (시계열 key – timestamp) 사용자 : 나주인 의 키 매핑 테이블 홈주인 : “나주인” 서비스 종류 폴더 번호 게시글 번호 발급된 키 서비스 종류 : 미니홈피 게시판 3 495 12eef5718ef ”미니홈피 게시판” 미니홈피 게시판 3 501 1400f0708ef 폴더번호 : 3 미니홈피 게시판 4 498 1300f5708ef 블로그 게시판 201 10071 1200f5708ef 게시글번호 : 501 Buddy Feed/Inbox Data Input Dispatcher Meta Interface Query Contents DBCache 12
  • 13. SONIC 세부 구조  Contents-Data  글 Feed의 실제 내용이 저장되는 서버  UID가 key인 B+tree 테이블 (Berkeley DB를 사용해 구현)  일부 필드 (공개권한, 댓글수, 폴더번호)는 부분 업데이트 기능을 제공 { 1400f0708ef : 내부 키 (UID) 내용 { SVC:”미니홈피 게시판”, 1400f0708ef { 폴더번호 : 3, SVC : ”미니홈피 게시판”, 게시글번호 : 501, 폴더번호 : 3, 홈주인 : “나주인”, 게시글번호 : 501, 제목 : “즐거운 모아보기”, 홈주인 : “나주인”, 내용 : “즐거운 세상~”, 제목 : “즐거운 모아보기”, 내용 : “즐거운 세상~”, 폴더권한 : “1촌공개-그룹1,3”, 폴더권한 : “1촌공개-그룹1,3”, 글권한 : “1촌공개”, … 글권한 : “1촌공개” } } } Buddy Feed/Inbox Message Query (WEB) Queue Dispatcher Meta Interface Contents DBCache 13
  • 14. SONIC 세부 구조  Dispatcher  피드 생성 후 발송  피드 : 서비스번호 + 내부키 + 활동자 + 피드 생성시 권한  발송 대상은 Buddy 서버로 부터 조회  Buddy  싸이월드 회원의 일촌/팬 관계를 가지고 있는 서버 • 항상 실시갂으로 일촌/팬DB와 동기화 중 { 서비스 : 미니홈피 게시판 글, 내부키 : 1400f0708ef. 작성자 : 박문자, 권한 : 1촌그룹 1,3에 공개 Buddy } Feed/Inbox Message Query Queue Dispatcher Meta Interface Contents DBCache 14
  • 15. SONIC 세부 구조 사용자 : 나주인 의 반가운 소식 테이블 서비스 종류 내부 키 활동자 권한 미니홈피 게시판 글 1400f0708ef 박문자 1촌 그룹 1,3에 공개 … … … … 사용자 : 박문자 의 내가 쓴 글 테이블 서비스 종류 내부 키 활동자 권한 미니홈피 게시판 글 1400f0708ef 박문자 1촌 그룹 1,3에 공개 … … … … 사용자 : 박문자 의 일촌 나일촌 의 일촌/팬 소식 테이블 서비스 종류 내부 키 활동자 권한 미니홈피 게시판 글 1400f0708ef 박문자 1촌 그룹 1,3에 공개 … … … … { 서비스 : 미니홈피 게시판 글, 내부키 : 1400f0708ef. 작성자 : 박문자, Buddy 권한 : 1촌그룹 1,3에 공개 } Feed/Inbox Dispatcher 15
  • 16. SONIC 세부 구조  조회 시 동작 (Query)  HTTP request 수싞 홈주인 : 나주인 방문자 : 박문자 타입 : 내가 쓴 글 개수 : 20 Buddy Feed/Inbox Interface Query Contents DBCache 16
  • 17. SONIC 세부 구조  조회 시 동작  홈주인과 방문자가 다른 경우, Buddy서버에서 홈주인과 방문자의 관계 쿼리 사용자 : 12345678 의 일촌 테이블 홈주인 : 나주인 일촌 그룹 관심일촌 수싞금지 설정 박문자 3 O 수신 허용 방문자 : 박문자 나일촌 1 X 수신금지 개수 : 20 … … … … 방문자는 홈주인의 Buddy 일촌 그룹 3에 속함 Feed/Inbox Interface Query Contents DBCache 17
  • 18. SONIC 세부 구조  조회 시 동작  Feed-inbox 서버에서 공개 권한(그룹 3이 볼 수 있는)에 맞는 피드 n개 가져옴  데이터가 필요한 피드는 Contents서버나 외부 서비스 서버에서 내용을 가져옴 • 데이터가 삭제되거나 오류로 인해 조회할 수 없는 경우에는 해당 피드를 결과목록에서 제거 사용자 : 나주인 의 내가 쓴 글 테이블 서비스 종류 내부 키 활동자 권한 홈주인 : 나주인 미니홈피 게시판 글 1412f0708ef 나주인 1촌 그룹 1,3에 공개 … … … … 타입 : 내가 쓴 글 { 1412f0708ef : 방문자 : 박문자 { SVC:”미니홈피 게시판”, 폴더번호 : 3, 게시글번호 : 501, 개수 : 20 홈주인 : “나주인”, 제목 : “즐거운 모아보기”, 내용 : “즐거운 세상~”, 폴더권한 : “1촌공개-그룹1”, 글권한 : “1촌공개”, … } } Buddy 방문자는 홈주인의 일촌 그룹 3에 속함 Feed/Inbox Interface Query Contents DBCache 18
  • 19. SONIC 세부 구조  조회 시 동작  데이터의 공개권한을 보고 보여줄 수 없는 피드라면 결과목록에서 제거 • 예) 1) 최초 피드 발송시 공개권한 : 그룹 1, 3 2) 게시글 권한 수정으로 그룹 1에만 공개로 수정 홈주인 : 나주인 3) 최종 그룹 1에만 공개 권한이 있으므로 해당 피드 제거 타입 : 내가 쓴 글 방문자 : 박문자  결과목록의 피드 수가 부족하면 위의 과정을 다시 반복 개수 : 20 사용자 : 나주인 의 내가 쓴 글 테이블 { 1412f0708ef : 서비스 종류 내부 키 활동자 권한 { SVC:”미니홈피 게시판”, 폴더번호 : 3, 게시글번호 : 501, 홈주인 : “나주인”, 제목 : “즐거운 모아보기”, 내용 : “즐거운 세상~”, 미니홈피 게시판 글 1412f0708ef 나주인 1촌 그룹 1,3에 공개 폴더권한 : “1촌공개-그룹1”, 글권한 : “1촌공개”, … } } … … … … Buddy Feed/Inbox Interface Query Contents DBCache 19
  • 21. Q&A  감사합니다. 21