#TIL

Elixir의 Ecto에서 virtual 키워드가 의미하는 것

pula39 2020. 10. 8. 07:54

처음에는 OOP의 virtual 개념이랑 헷갈려서 많이 혼동했던 부분.

 

ecto에서 field를 정의할 때 virtual을 정해줄 수 있다.

 

여기서 virtual은 DB에 저장하지 않는 field라는 뜻이다.

 

DB에 저장하지도 않은 테이블이 왜 필요하나면, 이것을 이용해서 유용한 처리를 할 수 있기 때문이다. 그 스키마와 연관된 값이지만 저장할 필요는 없는, 그런 값이 필요할 때가 있다.

 

공식 문서에서 발췌한 설명이다.

 

이 경우에서는 password 필드를 virtual로 하였다. password 필드는 평문 패스워드가 들어가는데 DB에 직접 들어갈 필요는 없다. 하지만 user와 관련된 값이기에 분리하기도 애매하다

virtual로 저장되기에 DB에 저장되지 않는다. changeset에서 이 값을 변환해서 encrypted_password를 갱신한 후, 이 값만 DB에 넣어주면 된다.