티스토리 뷰
클라이언트 보다는 서버 프로그래밍이 주력이긴 하지만 재미는 클라이언트가 높은 것 같다. 개인적으로 React, Vue, Angular 모두 자유롭게 활용이 가능하지만 순수 JavaScript 코딩을 선호한다. 이유는 Redux 같은 것도 좋긴 하지만 내가 설계를 하면 데이터는 어디에서든 연결할 수 있고, 책임있는 컴포넌트에서 관리하게 하여 더 직관적으로 프로그램을 만들 수 있기 때문이다. 즉, 프레임워크의 소스를 분석해서 활용하는 것도 괜찮지만 내가 프레임워크를 만들어서 코딩하는 편이 더 쉽고 더 자유롭다.
작년 부터 시민들이 온라인으로 민원을 신청하는 페이지에 대한 UX/UI 개선에 대한 고민을 해왔었다.
아래는 현재 간략히 정리한 내용이다.
- 현재 33종의 민원을 온라인으로 제공하고 있다.
- 하나의 민원에는 수전(물을 사용하는 건물) 정보와 신청인, 각 민원에 대한 입력 사항이 들어 있다.
- 신청 페이지를 구성하는 요소는 민원에 종류에 따라 달라진다.
- 신청페이지는 작으면 500라인에서 많으면 3000라인 정도로 되어 있고 검증을 위한 자바스크립트는 별도의 페이지로 각 민원 마다 적게는 500라인에서 많게는 5000라인 정도이다.
- 수전 데이터를 조회 표출을 위한 모듈은 여러 레이어로 페이지만 5000라인 자바스크립트 역시 5000라인 정도로 작성되어 있다.
- 이사 관련된 4개 민원은 신청을 같이 할 수 있게 서비스를 제공한다.
- 전체 민원을 보면 10만 라인이 약간 못 미치는 수준이다.
문제는 중복없이 작성하려는 시도는 좋은데 jsp, js로 만들어져 쓸대없이 복잡하다. 동적으로 생성하는 부분도 많고 수시로 서버로 데이터를 호출하는 부분도 많다. 구조화를 하려면 할 수 있겠지만 문제는 민원이 너무 많다는 점이다. 결국 인력을 갈아 넣는 일을 반복할 수 밖에 없다.
=> 결국 전면 재개발으로 결정했다.
- 하나의 jsp 페이지(SPA)에서 모든 민원 신청이 가능하다. 이사 관련 4개 민원도 묶어서 한번에 신청 가능하게 한다.
- 중복을 줄이기 위해 4단계 구성으로 신청인 및 대상 정보입력 -> 민원정보입력 -> 입력내용 요약 및 검증 -> 신청
- 민원에 따라 필요한 조합을 위해서 신청 페이지는 컴포넌트 형태로 작성한다.
- 민원 정보 및 단계정보를 유지해야 하기 때문에 React, Vue와 같은 SPA가 적당해 보인다.
- SPA 프레임워크를 사용하기에는 나중 유지보수 인력에게 관련지식을 요구하기가 힘들다.
- 결국 순수 자바 스크립트로 개발하기로 정했다.
- 브라우저 호환성 때문에 ajax를 사용하고 모든 호출은 보안을 위해서 form 대신 비동기 및 json 데이터를 사용한다.
- Typescript를 고민했는데, 유지보수인력의 편의성을 고려하여 도입하지 않기로 했다.
- 다른 개발자들의 개발 편의성을 위해 Typesript를 적용하였다. WebPack을 통한 bundle.js 배포 방식이다.
구조를 결정하고 이상관련 4개의 민원을 신청가능한 데모를 만드는데 까지 약 20일이 소모되었다.
사이드 프로젝트 성격이라 하루에 많게는 4시간 적게는 1~2시간 정도 밖에 집중을 못하고 있어 구현되지 않는 부분이 아직 많다.
소스는 자바 스크립트라서 공개되어도 별로 상관이 없고, 관리 편의를 위한 개인프로젝트 성격이 강하기 때문에 아래 링크로 일부소스를 볼 수 있다. 보안에 필요한 내용은 아직 적용하기 전이지만, 이런 구조로도 작성이 가능하다고 참고 하시면 좋을 것 같아 올려본다.
시간이 나면 이 프로그램의 구조와 동작 절차에 대해서도 적어 보겠지만, 항상 나의 개발철학처럼 단순함의 미학을 최대한 살리기 위해 노력했다. 참고가 되었으면 좋겠다.
'Demos' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- login
- Spring
- WebMvc
- Security
- one-to-one
- Spring Security
- 자바
- Angular
- 스프링
- RestTemplate
- Validation
- 스프링부트
- Rest
- Many-To-Many
- form
- crud
- 상속
- XML
- 설정하기
- 설정
- 로그인
- mapping
- MYSQL
- hibernate
- 외부파일
- spring boot
- 하이버네이트
- 매핑
- jsp
- one-to-many