RE:ISC프로젝트 3-isc프로젝트 1차 총 점검
현재까지 완료된 ui
프로젝트 홈 화면 보기
카드를 사용하여 만든 프로젝트홈인데, 카드를 닫아놓으면 지점명만 뜨도록 세팅해두었다.
프로젝트 수정 화면
프로젝트 수정화면으로 프로젝트명/지점명/버전을 손볼 수 있다.
현재에는 이렇게 하나하나 유저가 직접 사용하지만, 시나리오 코딩 페이지가 만들어진 다음부터는 시나리오를 올리거나 수정하면 알아서 버전도 올라가야한다..미래의 이나 화이팅
장비 설정
등록된 장비를 확인하고 추가 및 삭제 가능한 페이지이다.
나는 몰라서 TableRow로 진행하였는데,이보다 훨씬 쉬운 방법을 피드백 때 들어서 후술 할 예정이다.
기술 진행 사항
- 일단 ui의 경우 홈화면/장비설정/포트설정 까지 완료되었고, 데이터 처리와 같은 부분은 홈과 장비 설정만 완료되었다.
프로젝트(홈)
여기에서는 프로젝트 수정 및 삭제 현재 정보에 대한 조회가 가능하다.
이 부분은 삭제대신 isc프로젝트를 1개만 등록가능하니 초기화와 같은 다른 표현을 사용해줄 것을 지적 받았다.장비 설정
장비의 경우 현재 삭제 추가 저장이 구현된 상태이며, 이후 최대 20개의 장비가 등록되도록(중요한건 ui상으로도 20개까지만 추가되도록..유저는 100개의 장비를 넣은 뒤에 20개만 등록되면 농락이라고 느낄 수 밖에 없다)해주어야한다.
주요 트러블 슈팅
피드백 이전 내가 해결 및 경험한 주요 트레블 슈팅은 2개이다.
하나는 삭제시SerailManager
클래스와DbHelper
에서 일어나던 순환참조로 인한 오버플로우 현상과 잘못된TableRow
클래스 사용이 있다.순환참조와 오버플로우
시리얼 매니저의 경우 원칙적으로, 시리얼 통신 즉 DB파일을 제외한 Local의 파일을 담당하고, DbHelper클래스에서는 project의 정보를 담는 데이터베이스에 대한 역할을 해주어야한다.
그러나 프로젝트 삭제의 경우 시리얼 매니저와 DbHelper양쪽의 작업을 모두 필요로 하였고, 그 과정에서 순환참조가 발생하게 되었다.오버플로우 해결
해결법은 DB를 삭제하는 부분에 await와 async를 걸어주고, db삭제가 완료되면 local파일도 기존의 초기화를 위한 프로젝트 파일로 대체해주는 방법을 채택하였다.
처음에는 local에있는 Project.iscp파일을 모두 삭제해주었는데 그 경우 장비쪽 페이지를 들어가면 Project파일의 형식이 바뀐 관계로 에러가 뜨기도 했고, 어차피 프로젝트가 한개만 삭제되는 방식이라면 초기화에 가깝게 진행되는 게 더 적합하기 때문에 장비의 코드를 고치기보다는 지금과 같은 방법으로 해결을 하였다.TableRow해결
이 사실 DataRow를 사용하면, 쉽게 해결할 수 있는 문제인데 그걸 몰라서 문제를 어렵게 해결하였다.
중간에 있는 장비를 삭제할 경우 전체 키를 다시 로드하는 과정이 필요했는데, 나는 삭제가 눌린 key즉 순서를 받아오고 걔를 제거한 뒤에 다시 refresh를 해주는 방식을 사용하였다.
나중에 알게된 것은 우리의 프로젝트처럼 데이터 중심의 내용물을 테이블로 표기할 때에는 TableRow보다는 DataTable을 사용하는 게 적합했다는 거다.피드백 사항
위에서 말한 TableRow와 db저장 및 조회가 주 피드백 사항이었다.
현재는 새로운 테이블을 추가하면, 전체 json의 마지막에 내가 새로 만든 테이블을 붙이는건데 그러다보니 데이터가 추가될 때마다 전체를 다시 읽어서 느려지는 문제가 있다.
저장 이전까지는 새로운 테이블만을 그때그때 호출하는것이 훨씬 경제적이다.2번 피드백
데이터를 부분 변경 및 저장시에도 마찬가지이다.
현재에는 프로젝트를 하나만 저장했는데, db에 동일한 내용물이 여러번 들어가는 현상이 발생하는데(아마 프로젝트를 입력한 걸 처리하는 과정에서 여러번 dbHelper가 불리는 부분에서 문제 발생 추정)이러한 것들이 많이 쌓이면 딜레이가 걸리게된다.
또한, 데이터를 부분변경할 때에도 데이터 전체를 덮어씌우기보다는 수정된 부분만 갈아끼워주는 거이 좋다
댓글남기기