1차 프로젝트 병원 시스템
포스트
취소

1차 프로젝트 병원 시스템

영남병원, 병원 시스템


들어서며

  • 국비학원 1차 프로젝트이며 3인조로 진행했습니다.

  • 실제 프로젝트 기간은 5월 3일 ~ 5월 13일이며, 3월 21일 학원 개강 이후 1달반이 지난 시기입니다.

  • 문서를 작성중인 현재 날짜는 3개월이 지난 8월 7일이며, 복기를 위주로 작성했습니다.

  • 기술 수준은 JSP 를 배우기 전 단계에 진행했으며, Java, DB, Jdbc, JavaFX를 활용했습니다.



개요


Desktop View


1
2
3
4
5
6
7
8
9
양산된 병원 웹사이트에서 진료 예약이나 채팅 시스템은 흔치 않다.
현대의 시계는 너무나 빠르고 엄격하며,
인간은 힘겹게 얻어낸 소중한 시간을 
딱딱한 병원 의자에 소비하고 싶지 않다.

소규모 병원이더라도 원격으로 간단한 의료 상담을 해줄 수 있는 
의료진이 존재하고 원하는 시간에 바로 진료가 시작되길 바란다.

비로소 우리는 시곗바늘에게 자비를 구할 수 있다.


담당 분야

  • SW Architecture
  • GUI(View)
  • Bussiness logic


구현 기능

  • 회원 시스템
  • 병원 정보
  • 진료 예약
  • 실시간 상담


기타

  • 수업 내용이었던 소켓, 스레드, Jdbc 기술 활용에 초점을 뒀으며 복습을 중시한 프로젝트


유저와 관리자 화면 및 기능

Desktop View

  • 페이스북 같은 싱글 페이지 구성을 시도

  • ajax를 공부하고나니 페이스북은 스크롤 형식의 철저한 비동기 통신의 집합으로 보인다.


Desktop View

  • 회원 시스템과 핵심 프로세스 중 하나인 진료 예약

  • 정규식과 사용자 편의를 위한 keypress event 적용

  • 이전 날짜는 선택 불가능하며 이미 예약된 시간은 리스트에 나타나지 않도록 구현


Desktop View

  • 인공지능 사진 만들기 사이트에서 저작권 문제 없는 가상의 얼굴을 가져와 활용

  • 오시는 길 화면에선 ‘큰 지도로 보기’ 버튼을 클릭할 시 브라우저를 열어 네이버 지도 페이지가 나타나도록 구현

  • 소켓을 활용한 실시간 채팅 구현, 채팅은 영속계층이 아닌, 메모리성으로 Collection 에 저장


Desktop View

  • 각 카테고리에 맞는 목록이 출력됨. 모두 영속계층 데이터


프로젝트 타임라인

Desktop View

  • 소프트웨어 공학에서 사용되는 프로젝트 기획서를 참고하여 제작
  • 실제론 기획 및 설계 기간을 길게 가져가는데 규모가 작아 차질 없이 진행


MVC 적용과 레이아웃

Desktop View

  • 수업시간에 DAO, VO 라는 단어가 궁금해서 찾아보다가 MVC 패턴에대해 알게 됐었고
    fxml 페이지와 컨트롤러를 어떻게 구성해야될까, 패키지를 분리하고 fxml 을 View 로 생각해보니
    MVC 패턴에 대입하여 구성할 수 있었음


Desktop View

  • 설계도 처음이고 프로젝트도 처음이라 일관성을 어떻게 지키고 전달해야될지 고민이 듦

  • 협업 툴 중 하나인 노션을 이용하여 명칭을 명세

  • 지금 생각해보면 고객사 요구사항을 작업 당시에 디테일하게 파고들었지만,
    최종 포트폴리오에선 기획 단계에서 요구사항을 확실히 잡고 가야겠음.

  • 명세 과정은 비용이 꽤나 컸지만, 식별자 통일에 도움이 됐으므로 포트폴리오에도 고려


Desktop View

  • 소프트웨어 아키텍쳐에 패키지 트리 구성과 레이아웃 구성이 포함되는지는 모르나 설계 당시엔 굉장히 어려웠던 작업

  • 계층형 레이아웃에서 뷰 페이지의 호출 시점, 생명 주기에 대한 공부를 전부 다시 할 정도로 애로사항이 많았음.

  • 상위 컨트롤러에서 하위 계층이 완전히 Load 되기 전, 하위 계층 컨트롤러에 접근하려하면 Exception이 발생
    호출 순서에 대한 정확한 이해가 필요했었음

  • 불필요한 리소스 낭비를 막는 계층형 레이아웃의 이점과 생산 비용이라는 단점을 동시에 알게 됨.


다양한 API 도입

Desktop View

  • 이펙티브 자바를 공부하며 Enum 에 대한 환상이 있었는데, 정적 임포트와 활용하여 초기화와 함께 전역에서 불변을 보장하며 다룸

  • 제네릭과 타입 제한을 활용해 컴파일 단계에서 귀찮은 형변환 과정을 제거하고 유연성을 통해 소중함을 느낌


Desktop View

  • 모든 컨트롤러를 정적으로 다루다보니 화면의 데이터가 남아있는 현상이 나타남

  • 화면 전환 메소드 내부에 이전 화면의 데이터를 모두 제거하는 역할의 메소드를 정의하여 해결

  • 화면 전환 메소드가 static 형태로 선언되어 있는데, 컴포지션 형태를 공부했던 게 생각나 연습 겸 적용


