EF(Entity Framework, 엔트리 프레임워크)에서 데이터의 무결성을 확보하기 위해 '낙관적 동시성(Optimistic Concurrency)'을 어떻게 구현하는지 알아봅시다. 0. 낙관적 동시성을 쓰는 이유 낙관적 동시성을 쓰는 이유를 알려면 알아두어야 할 내용이 있습니다. 0-1. 비관적 동시성 DB에서 데이터의 일관성유지를 위해 락(lock)을 거는 방법이 있습니다. 이렇게 락을 거는 방법을 '비관적 동시성(Pessimisitc Concurrency)'이라고 합니다. 이 방법은 누군가 데이터를 수정하는 동안 다른 사람은 수정할 수 없게 만드는 방법입니다. 다른 사람이 수정할 수 없으니 절대적인 데이터 무결성이 보장된다는 장점이 있습니다. 하지만 동시에 여러 사람이 수정하려는 경우 나머지 사..
포스트그래SQL(PostgreSQL)에서 물리적인 저장위치를 지정하려면 크게 2가지 방법이 있습니다. 포스트그래SQL이 사용하는 기본 저장 폴더를 변경하거나 (참고 : [PostgreSQL] 윈도우(Windows)에서 기본 데이터 폴더 변경 ) 테이블스페이스(Tablespaces)를 생성하여 지정해야 합니다. 이 포스팅에서는 'pgAdmin'을 이용하여 테이블스페이스를 만들고 지정해 보겠습니다. 1. 테이블스페이스(Tablespaces) 생성하기 개체 탐색기(Object Explorer)에서 테이블스페이스 트리를 찾습니다. 오른쪽 클릭 > Create > Tablespace... 을 선택합니다. 생성할 이름(Name)을 넣고 Definition > Location 에 물리 경로를 적어줍니다. 생성된 테이..
1. 증상 포스트그레SQL(PostgreSQL)을 설치하고 접속했는데 에러가 납니다. 그런데 메시지 깨져서 무슨 소리인지 모르겠습니다. 분명 언어 설정과 같은 문제일 텐데 DB의 언어설정을 아무리 수정해도 바뀌지가 않습니다. 2. 해결 방법 생성한 DB의 설정을 바꾸는 게 아니라 설치된 포스트그래SQL의 설정을 바꿔야 합니다. 포스트그래SQL이 설치된 폴더의 '[버전 번호]\data\postgresql.conf' 파일을 열어줍니다. (예> D:\Program Files\PostgreSQL\15\data ) 'lc_messages'를 'C'로 바꿔줍니다. 이제 포스트그래SQL의 서비스를 다시 시작해 줍니다. 마무리 이게 한국어가 없어서 깨지는 걸까요? 있는데 인코딩 문제일까요? 저는 모르겠습니다 ㅎㅎㅎㅎ ..
'PostgreSQL'설치하고 기본 생성돼 있는 데이터 폴더를 변경하고 싶었습니다. 1. 파일 수정은 의미가 없다. 다른 운영체제의 경우 'postmaster.opts'의 내용을 변경해 주면 된다는데.... 윈도우는 아닙니다. 2. 진짜는 서비스에 있다. 'PostgreSQL' 서비스를 확인해 보면 실행 매개변수에 '-D'옵션이 있는 것을 알 수 있습니다. 3. 서비스 내용 변경 서비스 경로는 직접 바꿀 수 없으므로 레지스트를 수정해야 합니다. 레지스트리 편집기를 실행합니다.(regedit) 경로는 컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-15 입니다. 항목 중에 'ImagePath'를 수정하면 됩니다. 이제 기존 '..
EF(Entity framework)를 사용하다 보면 가장 불편한 것이 정렬입니다. 앵? '.OrderBy', 'OrderByDescending' 하면 되는데요? 맞습니다. 문제는 일반적인 게시판의 정렬처럼 조건이 다양한 정렬의 경우 각각 오더바이(Orderby)를 따로 호출해야 한다는 것입니다. 1. 문제의 시작 아래는 일반적인 게시판을 정렬하기 위한 코드입니다. switch (sColumn) { case "idTestOrderBy": if(true == bAsc) { iqTO = iqTO.OrderBy(ob => ob.idTestOrderBy); } else { iqTO = iqTO.OrderByDescending(ob => ob.idTestOrderBy); } break; case "Str": if..
'SQL Server 및 Windows 인증 모드'를 활성화하는 방법을 알아봅시다. 1. 에러의 발견 MSSQL에 로그인하려는데 다음과 같은 에러가 발생했습니다. exception code = '0xe0434352'. First 30KB characters of captured stdout and stderr logs: Unhandled exception. Microsoft.Data.SqlClient.SqlException (0x80131904): 사용자 '[MSSQL 로그인 계정]'이(가) 로그인하지 못했습니다. ***** 진짜 에러 내용 ***** 사용자 '[MSSQL 로그인 계정]'이(가) 로그인하지 못했습니다. 이유: SQL 인증을 사용하여 로그인하지 못했습니다. 서버가 통합 인증만 사용하도록 구..
EF(Entity Framework)에서 FK(foreign key)를 걸면 자동으로 List 타입을 관리해줍니다. FK가 개발 중에는 좋은데 서비스 중에는 좀 단점이 있고(특정 데이터를 수동으로 지우려면 연결된 FK를 순서대로 뒤에서부터 지워야 함.) 자동으로 바인딩 되다 보니 무분별하게 난발하게 돼서 속도를 다 까먹는 문제가 있습니다. (잘 관리하면 좋긴 합니다. ㅎㅎㅎ) EF는 FK로 묶인 데이터에 접근하면 인덱스로 전체 선택(select)해서 처리하기 때문입니다. ㅎㄷㄷ 그래서 저는 가급적 FK를 안 쓰고 수동으로 선택(select)해서 사용하는 방법을 사용합니다. 그러다 보니 EF에서 리스트형 데이터들은 어떻게 처리되는지 궁금해졌습니다. 1. 배열과 리스트 모델을 아래와 같이 선언하고 마이그레이..
엔티티 프레임워크 같은 프레임워크를 객체 관계형 매핑(Object–relational mapping), 줄여서 ORM이라고 부릅니다. 이런 프레임워크의 장점 중 하나가 약간의 작업만 하면 다양한 DB를 연결할 수 있다는 것입니다. 이 포스팅에서는 'SQLite'와 'MSSQL'를 따로따로 마이그레이션하고 사용하겠습니다. 다른 DB도 얼마든지 추가할 수 있습니다. [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용하기 [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용할 때 마이그레이션 관리하기 [Entity Framework 6] 여러 종류 DB대응하기 0. 프로젝트 생성 DB 테이블 모델과 컨..
이전 포스팅에서는 하나의 DB에 여러 컨텍스트를 사용하기 위해 각각 마이그레이션을 생성해서 관리하는 방법을 사용했습니다. 이 방법은 여러 개의 마이그레이션을 관리해야 해서 불편함이 많습니다. 그래서 전체를 관리하는 컨텍스트를 만들고 마이그레이션과 조인이 필요할 때는 이 '전체 컨텍스트'를 사용하는 것이 좋습니다. [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용하기 [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용할 때 마이그레이션 관리하기 [Entity Framework 6] 여러 종류 DB대응하기 0. 방법 이 방법의 단점은 전체용 컨텍스트를 따로 관리해야 한다는 것인데..... 관리와 ..
프로젝트를 진행하다 보면 여러 가지 이유로 컨텍스트(Context)를 분리해서 관리할 필요가 있죠. 권장은 하나의 DB에 하나의 컨텍스트를 사용하는 것이지만 하나의 DB에 여러 컨텍스트를 사용하는 것도 가능합니다. 여러 컨텍스트를 조인하게 되면 성능이 확 떨어지므로 권장은 하나의 컨텍스트를 사용하는 것을 권장하는 것입니다. 이 포스팅에서는 하나의 DB에 여러 컨텍스트를 사용하는 방법에 대해 알아봅시다. [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용하기 [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용할 때 마이그레이션 관리하기 [Entity Framework 6] 여러 종류 DB대응하기 ..