Skip to content

Latest commit

 

History

643 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Image

👨🏻‍⚕️닥터스캔 (DICOM 활용 의료 영상 서비스)

의료영상 표준 웹 뷰어 프로젝트 🖍️

프로젝트 기간
프로젝트 기획 및 DB 모델링
서비스 개발
피드백 수정 및 배포
사용 언어 수 커밋수 릴리즈
Node.js Figma JSP/JSTL HTML5 CSS JavaScript npm Webpack Cornerstone JS

Java 17 Spring SpringBoot dcm4che jcifs

MySQL AWS RDS Oracle DB

Intellij IDEA Git GitHub

프로젝트 소개

  • 닥터스캔은 웹 기반으로 의료기관이 자체 환경과 필요에 맞게 손쉽게 통합 및 커스터마이징 가능한 웹 DICOM Viewer입니다.
  • DICOM 의료 영상의 실시간 렌더링과 판독 보고서 작성 및 관리가 가능합니다!
  • 의료 영상 판독 및 데이터 관리를 효율화하고 사용자 친화적 UI로 의료 업무 환경 개선을 목표로 했습니다!

🚨 빌드 시 주의

DrScan 프로젝트는 제공된 Oracle DB와 네트워크 Storage(NAS) 주소를 기반으로 설정 및 빌드가 진행됩니다.
아래와 같은 상황에서 빌드에 어려움이 발생할 수 있으니, 실행 전 다음 사항을 반드시 확인해주시기 바랍니다.:

  • DrScan 프로젝트는 Oracle DB에 접근하여 데이터를 처리합니다.
    제공된 DB 주소, 사용자 계정, 비밀번호 등이 누락되거나 잘못된 경우 실행이 불가능합니다.
  • 의료 영상 데이터(DICOM 파일)는 네트워크 스토리지에 저장되어 있으며,
    해당 주소가 유효하지 않거나 접근 권한이 없는 경우 영상 렌더링 및 조회 기능이 동작하지 않습니다.

1. 팀원 구성 및 역할 분담

🐉 이민수 (팀장)

  • 기능 : 의료 영상 렌더링 및 조작
    • 해당 환자 DICOM 영상 렌더링
    • 영상 확대 기능
    • 영상 이동 기능
    • 영상 음영 처리
    • 영상 좌우 반전 및 기울기 기능
    • 선택 후 주석 삽입 기능
    • 특정 부위 길이 측정 및 그리기 기능

🐇 박현균 (서기)

  • 기능 : 판독 및 조회
    • 환자, 스터디, 시리즈, 이미지, 판독 정보 조회
    • 정렬 기능
    • 세부 목록 표시
    • 판독 내용 입력, 저장, 수정, 삭제
    • 판독 자동 저장
    • 판독 등급 분류
    • 판독 상태 관리
    • DICOM 영상 렌더링

🐅 방서준 (팀원)

  • 기능 : 환자 목록 조회 및 진료 기록 관리
    • 환자 목록 조회
    • 환자의 진료 기록 조회
    • 진료 기록 상세 조회
    • 진료 기록 등록
    • 진료 기록 수정
    • 진료 기록 삭제

🐔 김현창 (팀원)

  • 기능 : 보안 및 관리
    • 개인정보보호법 준수
    • 필터
    • 비정상적인 로그인 시 계정정지
    • 캡쳐방지
    • 로그 저장 및 출력

🐍 이준호 (팀원)

2. 개발환경

Front-end

Back-end

Database

Tool


3. 개발 기간 및 작업 관리

프로젝트 기간
프로젝트 기획 및 DB 모델링
서비스 개발
피드백 수정 및 배포

4. 문서

[판독 및 조회]

[메인 (검색바)]

  • 조회 | 검색창 아래쪽에 모든 스터디 목록이 테이블 형식으로 표시됩니다.
  • 검색 | 검색은 환자 이름, 환자 코드, 검사 날짜, 설명, 촬영 장비, 검사 번호 총 6가지 항목 중 원하는 항목을 자유롭게 조합하여 사용할 수 있습니다!

메인 검색

[메인 (목록)]

  • 정렬 | 테이블 제목을 클릭하면 해당 목록에 맞게 오름차순으로 정렬합니다. 한 번더 클릭하면 내림차순으로 정렬합니다. 메인 정렬

[메인 (상세목록)]

  • 상세목록 | 판독 내용있는 환자만 표시가 됩니다. 판독 내용이 없는 경우엔 없음으로 표시됩니다.
  • 중증도 레벨 |중증도 레벨은 한국형 응급환자 분류 도구를 참고하여 버튼 색상을 구분하였습니다.

세부목록

