라벨이 Database인 게시물 표시

[C#/EF6] 서로 다른 컨텍스트가 업데이트된 레코드를 읽어야 할 때

여러개의 컨텍스트 사용 필연 우선 이 글은 커넥션 풀링과는 아주 관계가 없진 않으나, 관계가 없다고 생각한 채 읽으셔도 됨을 알려드립니다. 엔티티 프레임워크를 사용해 개발하다 보면 어쩔 수 없이 동일한 컨텍스트 클래스의 인스턴스를 여러 곳에서 생성해 사용하게 됩니다. 처음에 저는 단순한 프로젝트이니 그냥 컨텍스트 클래스를 싱글톤 패턴으로 만들어, 여러 사용처에서 호출해 사용하면 되지 않을까? 라는 어리석은 생각을 했으나, 아무리 단순한 프로젝트라도 그곳에 이벤트가 있고, 병렬 처리가 있다면, 그리고 그 곳에서 DB에 접근해야 한다면(즉, 컨텍스트 인스턴스 호출을 해야 한다면), 어쩔 수 없습니다. 싱글톤은 답이 아닙니다. 문제는 이렇게 할 경우에 여러 동일한 컨텍스트 클래스의 인스턴스에서 동일한 Entity의 정보를 읽고 쓸 수 있다는 것입니다. 예를 들어 동일한 컨텍스트 클래스의 서로 다른 인스턴스를 호출해 사용하는 A, B 클래스가 있다고 가정해봅시다. 아래 가정은 시간 순서로 쓰여졌습니다. B 인스턴스에서 Road 엔티티를 DB에서 컨텍스트로 읽어드렸습니다. (DB => In memory, FindAsync 사용) B 인스턴스에서 Road 엔티티의 (ICollection )Cars.Count 프로퍼티를 읽어 변수 prevCarCount 에 저장했습니다. B 인스턴스에서 유틸리티 클래스인 A 인스턴스의 AddCarOnRoad 를 호출했습니다. A 인스턴스에서 Road 엔티티의 (ICollection )Cars 프로퍼티를 수정했습니다. (새 컨텍스트 인스턴스에서 작업) B 인스턴스에서 Road 엔티티의 (ICollection )Cars.Count 프로퍼티를 읽어 변수 curCarCount 에 저장했습니다. B 인스턴스에서 prevCarCount와 curCarCount가 같으면 throw, 아니면 반환합니다. 위와 같은 상황에서, 어떤 한 로직을 빠뜨리면 3. 에서 Car 를 Road ...

[MySQL] 데이터 디렉터리를 변경하는 방법

이미지
  한 달 전, 포맷이 필요해 포맷을 하다가 실수로 MySQL 데이터를 백업하지 않아 전부 날려버린 아픈 기억이 있습니다. 사실 더 전에도 여러번 이런 적이 있는데, 그 때마다 데이터 디렉터리 변경하는 방법을 알아봐야지~ 하고서는 포맷이 끝나고 기존 어플리케이션들을 다 재설치할 때 쯤 까먹고 또 날려버리는 멍청한 짓을 반복해왔죠.   하지만 한 달 전 날린 데이터는 정말 굉장히 소중한(= 돈에 직결되는) 데이터였기에 충격이 커서 포맷 완료 후 MySQL을 재설치할 때까지 잊지 않고 데이터 디렉터리를 변경하겠다는 마음가짐을 유지할 수 있었죠.   아무튼, 이 포스트는 그런 아픈 기억에서 시작한 MySQL Data Directory를 변경하는 방법 에 대한 글입니다. MySQL Data Directory 변경하기 MySQL 서비스 중지   일단 MySQL 서비스를 중지해야 합니다. Windows 키 + R 을 눌러 실행 창을 띄운 뒤, services.msc 를 입력해 서비스 관리자를 열어주세요.   그 후, MySQL을 설치할 때 입력한 MySQL 서비스를 찾아 중지해주세요. 기본값은 MySQL[버전](예: MySQL57) 입니다. my.ini 수정하기   이제 my.ini의 datadir를 수정할 차례입니다. 마찬가지로, 시작 - 실행에 %PROGRAMDATA%\MySQL 을 입력해 폴더를 연 뒤, MySQL Server [VERSION] (예: MySQL Server 5.7) 폴더 에 들어가 my.ini 를 관리자 권한의 에디터 로 열어주세요.   그리고 스크롤을 내리다 보면, datadir 라는 프로퍼티가 보일 겁니다. (별다른 설정을 하지 않고 설치를 진행한 분의 경우 96번째 줄)   이 프로퍼티의 경로를 원하는 디렉터리로 수정해주세요. 당연히 디렉터리는 만들어져있어야 하며, 백슬래시(\) 대신 슬래시(/)를 사용하세...