본문 바로가기

전체 글

(18)
EFCore - Migration_01 #Part14 학습 내용 Migration - Code Frist // Migration //현재 버전 v1.1(라이브) // SQL Scripts //v1.2(현재) // SQL Scripts 버전을 따로따로 관리해줘야함. //롤백하는것도 만들어야함. // // 일단 EF CORE DbContext DB 상태에 대해 동의가 있어야 함. // DBContext의 테이블은 Item, player, Guild 이지만 // 실질적인 DB의 테이블이 Item, Player만 있다면 안된다. // 또한 똑같은 테이블 목록이 있다 하더라도 // Property(재산)이 다르다면 안된다. // 쉽게 말해 EF CORE DbContext DB 이 두개의 테이블, 재산은 비동기가 아니라면 // 무조건 동일 해야한다. // 누구 기준으..
EFCore - Default Value #Part13 학습 내용 Default Value 차례 Auto-Property Initializer(C# 6.0) (일반적으로 가장 많이 사용함) Fluent Api (이것도 많이사용함.) SQL Fragment (실시간으로 호출됨) Value Generator 초기값 Default Value // int 초기값이 0 이고 , bool은 false인것처럼 // 특정 값의 초기값을 설정한다. // 기본값 설정하는 방법이 여러가지 있다. // 주의해서 볼것 // 1) Entity Class 자체의 초기값으로 붙는지? // 2) DB Table 차원에서 초기값으로 적용 되는지? // - 코드메모리상에서 적용된뒤 SaveChagne로 되는가? // - DB에서 초기값을 세팅하는가? // 결국 결과는 같은거 아닐까? // -..
EFCore - Baking Field + Relationship #Part12 학습 내용 Baking Field + Relationship 차례 ReviewSystem // Backing Field + RelationShip // Backing Field -> Private field를 DB에 맵핑 // Navigation Property 에서도 사용 가능! Review Class를 외부에 만들어주고 Item 안에 리뷰를 저장할 Property를 만들어준다. Option에서는 해당 Propery를 Field로 만들어주고 아이템에 리뷰 DB를 수정해주면 다음과 같이 아이템에 리뷰 점수의 평균값을 저장할수 있게 된다. DB를 보자면 일단 외부 Property 임으로 테이블에 만들어진걸 알수있다.
EFCore - Entity Class & Table Mapping #Part11 학습 내용 Entity Class & Table Mapping 차례 Owned Type Table Per Hierarchy (TPH) - 사용하기 가장 편함. Table Slitting 1. Owned Type // - 일반 Class를 Entity Class에 추가하는 개념 // a) 동일한 테이블에 추가 // - .OwnsOne() = Fluent Api 에서 사용 // - Relationship 방식은 .include()를 사용했는데. // - OwnsOne()은 Ownership의 개념이기 때문에 .include() 할필요가 없다. // B) 다른테이블 추가 // - .OwnsOne().ToTable() 외부에 Property 가 있으나 아이템 테이블에 소속 되고싶을때 보통의 경우 해당 ItemO..
EFCore - Shadow Property & Backing Field #Part10 학습 내용 Shadow Property & Backing Field 차례 Shadow Property Backing Field 1.Shadow Property // Shadow Property // Class 모델에는 있지만 DB에는 없는 경우 -> [NotMapped] .Ignore(),SoftDeleted 같지만 반대되는 의미 // DB에는 있지만 Class에는 없는 경우를 원할수있음 - > Shadow Property // 생성 -> .Property("RecoveredData") 매우간단 최고 등급인 Fluent Api에서 사용 ItemModel 에서는 RecoveredData가 Property로 없지만 DB에는 존재함 2.Backing Field // Backing Field (EF Core 넘..
EFCore - Relationship Configuration #Part9 학습 내용 Relationship Configuration DB Model 1. Item 기존 Item 모델 테스트를 위한 신규 아이템 모델 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 Convention을 이용한 FK 설정 Convention 방식으로 못하는것 Data Annotation Fluent Api로 RelationShip 설정 Convention을 이용한 FK 설정 1) PlayerId 2) PlayerPlayerId 3) OwnerPlayerId OwnerId 2.Convention 방식으로 못하는것 1) 복합키 2) 다수의 Naviational Property가 같은 클래스를 참고할때 Item을 보면 오너라는것을 가르키는걸 볼수있는데 다른..
EFCore - Data Modelin config #Part8 학습 내용 1:1 방식의 Update와 1:다 방식의 Update차이 DB Model 1. Item 기존 Item 모델 테스트를 위한 신규 아이템 모델 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 Convention DataAnnotation Fluent Api - 한번에 묶어서 //오늘의 주제 : Configuration 중요함 //A) Convention (관례) //- 각종 형식과 이름들을 정해진 규칙에 맞게 만들면 , EF Core에서 알아서 처리함 //- 쉽고 빠르지만 , 모든 경우를 처리 할 수는 없다. // 테이블을 만들때 Class + Id (itemId)를 만들어 자동으로 PK로 사용한단던가! // 규칙의 의해서 만들어진것들 //B) Da..
EFCore - Delete #Part7 학습 내용 Delete 와 Soft Delete의 차이 DB Model 1. Item 기존 Item 모델 테스트를 위한 신규 아이템 모델 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 Delete SoftDelete 1. Delete 결과물 당연하게도 Nullble의 상태에 따라 Onwer도 삭제될 가능성이 있다. 그렇기에 Item.OnwerID FK를 Nullble로 설정해야지 아이템을 DB에서 삭제한다고하더라도 플레이어가 삭제되지 않도록해야한다. 2. SoftDelete DB에 내가 삭제되었는지 아닌지 여부를 체크한다. 하지만 SoftDelete를 하나하나 체크하면서 가져오기엔 사람의 실수가 있을 수 있고 코드도 번거러워진다! AppDBContext에 ..
EFCore - Update 1v1 1vM #Part6 학습 내용 1:1 방식의 Update와 1:다 방식의 Update차이 DB Model 1. Item 기존 Item 모델 테스트를 위한 신규 아이템 모델 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 1:1 1:M 1. 1:1 여기서 와같은 방식은 기존 데이터를 업데이트하는 방식이고 같은 방식은 새로운 데이터를 업데이트 하는 방식 차이점은 기존방식의 경우는 DB에서 기존 데이터가 업데이트 되는방식! 새로운데이터방식은 아이템이 삭제되지않고 새로운데이터가 생기는 방식이며 당연하게도 Item의 OwnerFK가 nullable인 경우에만 가능하다. 1.1:M 방식이 독특하다 일단. Include를 하지않고 member의 리스트를 새로할당할경우에는 기존맴버 + 새로운..
EFCore - Foreing Key 와 Nullable #Part5 학습 내용 DB Model 1. Item 테스트를 위한 신규 아이템 모델 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 FK가 Nullable이 아니라면? FK가 Nullable 이라면? 1.FK가 Nullable이 아니라면 모델변경 Nullable이 아니라면 FK에 해당하는 int를 ?없이 사용하면 된다. Player에 의존하고있는 Item에 Owner가 Nullable이 아니라면 Player 삭제시 Item.Owner 가 의존하고잇는 Player를 찾지못하여 같이 삭제된다. playerDB ItemDB 1.FK가 Nullable이라면? 모델변경 Nullable이라면 FK에 해당하는 int에 '?' 함께사용한다. Item DB PlayerDB 학습후기
EFCore - Connected, Disconnected Update #Part4 학습 내용 Connected vs DisConnected Update 연결이 끊겻는데 업데이트 한다? No 지난 시간 Update의 3단계 Update 3단계 1) Tracked Entity를 얻어온다. 2) Entity 클래스의 property를 변경 (set) 3) SaveChanged를 호출! Connected : 정보를 입력받는 정보를 DB에서 다시 찾는 구간과 업데이트하는 구간을 나누는 방식 Disconnected : 처음부터 입력 , 얻어온 정보를 끊김 없이 업데이트3단계를 진행하는 방법 DB Model 1. Item 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 Connected Disconnected 1. Connected ShowGuilds..
EFCore - Update #Part3 학습 내용 업데이트를 하기 위해 어떤 단계를 취해야하는가? DB Model 1. Item 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 Update의 3단계 쿼리를 수정 ? OR 부분 수정? 1.Update의 3단계 2.쿼리를 수정? OR 부분 수정? 최초의 데이터의 값과 현재 데이터 값을 비교 해서 부분적으로 쏘옥 바꾼다. 결과물 데이터 변경 전 데이터 변경 후
EFCore - State #Part2 학습 내용 데이터의 State를 우리는 확인 할 수 있는가? 메모리상의 데이터가 DB에 들어갈때 어떤 상태를 가지고 접근하는가? DB Model 1. Item 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 EntityState 무엇인가? SaveChanges 호출하면 어떤일이? 예제 1.EntityState는 무엇인가? EntityState 무엇인가? Detached = 0, (No tracking ! Read만 하는경우 == 추적되지 않는 상태 SaveChanges를 해도 존재를 모름) Unchanged = 1, (DB에 있고 , 딱히 수정사항도 없었음 결론 == 바꾸려고하는 데이터와 DB있는 데이터와 일치함 SaveChage를해도 아무 반응 없음) De..
EFCore - 관련 데이터 로딩 #Part1 학습 내용 해당 관련된 정보를 DB로 부터 불러올때 어떤 방식의 로딩이 어떻게 쓰이는가? DB Model 1. Item 2. Player 3. Guild DB 테이블 1.Item 2.player 3.Guild 차례 EagerLoading ExplicitLoading SelectLoading 1.EagerLoading 1.검색 조건 : 길드에 있는 길드원들이 소지한 모든 아이템들을 보고 싶다(ReadOnly). 장점 : DB접근을 한번만해서 로딩함 (JOIN) 단점 : 다필요한지 모르겠는데? 다 불러올꺼야? 필요없는건 안가져와도 되는데?... 결과물 : 2.ExplicitLoading 검색 조건 : 길드에 있는 길드원들이 소지한 모든 아이템들을 보고 싶다(ReadOnly). 장점 : 필요한 시점에 필요한 ..
C# 유니티 서버 : 이슈작업 Part 10 그리고... 이전 작업 이슈 1.Part8 서버의 총알 이동 속도보다 클라의 총알 이동속도가 빠름(속도는 같으나 Update의 차이) 동기화 시키기 어려움이 있음 똑같은 업데이트 속도를 가진다하더라도 클라는 자기 자신만 서버는 모두를 처리해야 하기때문에 일단 클라에서 서버에 영향을 주지않는 쪽으로 이슈작업 진행해야함. 해결 과정 서버 : - 변동없음 클라 몬스터 객체와 투사체의 객체에게 각각 태그를 부여 클라에서 충돌시 선 피격 상태로 변경 (HP가 처리되는가 ? X , 실제 서버 총알위치가 바뀌는가? X , 즉, 결과물엔 영향이 없음 이후 서버에서 Damage 판정을 받아오면 Hit_End 애니메이션 종료후 Idle로 변경 이런느낌! - 결과물 이번 작업 정보 얻기 -검색 전 몬스터 FSM(유한상태기계)는 즉, 모..
C# 유니티 서버 : Water Shader Part9 오늘은 딱히 언급할 코드는 없고 쉐이더를 만들어서 물 반사 적용만 시켰습니다.
C# 유니티 서버 : 몬스터 피격판정 Part8 이전 작업 이슈 1.Part7 위아래로 이동할수 없는 부분에 체크할때 패킷이 전송되며 클라에서 미리 체크하지 못햇던 부분 좌우는 관계 없는것같다. 이슈 영상1번 이슈 영상2번 - 해결 과정 서버 : - 클라 : 사다리 상태에서 위아래 이동의 맵 체크 방식이 잘못되어 재수정 - 이슈영상1번 사다리가 아닌 상태에서 위아래 체크시 패킷 전송이 되었던것도 수정 - 이슈영상2번 - 결과물 이번 작업 정보 얻기 -검색 전 피격 판정은 무조건으로 서버에서 판단한다. 클라에서 판정시 변조의 위험이 존재한다. 지금 현재 원거리공격을 시행했을때 서버에서 이동계산을 진행한다. 그럼으로 나는 서버에서 피격판정을 진행해야한다. -검색 후 클라에서 판정 하는 경우도 있다. 배트필드3 : ( https://kotaku.com/58..
C# 유니티 서버 : 이동동기화(2) Part7 *Part7부터 블로그에 작업 일지를 기록함으로 이전에 작업은 글이 없음을 양해 부탁드립니다. 서론 이동 동기화 진행에 있어 여러가지 방법이 있다. 롤은 입력을하면 서버에게 요청하여 서버가 처리후 본인 클라를 포함해 BroadCast을 진행한다. FPS 나 MMORPG는 선이동후 보고를 하고 서버가 검증 후에 최종 다른 유저에게 BroadCast을 진행한다. 작업방식 데드레커닝을 이용한 패킷전송(트래픽 데이터) 감소 클라변조에 대한 방어 대책 배포(BroadCast)의 횟수제한 작업 일단 클라의 변조를 막기 위해, 클라가 현재 서있는 위치가 서버의 위치와 다를 수 있기때문에 서버로부터 위치를 가져오는 작업이 필요하다. 클라로부터 요청 받은 서버는 모든인원에게 BroadCast 할필요없이 요청한 클라에게만..