[DICOM Viewer (판독 저장)]

  • 표시 | 환자, Study, Series 정보가 외부 데이터베이스에서 가져와 표시했습니다.
  • 저장 | 중증도 레벨, 보고서 상태, 판독내용을 입력후 저장하면 내부 데이터베이스에 저장합니다.
  • 자동저장 | 판독 중 입력된 데이터는 중간중간 자동 저장되어, 예상치 못한 데이터 손실을 예방할 수 있습니다.
  • 렌더링 | Cornerstone.js (코너스톤)로 초기화 및 이미지 로드 -> WebGL을 활용하여 DICOM 파일을 표시 -> DICOM 데이터를 Blob 형태로 변환 후, HTML 뷰포트에 표시

판독저장

[판독 기록(목록)]

  • 정렬 | 테이블 제목을 클릭하면 해당 목록에 맞게 오름차순으로 정렬합니다. 한 번더 클릭하면 내림차순으로 정렬합니다.
  • 중증도 레벨 | 중증도 레벨에 따라 색상이 다르게 표시되므로 직관적으로 데이터를 확인할 수 있습니다.
  • 상세보기 | 상세보기 버튼을 클릭하면 해당 판독의 상세 정보 페이지로 이동할 수 있습니다.

판독기록 정렬

[판독 상세(수정, 삭제)]

  • 수정 | 환자 정보와 검사정보외부 데이터베이스에서 가져온 정보이므로 수정이 불가능합니다. 중증도 레벨, 보고서 상태, 판독 내용내부 데이터베이스에서 관리되며 수정 가능합니다.
  • 삭제 | 삭제 버튼 누르면 삭제 확인 메세지가 나오는데 확인을 눌려야지 삭제가 완료됩니다.

수정

삭제

환자 목록 조회 및 진료 기록 관리

[환자 목록 조회]

Image

  • 외부 데이터 베이스에 존재하는 환자정보를 GET요청을 통하여 요청 및 조회하여 출력합니다.
  • 사용자에게 데이토를 효율적으로 제공하기 위해 페이징 처리를 하였습니다.

[진료 목록 조회]

Image

  • 환자 목록 페이지에서 한 환자를 선택 후 진료 보기 버튼을 누를 시 해당 환자의 진료 목록 페이지로 이동합니다.

[진료 등록]

Image

  • 하단에 위치한 진료 등록 추가 버튼을 클릭하여 내용을 작성하고 진료를 추가합니다.

[진료 수정]

Image

  • 우측에 위치한 진료 상세보기 버튼을 눌러 진료 상세 페이지로 이동할 수 있습니다.
  • 수정할 내용을 작성하고 하단에 위치한 수정 버튼을 클릭할 시 해당 진료 정보가 수정됩니다.

[진료 삭제]

Image

  • 상세 페이지에서 하단에 위치한 삭제 버튼을 클릭할 시에 해단 진료 정보를 삭제합니다.
  • 삭제한 후에 해당 진료의 대상인 환자의 진료 목록페이지로 이동하게 됩니다.

[진료 등록 및 수정 시 유효성 검사]

Image

  • 진료 내용과 날짜가 비어있다면 "해당 내용을 작성해주세요"라는 오류 메세지를 출력합니다.
  • 진료 날짜가 오늘의 날짜보다 미래일 경우 "유효하지 않은 날짜입니다."라는 오류 메세지를 출력합니다.

보안 및 관리

[비정상적인 로그인 시 계정정지]

Image

  • 5회 이상 실패 시 계정정지
  • 관리자가 해제 가능

[로그리스트]

Image

  • 필요한 접근 기록을 저장
  • 유저코드별로 검색 가능

6. 발표 영상

<작품발표영상> 이민수 팀 - DrScan

7. 프로젝트 후기

🐉이민수

이번 프로젝트는 이전에 진행했던 프로젝트와 달리 규모가 커진 5명이 하나의 팀이 되어 의료 영상 판독 및 관리 시스템 서비스를 만들어 개발자로서 첫 걸음을 시작하는 귀중한 시간이 되었습니다.

백엔드에서는 Spring MVC, RESTful API를 중심으로 구조화 및 설계하고 Spring Data JPA와 Hibernate를 통하여 Oracle DB, 직접 설계한 MySQL DB를 동시 활용하여 환자의 기본 정보 및 검사 정보, 영상 데이터를 분리하였습니다.

프론트엔드에서는 dcm4che를 통해 의료 영상 (DICOM 영상) 렌더링 기능을 구현, Cornerstone.js API를 적극 도입하여 영상 판독에 필요한 확대 및 이동, 음영 처리, 주석 삽입 및 그리기 기능 등을 구현하였습니다.

프로젝트 간 처음 팀장을 담당하였습니다.