Desktop View

  • 학원 수업에선 컬렉션 스트림과 옵셔널 등 모던 API 를 거의 다루지 않았음

  • 같은 수강생들에게 알려주고 싶기도 했고, 연습삼아 기존 for 문을 stream 형태로 변환해서 소개했음


프로젝트 목표

Desktop View

  • 거창하게 작성했었지만 지금 보면 html 을 배우고 코딩에 소질이 있다고 생각하는 어린 아이를 보는 것 같음

  • enum 을 활용한 컨트롤러는 분명 메모리 효율적
  • 모던 방식 지향은 했지만 사실 쓰인 곳이 적음
  • 상용화된 앱은 정말 훨씬 많은 기능이 있음
  • 복습에 초점은 잘 맞춰진 것 같음




후기


디자인 패턴의 중요성

1
2
3
4
평소 궁금증이 많아 용어조차도 많이 검색하는 편인데, 
스프링이 궁금해 MVC 패턴에 대해 알아봤던 게 프로젝트에 많은 도움이 되었다.

알려진 패턴을 참고하여 과감하게 패키지를 나눈 게, 이 프로젝트의 생사를 정하는 결정적인 사항이었다.


프레젠테이션 계층

1
2
3
4
5
6
7
8
9
10
11
12
13
14
고객사와 프론트엔드 담당자가 없다.
요구사항의 명확함과 프레젠테이션 명세의 중요성을 느꼈다.

어렴풋한 기획 후 즉시 작업을 들어갔으나 
실무 신입의 발끝에도 못미치는 실력과 경험으론 어림도 없었다.

우선 프레젠테이션 계층을 해결하면 두 문제를 
바로 잡을 수 있다고 생각하여 내가 직접 진행했다.

'화면 구성이야 별거 아니겠지' 라는 안일한 생각으로
처음엔 팀원에게 부탁할까 하다가 직접 해보니 애로사항이 많았다.

결과적으로 View 단에 내가 직접 투입해서 뼈대를 마련한 건
개발 생산성에 엄청난 도움이 됐다고 자부할 수 있는 경험이었다.


생명 주기

1
2
3
4
5
6
7
8
9
10
라이프 사이클에 대한 내용은 정말 지루한 이야기였다.

레이아웃을 구성하고 호출 시점을 고려하다보니 생명 주기와 호출 시점에 대한 이해는 선택이 아니라 필수였다.

이후 학습에선 예를 들어, 
Jsp 가 번역되고 컴파일 되는 과정과 같이 호출 시점에 대한 공부를 게을리하지 않았고

괜히 스프링 로그를 debug 로 잡고 호출 순서를 분석해보기도 했다.

그 과정에서 다양한 기본 제공 api 들과 친숙해질 수 있었다.


정보 검색 능력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
자바FX 관련 내용을 검색해봐야 국내 문서엔 기초 수준 밖에 없었다.

웹을 벗어난 GUI 활용에 대한 거라곤 간단한 프로그램일 텐데
C언어라는 강력한 대안이 있는 이상, 당연한 결과였다.

어쩔 수 없이 영어로 된 문서를 읽기 시작했는데
스택 오버 플로우를 특히 자주 봤었다.
수능 공부할 때 했던 영어 공부가 빛을 발하던 시기다.

레이아웃에 대한 문제 해결 몇몇은 스택 오버 플로우의 힘을 빌렸고
이전 화면의 내용을 지우는 Sweeper 메소드 보강에도 도움이 됐다.

이때 영어와 친숙해지면서 요즘은 Spring docs 를 직접 보고
권장하는 api, 최신 방식에 대한 내용을 직접 찾아볼 수 있게 됐다.


언어에 대한 심화학습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
난 자바 언어관련 책을 3권, 디자인 패턴 책을 1권 봤다.

혼자 공부하는 자바는 기본기를 쌓는데 도움이 됐지만
모던 api 관련 내용은 없었다. 

그래서 열혈 자바 프로그래밍이라는 책을 봤는데
제네릭에 대한 상세한 설명과 모던 api 내용이 다 수록되어 있었다.

작가 주관을 통해 api 선택에 대한 합리성과 도입된 이유,
활용 방안 등 정말 많은 도움이 됐었다.

이후 이펙티브 자바를 접했는데, 당시엔 정말 새롭고 흥미로운 
주제가 많았다. 
복잡한 컬렉션 스트림 예제, 이외에도 정말 어려운 예제가 많았지만 언어 이해도가 수직 상승하던 시기다.

관련 없을 수도 있지만 스프링이 주장하는 POJO 를 받아들일 때,
이펙티브 자바에서의 언어 수준 향상은 내게 주장에 대한 타당성을 심어줬었다.

기본이 제일 중요하기 때문이다.


리더란

1
2
3
4
5
6
7
8
9
프로젝트 팀장의 무게는, 꼭 IT 뿐만아니라 어디서든.
그저 권리만 가진 자리가 아닌, 책임을 가진 자리임을 알게 됐다.

팀원의 실수는 내 실수다.

리더란 팀원이 실수하지 않는 환경을 조성하는 데 책임이 있다.

최종 포트폴리오를 진행할 땐, 팀원들이 자유롭게 자신의
코딩 실력을 발휘할 수 있도록 좀더 세련된 환경을 조성할 것이다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.