(이름 변경하기…)
욜로가 서비스에서 사용자 정보는 MySQL 에, 로그인 정보는 Redis 에 저장한다. 결국은 로그인 정보도 사용자 정보에 종속되는 데이터이기 때문에 두 Datasource 는 하나의 기능에 동시에 동작하는 경우가 발생한다. 예를 들어 OAuth 로그인 시 처음 접속한 사용자일 경우, 구글 또는 카카오에서 받아온 사용자 정보를 저장 후 MySQL 에 저장하고, 로그인 정보를 생성하여 Redis 에 저장한다. 만약 로그인 정보 저장 시 에러가 발생한다면 사용자 정보를 남기는 것이 좋을까?(Commit) 아니면 로그인 정보와 함께 삭제하는 것이 좋을까?(Rollback) 하나의 프로젝트에서 두 개의 Datasource 접근 시 Transaction 의 범위를 어디까지 가져가는 것이 좋을지 고민해보았다.
상황에 따라서 두 트랜잭션을 하나의 트랜잭션으로 취급하여 어느 곳에서 에러가 나던지 모두 롤백하거나, 별개의 정보로 취급하여 에러가 발생한 데이터베이스만 롤백할 수도 있다. 이를 결정하기 위해서는 일단 욜로가 서비스가 어떻게 구성되는지 파악할 필요가 있다. 욜로가 서비스의 비즈니스를 파악하기 위해 사용자 및 로그인 정보와 관련있는 기능들을 정리해보았다.
욜로가 서비스를 이용하기 위해 접속할 수 있는 유일한 로그인 기능이다. OAuth 로그인을 요청하면 처음 접속한 사용자일 경우 ‘사용자 정보 저장(MySQL) → 로그인 정보 저장(Redis)’ 의 과정을, 처음 접속한 사용자가 아닐 경우 ‘로그인 정보 저장(Redis)’ 의 과정을 거친다.
로그인만을 따져보았을 때 사용자 정보와 로그인 정보는 별개로 취급해도 된다. 사용자 정보 저장 후 로그인 정보 저장에서 에러가 발생했을 때, 사용자 정보를 롤백하든 그대로 남겨두든