DSMP(Dicom Service Management Project) λ DICOM(Digital Imaging and Communications in Medicine) λ°μ΄ν°λ₯Ό μΉ κΈ°λ° νλ«νΌμΌλ‘ νΈλ¦¬νκ² λ€λ£¨κΈ° μν μ€νμμ€ νλ‘μ νΈμ λλ€.
μ°κ΅¬μλ κ°λ°μκ° DICOM λ°μ΄ν°λ₯Ό μ°κ΅¬ λͺ©μ μΌλ‘ λ€λ£¨κΈ° μν΄μλ DICOM λ©νλ°μ΄ν° μ€ νμμ κ°μΈμ 보(PHI) λΆλΆμ μ΅λͺ ν ν΄μΌν©λλ€. νμ¬ λλΆλΆμ μ΅λͺ ν μκ³ λ¦¬μ¦μ λ¨μν μλ‘μ΄ κ°μ μμ±νκ±°λ κ°μ μ§μ°λ λ°©μμΌλ‘ μ§νλκ³ μμ΅λλ€. νμ§λ§ μ΄λ° λ°©λ²μΌλ‘ λ°μ΄ν°μ μ°κ΄μ±μ΄ μ¬λΌμ§κΈ° λλ¬Έμ μ°κ΅¬μ μ΄λ €μμ΄ μμ΅λλ€. (μλ₯Ό λ€μ΄, κ°μ νμμ CT DICOM νμΌμ΄ μ΅λͺ ν ν λ€λ₯Έ νμ IDλ₯Ό κ°μ§κ² λ μ μμ΅λλ€.) μ΄ νλ‘μ νΈμμ Patient, Study, Series, Image ID λ± μ°κ΅¬λ₯Ό μν΄ μ°κ΄μ±μ΄ μ μ§λμ΄μΌνλ λ°μ΄ν°μ λ¨λ°©ν₯ ν΄μ± (Bcrypt) μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ μ΅λͺ μ±μ 보μ₯νλ©° μ°κ΄μ±μ μ μ§νλ μ΅λͺ ν κΈ°λ²μ μ§μνκ³ μμ΅λλ€. λν, μ΅λͺ ν κ³Όμ μ λ°μ΄ν°κ° μλ²μ μ μ‘λκΈ° μ λΈλΌμ°μ μμ μ§νλλ―λ‘ μ΅λͺ νλμ§ μμ λ°μ΄ν°κ° λ€νΈμν¬μ μ ν¬λ κ°λ₯μ±μ μ°¨λ¨ν©λλ€.
μλ£ μ°κ΅¬λ₯Ό μ§ννκΈ° μν΄μ DICOM μ΄λ―Έμ§ λΏλ§ μλλΌ μ΄μ κ΄λ ¨λ λ©ν λ°μ΄ν°(μ/μ μ±, λ³λ³μ ν¬κΈ° λ±)κ° νμν©λλ€. CSV νμμΌλ‘ λ©νλ°μ΄ν°λ₯Ό μ λ‘λ ν κ²½μ°, νλ‘μ νΈλ λ©νλ°μ΄ν°μ ID λΆλΆμ μ½μ΄ κΈ°μ‘΄μ μ μ₯λ DICOM λ°μ΄ν°μ μ°κ²°νμ¬ μλμ κ°μ΄ λ°μ΄ν°λ₯Ό νμΈ ν μ μμ΅λλ€.
μ°λ¦¬λ μλ£ μ°κ΅¬λ₯Ό κ³μ μ§ννλ©°, DICOM νμΌ νμ λΏλ§ μλλΌ JPEG, PNG λ± κ°κ³΅λ λ°μ΄ν° νμμ΄ νμνλ€λ κ²μ μκ²λμμ΅λλ€. λ°λΌμ, DICOMκ³Ό JPEG, PNG νμΌ νμ μ λ‘λλ₯Ό λͺ¨λ μ§μνλλ‘ μ λ°μ΄νΈ νμ΅λλ€. JPEG, PNG νμΌ νμμΌλ‘ μ λ‘λλ₯Ό μ§νν κ²½μ° μ΅λͺ ν κ³Όμ μ μ§νλμ§ μμΌλ©°, νμΌμ΄λ¦μ νΉμ IDλ‘ λͺ λͺ ν΄μΌν©λλ€. μ΄ ID λ μΆν μ λ‘λν λ©νλ°μ΄ν°μ ID λΆλΆκ³Ό μ°κ΄λ©λλ€.
DSMPλ μ¬λ¬ κ°μ νλ‘μ νΈλ₯Ό μμ±νκ³ κ° νλ‘μ νΈλ§λ€ μ΄λ―Έμ§μ λ©νλ°μ΄ν°λ₯Ό μ μ₯ν μ μμ΅λλ€. 보μμ μν΄ κ° νλ‘μ νΈλ μ΄λλ°μ μ¬λλ§ μ°Έμ¬κ° κ°λ₯νλ©°, νλ‘μ νΈ μμ±μκ° μ°Έμ¬μλ₯Ό κ΄λ¦¬ ν μ μμ΅λλ€.
μ°κ΅¬λ₯Ό μν΄μ μ
λ‘λ λ λ°μ΄ν°κ° μ¬λ°λ₯Έμ§, λΆν¬λ μ΄λ€ μ§ λ± λ°μ΄ν°λ₯Ό νλμ νμ
νκΈ° μν΄μ λ°μ΄ν° μκ°νκ° νμν©λλ€. DSMPλ λ©νλ°μ΄ν°λ₯Ό λΆμν΄ μ«μν λ°μ΄ν°μ κ²½μ° νμ€ν κ·Έλ¨μ, μΉ΄ν
κ³ λ¦¬ν λ°μ΄ν°μ κ²½μ° νμ΄μ°¨νΈλ₯Ό μκ°ννλ κΈ°λ₯μ μ 곡ν©λλ€.

