1) 데이터베이스 설계를 익히고, 데이터베이스를 활용해보기 위함
2) 이미지 데이터를 활용해 보기 위함
3) WPF를 이용하여 MVVM의 디자인 패턴으로 설계해 보기 위함
4) WPF를 이용한 UI 설계를 해보기 위함
5) C#언어를 이용해 개발해 보기 위함
1차 버전
- 데이터베이스에 저장해 둔 환자 정보(영상정보, 생년월일, 전화번호, 차트번호, etc) 를 UI 화면에 보여주세요.
- 환자 영상을 선택해서 크게 보여주고, 그 영상을 컨트롤(회전, 뒤집기, 확대, 축소)를 할 수 있게 해주세요.
- 환자 영상의 종류(X-Ray, CT, MRI)별로 저장할 수 있고, 보여줄 수 있게 해주세요.
2차 버전
- 데이터베이스에 저장해 둔 환자 정보(영상정보, 생년월일, 전화번호, 차트번호, etc) 를 UI 화면에 보여주세요.
- 최근 검색한 환자들의 정보를 리스트로 보여주고 선택하면 그 환자에 대한 정보를 볼 수 있게 해주세요.
- 환자 영상을 선택해서 크게 보여주고, 그 영상을 컨트롤(회전, 뒤집기, 확대, 축소)를 할 수 있게 해주세요.
- 환자 영상의 종류(X-Ray, CT, MRI)별로 저장할 수 있고, 보여줄 수 있게 해주세요.
- 환자 영상을 2분할, 4분할화면에 동시에 보여줄 수 있게 해주세요.
- 제품으로 쓸 수 있을 정도로 화면 디자인을 꾸며주세요.
- client - server 구조로 설계를 해주세요.
< 환자 프로필 정보 Document > - Collection (직접 설계)
| Field | Value |
|---|---|
| id | ObjectId |
| 환자 번호 (= 차트 번호) | long |
| 환자 프로필 사진 경로 | string |
< 환자 정보 Document > - Collection (직접 설계)
| Field | Value |
|---|---|
| id | ObjectId |
| 환자 번호 (= 차트 번호) | long |
| 환자 이름 | string |
| 환자 주민번호 | string |
| 환자 생년월일 | string |
| 환자 전화번호 | string |
< 환자 영상 정보 Document > - Collection (직접 설계)
| Field | Value |
|---|---|
| id | ObjectId |
| 원본 이미지 id | ObjectId |
| 썸네일 이미지 id | ObjectId |
| 환자 번호 (= 차트 번호) | long |
| 환자 영상 등록 날짜 | datetime |
| 환자 영상 이미지 종류 (x-ray, ct, mri) | int |
| 환자 영상 원본 이미지 파일 이름 | string |
| 환자 영상 썸네일 이미지 파일 이름 | string |
< GridFS > - mongoDB에 영상을 업로드할 때 저장하는 방식 (자동으로 설계됨)
mongoDB에 있는 GridFS에 업로드함
<fs.chunks> - Collection
| Field | Value |
|---|---|
| id | ObjectId |
| files id | ObjectId |
| n | long |
| data | Binary data |
<fs.files> - Collection
| Field | Value |
|---|---|
| id | ObjectId |
| length | long |
| chunkSize | long |
| uploadDate | datetime |
| md5 | string |
| filename | string |
< 환자 정보 Design > - Table (직접 설계)
| Row | Column |
|---|---|
| 환자 번호 (= 차트 번호) | int |
| 환자 이름 | varchar(max) |
| 환자 주민번호 | varchar(max) |
| 환자 전화번호 | varchar(max) |
| 환자 프로필 사진 경로 | varchar(max) |
< 환자 영상 정보 Design > - Table (직접 설계)
| Row | Column |
|---|---|
| 환자 번호 (= 차트 번호) | int |
| 환자 영상 등록 날짜 | datetime |
| 환자 영상 이미지 종류 (x-ray, ct, mri) | int |
| 환자 영상 원본 이미지 파일 이름 | string |
| 환자 영상 썸네일 이미지 파일 이름 | string |
< FileTable > - Table (FileTable 만들면 자동으로 design됨)
| Row | Column |
|---|---|
| stream_id | uniqueidentifier |
| file_stream | varbinary(max) |
| name | nvarchar(255) |
| path_locator | (primary key)hierarchyid |
| parent_path_locator | (foreign key)hierarchyid |
| file_type | nvarchar(255) |
| cached_file_size | bigint |
| creation_time | datetimeoffset(7) |
| last_write_time | datetimeoffset(7) |
| last_access_time | datetimeoffset(7) |
| is_directory | bit |
| is_offline | bit |
| is_hidden | bit |
| is_readonly | bit |
| is_archive | bit |
| is_system | bit |
| is_temporary | bit |
- DB(mongoDB)서버를 Local환경에 구축한 상황에서 구조를 설계하였음
: Client에서 DB서버에 저장된 DB에 직접 접근하여 요청한 정보를 받아오는 구조
[case1) 환자를 검색창에서 검색했을 때]
- 구조 :
1. client에서 환자 검색 ->
2. mongoDB에서 검색한 환자에 관한 정보가 있는지 탐색 ->
3. 있으면 그 정보 client가 받아서 화면에 환자 정보 보여줌
[case2) 환자 정보 등록, 수정, 삭제 버튼을 눌렀을 때]
- 구조 :
1. client에서 신규 환자 정보 등록/환자 정보 수정/환자 정보 삭제 버튼 클릭 ->
2. mongoDB에서 신규 환자 정보 등록/환자 정보 수정/환자 정보 삭제 수행 ->
3. 수행 결과(성공/실패)에 관한 정보를 client에게 알려줌
[case3) 환자 영상 가져오기버튼을 눌렀을 때]
- 구조 :
1. client에서 폴더 내에 있는 환자 영상 파일 클릭 ->
2. 영상 파일을 이용해 썸네일 이미지를 만들고 그 썸네일 이미지와 원래 영상 파일을 mongoDB GridFS에 업로드하고 반환값으로 업로드한 썸네일 이미지와 원본 이미지의 objectID값 받아옴 ->
3. 그 objectID값들과 영상정보를 mongoDB에 저장함 ->
4. mongoDB GridFS에서 mongoDB의 영상정보 테이블에 있는 objectID값과 일치하는 이미지를 다운받아서 client에게 보내줌
- DB(MSSQL)서버를 외부PC환경에 구축한 상황에서 구조를 설계하였음
: Client에서 Server에게 gRPC를 통해 정보를 달라고 요청하면 Server가 DB서버에 저장된 DB에 접근하여 Client가 요청한 정보를 받아서 gRPC를 통해 Client에게 전달해주는 구조
[case1) 환자를 검색창에서 검색했을 때]
- 구조 :
1. client에서 환자 검색 ->
2. 검색 요청을 server에게 gRPC를 통해 전달 ->
3. server에서 MSSQL에게 client가 요청한 정보 전달 ->
4. MSSQL에서 검색한 환자에 관한 정보가 있는지 탐색 ->
5. 있으면 그 정보 server에게 전송 ->
6. server에서 gRPC를 통해 client에게 MSSQL에서 받은 정보 전달
[case2) 환자 정보 등록, 수정, 삭제 버튼을 눌렀을 때]
- 구조 :
1. client에서 신규 환자 정보 등록/환자 정보 수정/환자 정보 삭제 버튼 클릭 ->
2. 신규 환자 정보 등록/환자 정보 수정/환자 정보 삭제 요청을 server에게 gRPC를 통해 전달 ->
3. server에서 MSSQL에게 client가 요청한 정보 전달 ->
4. MSSQL에서 신규 환자 정보 등록/환자 정보 수정/환자 정보 삭제 수행 ->
5. 수행 결과(성공/실패)에 관한 정보를 server에게 알려줌 ->
6. server에서 gRPC를 통해 client에게 정보 전달
[case3) 환자 영상 가져오기버튼을 눌렀을 때]
- 구조 :
1. client에서 폴더 내에 있는 환자 영상 파일 클릭 ->
2. 영상 파일을 이용해 썸네일 이미지를 만들고 그 썸네일 이미지와 원래 영상 파일을 1Megabyte씩 잘라서 stream으로 server에게 gRPC로 보냄 ->
3. server에서는 gRPC를 통해 받은 stream을 합쳐서 MSSQL에 있는 FileTable에 날짜를 조합하여 만든 고유 id로 파일을 저장함 ->
4. 그 id값을 server에서 gRPC를 통해 client에 알려줌 ->
5. 그 id값과 영상정보를 다시 server에게 gRPC를 통해 전송 ->
6. 그 id값과 영상정보를 MSSQL에 저장함 ->
7. MSSQL의 FileTable에서 MSSQL의 영상정보 테이블에 있는 id값과 일치하는 이미지를 server에 다운받음 ->
8. server에서 다운받은 이미지를 client에게 gRPC를 통해 전송함
1차 버전
< 메인 화면 >
< 이미지 선택했을 때 viewer 화면 >
2차 버전
client - < 메인 화면 >
client - < 환자 정보, 영상 정보 보여주는 화면 >
client - < 환자 영상 정보 컨트롤 할 수 있는 화면 >
server - < server 화면 >