이번 강연은 ORM 개발 경험을 소개하는 시간이었는데 뭔가 어려울 줄 알았는데 

설명을 자세하게 잘 해주셔서 생각보다 이해가 잘되었던 것 같다.


ORM이란 것을 이번에 처음 들었는데 

데이터베이스를 SQL이 아니라 프로그래밍 언어의 객체로 다룰 수 있게 해주는 기술이라고 한다.

위의 사진처럼 사용하면되어 정말 편하게 느껴진다.



개발 목표

SQL 작업을 제거하고,

분산환경에서 작동되게 하며,

충분한 성능이 나오는 것


사용 방법

1. JSON으로  모델 정의.

2. 빌드

- 코드 생성 프로그램이 모델을 이용해 코드를 생성해준다.

3. 자동 생성된 인터페이스 Class를 사용

- 일반화된 오브젝트를 참조한다.


이벤트 시스템

함수를 실행하는 스레드 풀

비동기 I/O, 트랜잭션 구현을 위해 필요하다

상태는 실행준비 / 실행 / 중단(롤백)(DB에서 읽어와야할때, 잠금이 걸려있을때) 단계로 구성되며

중단시 임시저장내용을 삭제하고, 완료시 캐시 및 DB에 반영한다


비동기 I/O

이벤트 시스템을 이용

캐시를 활요해 오버헤드를 최소화


캐시

DB I/O를 줄여 성능 향상

DB에서 읽어온 오브젝트를 메모리에 저장한다.

Map<ObjectID, Object>로 구현 


잠금

구현이 필요한 이유

한 오브젝트를 여러 이벤트에서 동시 수정 발생 막기위해

캐시에 로드된 오브젝트는 SQL 잠금 불가


데드락 (교착상태) - http://terms.naver.com/entry.nhn?docId=3346152&cid=40942&categoryId=32839

상호배제, 점유대기, 비선점, 순환대기 중 1가지라도 만족되지 않으면 성립안함.


그래서 데드락을 피하기위한 2가지 시도

1. 타이머이용

점유대기를 방지한다.

2. 선점형 잠금

모든 이벤트 우선순위를 부여해 먼저 실행된 이벤트는 뒤의 이벤트 락을 풀수있다.


캐시와 잠금

Zookeeper

- 오픈소스 분산 코디네이션 서버.

- 파일시스템처럼 사용가능하다.

- 오브젝트 소유권 관리. 오브젝트를 캐시에 불러오기 전 서버ID를 저장한다


문제 : 캐시적중률

LeaseRPC가 과도해지면 더 높은 빈도로 접근하는 서버가 있으면 캐시에서 삭제함.




이것도 이런식으로 구현했구나 원리를 알 수 있어서 좋았다.

Q&A시간에 ORM의 고질적인 n+1문제를 어떻게 해결하셨는지 묻는 질문이 었었는데 n+1문제는 뭘까 궁금하기도 하다.


공식 강의자료는 아니지만 인터넷 찾다보니 1달전에 발표했던 자료가 있는데 내용이 비슷해 링크를 올린다.

https://www.slideshare.net/iFunFactory/2018-02-orm


더 궁금하거나 이해 잘 안가시는 분들은 참고하시면 좋을 듯.

Posted by misty_
,