SQLAlchemy를 사용해서 어떤 데이터를 추가/변경 또는 삭제를 할 때 session.commit() 메소드와 session.flush() 메소드가 자주 사용되어지곤 한다. 기본적으로 둘 다 모든 적용되지 않은 변경 사항들을 저장하는 역할을 하나, session.commit()의 경우에는 한가지 추가적인 작업을 진행하게 되는데, 바로 연결된 모든 객체들을 expire 처리하고 다시 로딩을 한다는 점이다. 이 기능을 하는 여러가지 이유가 있겠지만, 대표적인 이유 중 하나로는 INSERT 후에 autoincrement id 값을 가져오기 위해서가 있다. 복잡한 비즈니스 로직을 구현하다보면 M:N의 문제들이 많이 발생하게 되는데, 이러한 경우 primary key들을 저장하는 매핑 테이블이 존재하기 마련이..