처음에 서로 의견이 맞지 않는 일도 있었지만 의견 조율을 중재하고 협업하는 분위기를 만든 결과 프로젝트를 잘 마무리 할 수 있었습니다.

많은 기술들을 써가며, 실제 의료 시스템에서 제공되는 서비스를 직접 만들어 본 경험과 팀장으로서 팀을 이끌어 간 경험은 앞으로 있을 개발자로서의 활동에 좋은 경험으로 남을 것 입니다.

본 프로젝트가 끝난 이후로도 실제 서비스를 만들며 어떻게 해야 더 좋은 서비스를 만들 수 있는지, 단순 기능을 구현하는 Coder가 아닌 Service를 제공하는 Developer로 성장해 나가겠습니다.

🐇박현균

이번 프로젝트에서는 Spring Boot 기반의 의료 영상 판독 및 관리 시스템을 직접 설계하고 개발했습니다. 의료 데이터를 웹 환경에서 다루는 경험은 처음이었지만, 팀 프로젝트를 통해 하나의 시스템으로 완성해가는 과정이 무척 뜻깊었습니다.

백엔드에서는 Spring MVCRESTful API를 중심으로 구조화하고, Spring Data JPA + Hibernate를 통해 OracleMySQL을 병행 사용해 검사 정보와 판독 데이터를 분리하여 관리했습니다. 검색 기능, 환자 조회, 판독 보고서 처리 등 데이터 흐름 전반을 설계하면서 실무와 가까운 경험을 할 수 있었습니다.

프론트엔드에서는 Cornerstone.js를 사용해 DICOM 영상 렌더링 기능을 구현하는 역할을 맡았습니다. 브라우저 상에서 실제 의료 영상을 WebGL 기반으로 빠르게 렌더링하고, 썸네일 생성, 페이지네이션 등도 함께 구성해 사용자 친화적인 이미지 뷰어를 만들 수 있었습니다.

또한, 프로젝트 후반부에는 판독 보고서 실시간 자동 저장 기능과 최신 판독 데이터 불러오기 기능을 구현해 사용자의 입력을 안정적으로 관리할 수 있도록 했습니다. 일정 주기로 판독 내용을 서버에 자동 저장하며, 이전에 저장된 내용을 다시 불러와 바로 이어서 작업할 수 있는 흐름도 직접 구성했습니다. 실제 병원 현장에서 편리하게 사용할 수 있도록 고민하며 설계한 기능이었습니다.

다만 아쉬운 점도 있었습니다. 영상 뷰어에서 확대, 이동, 거리 측정 등의 판독 툴 기능은 아직 완성하지 못했습니다. 툴 버튼과 일부 로직은 구현했지만 실제 기능이 작동하도록 연결하지 못한 점은 아쉽게 느껴집니다. 추후 여유가 생긴다면 개인적으로라도 해당 기능을 완성해보고 싶습니다.

그럼에도 불구하고 제가 맡은 영상 시각화, 시리즈 검색기능, 그리고 자동 저장 및 최신 데이터 불러오기 로직은 안정적으로 구현되었고, 팀원들과 협업하여 프로젝트 전체를 잘 마무리할 수 있었습니다. 다양한 기술을 접목하며 실제 의료 시스템과 유사한 환경을 구현한 이 경험은 개발자로서 한층 성장할 수 있었던 소중한 계기였습니다.

🐅방서준

🐔김현창

이번 프로젝트를 진행하면서 Spring Boot의 기본적인 기능들을 직접 적용해볼 수 있어 매우 유익한 경험이었습니다. REST API 설계, JPA를 활용한 데이터베이스 연동, 기본적인 예외 처리 등 주요 기능들을 직접 구현해보며 백엔드 개발에 대한 이해를 한층 더 넓힐 수 있었습니다.

하지만 프로젝트를 마친 후 돌아보니, Spring Boot가 제공하는 다양한 기능들 중 일부만 활용한 것이 아쉬움으로 남았습니다. 특히 Spring Security를 활용한 인증 및 권한 관리, AOP를 이용한 로깅 처리, 그리고 DevTools, Actuator 등을 통한 운영 환경 모니터링 등 보다 고급 기능들까지 다뤄봤다면 더 풍부한 프로젝트가 되었을 것이라 생각합니다.

앞으로는 이러한 Spring Boot의 다양한 기능들을 능동적으로 학습하고, 실제 서비스에 어떻게 효율적으로 적용할 수 있을지를 고민하며 프로젝트에 녹여내고자 합니다. 단순히 기능을 구현하는 것에 그치지 않고, 스프링 생태계 전반을 이해하고 활용할 수 있는 개발자로 성장하고 싶습니다.

🐍이준호

About

의료영상표준 웹 뷰어 프로젝트

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages