본문 바로가기
nodejs

mikro orm의 request context 주저리

by pius712 2024. 2. 18.

회사에서 최근에 typeorm에서 mikro orm 으로 이동하기 시작했다. 

 

일단 typeorm 에 비해 mikro orm 이 가지는 장점들이 분명히 있음에도 주의해야할 사항이 있어보였다.

 

사용하다가 조금 개념이 헷갈리는 부분이 있었는데, request context, identity map 이 그 부분이다. 

identity map 은 JPA 의 persistence context 와 비슷 혹은 같은 개념이다. 

 

그런데, nest에서 mikro orm 을 사용하면, 이 context 가 request 단위로 할당된다는 점이다. 이는 OSIV 와 비슷한 개념인데, 아래 포스트에 설명이 되어있다. 

https://pius712.tistory.com/14

 

영속성 컨텍스트와 트랜잭션의 관계

1. 영속성 컨텍스트와 트랜잭션의 관계 spring data jpa 만 사용하다보니, typescript의 mikro orm 사용하다가 헷갈리는 개념이 있었다. 그것은 바로 머릿속에 다른 것들은 지워지고, persistence context 는 당

pius712.tistory.com

 

 

request 단위로 context 가 할당된다는 것은, 요청내에 context 가 여러 트랜잭션이 공유가 된다. 

 

mikro orm 도 persistence context 개념이 있기 때문에 변경감지가 가능한데 이때 조심해야한다. 

 

transaction 바깥에서, 데이터를 변경했는데 flush 를 하면 변경감지가 일어날 수도 있는 것이다. 

=> 즉, 실제 db에 반영할 목적이 아니었는데도 데이터가 db 에 반영되는 것이다. 

 

또한, 특정 트랜잭션이 rollback 되었을 때 context 자체가 clear 되기 때문에 조심해야한다. 

 

ORM 자체에 대해서 잘 아는 것도 중요하지만, layer 경계를 명확히하지 않는 경우 문제가 될 수 있다.

entity를 service와 domain 레이어에서 그대로 사용하는 것은 예상치 못한 동작을 할 수 있다. 

 

 

 

'nodejs' 카테고리의 다른 글

mikro-orm auto increment issue 등록 후기  (0) 2024.04.17