DSMPλ μλ£ λ°μ΄ν°λ² μ΄μ€λ₯Ό ꡬμΆνκΈ° μν νλ«νΌμ΄μ§λ§, μ°λ¦¬λ μλ£ λ°μ΄ν°λ² μ΄μ€ κΈ°λ° μ°κ΅¬κ° λ¨Έμ λ¬λκ³Ό λ°μ νκ² μ°κ΄μ΄ μλ€λ κ²μ μκ² λμκ³ μ΄λ₯Ό μ§μνκΈ° μν΄μ Torchserve κ²°κ³Όλ₯Ό μ μ₯ν μ μλ κΈ°λ₯μ μΆκ°νμ΅λλ€. λ³λμ Torchserve μλ²λ₯Ό μ€νμν€κ³ μ΄λ₯Ό DSMP νλ‘μ νΈμ μ°λνλ©΄, μλμ κ°μ΄ μΆλ‘ λͺ¨λΈμ μ νν΄ μΆλ‘ μ μμ²νκ³ κ²°κ³Όλ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯ν©λλ€. μμΈν ꡬνμ μν΄μ μ¬κΈ°λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.

- Docker >=20.10.16
- OpenJDK>=17.0.1
- Node.js>=v16.6.1
- yarn>=1.22.19
- Download
#clone all project with submodules
git clone --recurse-submodules https://github.com/BEOKS/DicomProject.git
cd DicomProject- Configuration DSMP use OAuth2 authentication with Google and Naver, For now, we use Naver as default. You can use other OAuth2 with Spring Security . In spring resources, You can check oauth-sample file. Create application-oauth.yml in same directory that contain client-id and client-secret.
.\install_project.shsudo sh install_project.shrun_project.sh local # run project for development, localhost:3000μμ μλΉμ€ μ΄μ©κ°λ₯
run_project.sh prod # run project for deploysudo sh run_project.sh local # run project for development,localhost:3000μμ μλΉμ€ μ΄μ©κ°λ₯
sudo sh run_project.sh prod # run project for deployClient page port is 3001 and server port is 8080
λ컀λ μ€μΉ μ λ°λ³΅λλ νλ‘λΉμ λκ³Ό μ€μ μ λ°©μ§ν μ μμ΅λλ€. λ컀λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ Local, Dev, Prod νκ²½μμ λμΌν λμμ 보μ¦ν μ μκΈ° λλ¬Έμ μ΄ νλ‘μ νΈλ λ컀λ₯Ό κΈ°λ°μΌλ‘ μ€μΉ, μ€νλ©λλ€. λ©ν° 컨ν μ΄λλ₯Ό μ¬μ©νκΈ° λλ¬Έμ Docker-composeλ₯Ό μ΄μ©νκ³ μμ΅λλ€.React νλ μμν¬λ μ¬μ¬μ©μ±μ΄ λμ μ»΄ν¬λνΈλ₯Ό μμ±νκΈ° μ©μ΄νκ³ Typescriptλ νμ μ λͺ μν¨μΌλ‘μ¨ λ°μ΄ν° ꡬ쑰 μ°¨μ΄λ‘ μΈν λ²κ·Έ λ°μμ μ΅μ ν μ μκΈ° λλ¬Έμ λμ νμ΅λλ€. React Propsλ νλ‘μ νΈκ° μ»€μ§ μλ‘ μ€λ³΅μ¦κ°μ λΆνμν μ»΄ν¬λνΈ λλλ§μ΄ λ§μμ Έ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ Reduxλ₯Ό λμ νμ΅λλ€.
As java running by JVM which guarantee stable software running environment like Auto Optimization and GC, We select java for server system. We use Spring Framework For effective and safe develop in Java development environment. And for testing, we use Junit5 ans Mockito.
Basically, We use Monolithic Architecture, because we now aim Fast Implement-Fast Feedback cycle. MSA(Microservice Architecture) is good for scale out, independent development and maintenance. But, it require many management like monitoring, configuration for each MSA component and Troubleshooting etc. If we make feature stable and need to handle scaling out per feature, We will migrate to MSA.
For that, We use SoC(Separation of Concern) design structure. Simply, all code files for same feature need to store in same project of directory. So we hope to migrate to MSA relatively easily.


