이번 강연은 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
더 궁금하거나 이해 잘 안가시는 분들은 참고하시면 좋을 듯.
'프로그래밍 공부 > NDC 2018' 카테고리의 다른 글
[1일차] 30 years of evolution in artwork of Arc System Works - the Japanese developer continues to develop long-run 2D fighting games (0) | 2018.04.26 |
---|---|
[1일차] 안드로이드에서 유니티 프로젝트 네이티브 프로파일링 삽질기 (0) | 2018.04.26 |
[1일차] 인하우스 웹프레임워크 Jul8 제작기 - 게임 운영 툴에 좋음 (0) | 2018.04.26 |
[1일차] golang으로 네트워크 프로그래밍하기 (0) | 2018.04.26 |
1, 2, 3일차 시간표 참고 + 기타 (0) | 2018.04.26 |