Search

EunbiDeveloperImpl

{

About Me

Profile

코드로 대화하는 개발자가 되고 싶습니다.
🪪 name : 김 은비
 birth : 1995.07.07
phone : 010-5014-2932
 email : soonyy13@gmail.com
 github : @soonSoonyy

Career

타이거컴퍼니 (인턴)
2016 ~ 2016.03
‘티글링’ 프로젝트 진행
다이얼로그스페이스
2017.03 ~ 2018.09
‘Lucky Bomb Slot’ 개발
제이에스디원
2018.10 ~ 2021.04
자생한방병원 EMR, OCS 개발 및 유지보수
이노그리드/이노커스
2021.04 ~ 재직중
CMP 솔루션 개발 및 유지보수

Skill

분류
자주 사용 했어요
경험이 있어요
SpringBoot
JSP
php
React
Cocos2dx JS
Git
Linux
Vmware
Openstack
Docker
Jenkins
Mysql
Mariadb
Influxdb
Postgresql
Oracle

Awards

Project

AI 가상실습실 포털 사이트 구축 및 유지보수

개발 기여도 : 30% 이상, 유지보수 기여도 : 100%
AI 가상실습실 포털 사이트는 경남 테크노 파크에 소속 된 대학생들이 좀 더 유연하게 인공지능 수업을 하기 위해 강의실을 생성 해주고 학생들에게 강의실을 사용 할 수 있게 제공 해주는 포털 사이트 입니다.
IAAS 클라우드 컴퓨팅 오픈 소스 openstack을 연계 하였고, 사용자들에게 가상환경에 맞는 인스턴스를 제공하는 기능을 구현 했습니다. 웹은 spring boot 로 구현하였고 RDB는 postgresql 를 사용 했습니다. 서버 개발은 웹 개발, openstack agent 개발을 나눠서 한 명씩 진행 하였으며, 제가 담당했던 업무는 웹 서버 개발 이였습니다.
현재는 해당 사이트의 전체적인 유지보수를 담당하고 있으며 프론트, 백엔드, agent 세개의 파트 모두 유지보수 하고 있습니다.
다음은 로그인 화면 입니다.
사이트의 대한 권한은 실습자와 관리자 두가지로 나뉩니다.
로그인 방식은 서버단에서 Spring Security JWT 를 활용 하여 구현 하였습니다.
백엔드에서 토큰을 발급하여 프론트에 전달 합니다.
프론트에서는 해당 토큰을 웹 스토리지에 저장 하여 보관합니다.
다음은 실습자가 실습실로 접근하여 터미널과 주피터(실습실)을 사용 할 수 있는 화면 입니다.
터미널로 접근 시 VM의 콘솔 화면이 새로운 창으로 뜹니다.
주피터(실습실)로 접근 시 VM에 설치 되어 있는 주피터로 접속 됩니다.
해당 주피터는 외부에서 접근 시 모든 VM에 외부 IP를 할당 해야 한다는 제약 조건이 있어 서버의 터널링을 통해 프록시 되어 매핑 된 포트로 접속 되게 됩니다.
다음은 관리자 화면 입니다.
관리자는 대시보드를 통하여 현재 Openstack의 하이퍼바이저 상태를 확인 할 수 있습니다.
agent에 하이퍼바이저의 통계 정보를 요청하여 가공 후 출력 합니다.
해당 페이지에서 실습자들이 신청 했던 예약 신청서를 관리 할 수 있습니다.
관리자가 생성 해도 된다고 판단이 되면 VM을 생성 할 수 있습니다.
VM 일괄 생성 기능이 포함 되어 있는데, 일괄 생성 시 현재 몇 개의 VM을 생성 했는지 확인을 위해 토스트 메세지로 출력 하고 있습니다.
VM 생성 퍼센트는 WebSocket을 통해 통신 되며, agent에 VM생성 요청 시 웹서버에 퍼센트가 전달 되며, 웹서버와 프론트는 STMOP 프로토콜로 통신합니다.
현재는 풀스택으로 전체 유지보수를 혼자서 진행 하고 있으며, 1차 개발 이후 vGPU 추가 요청으로 Openstack agent 에서 vGPU 사용 하는 로직과, 백엔드 동작 로직, 프론트 화면까지 모두 혼자 개발을 진행 하였습니다.
연계 시스템과 웹 동작의 전체적인 흐름에 대해 깊이 있게 이해하였으며, 사용자의 입장에서는 가장 간소화된 사용 방법, 관리자의 입장에서는 한 번에 확인 가능한 방법을 효과적으로 연구하였습니다.

CMP 솔루션 인증/인가 도입 및 구현

개발 기여도 : 40%~45%
CMP 솔루션에서는 사용자별로 적절한 테넌트 출력 요청이 늘어나고 있습니다.
기존에는 Openstack에서는 프로젝트 기준, VMWare에서는 클러스터 단위로 테넌트를 분리하여 보여주었지만, 사용자의 조직 권한에 따른 유연한 접근이 어려웠습니다.
이 문제를 해결하기 위해 백엔드 팀에서 일부 인원을 선정하여 인증 및 인가 문제에 대한 TF 팀을 구성하고 작업을 진행하게 되었습니다.
사용자는 4가지의 권한으로 나뉩니다.
시스템 관리자
CMP 관리자
Tab 관리자
일반 사용자
Tab은 멤버, 자원, 정책을 효율적으로 관리할 수 있도록 등록하는 기능을 제공합니다. Tab에 멤버와 자원이 등록되어 있어도, 해당 멤버와 자원이 정책에 등록되어 있지 않다면, 어떤 작업을 어떻게 수행할지 또는 어떤 멤버가 어떤 작업을 수행할지 결정할 수 없습니다. 그 결과, 인가되지 않았다고 판단되어 사용할 수 없게 됩니다.
시스템 관리자와 CMP 관리자는 모든 자원에 접근이 가능합니다.
Tab관리자는 모든 Tab에 접근이 가능합니다.
일반 사용자는 해당 사용자 및 조직에 속해 있는 탭에 인가 받은 권한에 의해 테넌트에 접근이 가능합니다.
저는 주로 자원 관련 작업에 집중하였고, 현재는 Openstack에 대한 자원만 등록 가능한 버전을 개발 중입니다.
CMP 백엔드에서 프론트로 전달되는 Openstack 관련 API를 모두 분석하여 권한이 부여된 데이터만 조회될 수 있게 수정하였습니다. 또한, 해당 정책에서 승인된 작업만 수행될 수 있도록 조정하였습니다.
또한 감사 기능을 추가 하여 사용자와 관리자가 내가 현재 어떤 자원에 인가 되어 있는지를 한눈에 볼 수 있게 하는 기능을 기획하고 개발 하였습니다.
이 업무를 진행하며, 라이프사이클은 사용자들에 입장에서 항상 생각하며 간편한 서비스를 만들기 위해서 노력 하였습니다.
하지만 기존 솔루션에 작업 되어 있던 API를 분석하며 유지보수가 용이한 코드를 짜고 만드는게 중요하다는 생각이 들었습니다. 처음엔 코드가 중복되어 있으면 유지보수가 어렵다고 생각했던거와는 다르게 너무 공통 모듈로 묶어서 사용하다보니 모듈을 커스텀 하기가 여간 까다로웠습니다.
또한 공통 모듈로 묶어있다보니 어떤 의도를 가지고 코드가 작성 되었는지 한눈에 파악이 어려웠습니다.
여러가지 제약사항으로 한번에 모두 바꾸기 어려웠지만 팀원들과 같이 소통과 협업 하면서 기존 API에서 필요 없는 컬럼을 지우고 응답 명세 공통화 등 리팩토링 작업을 하면서 좀 더 우아한 코드를 만들기 위해 최선을 다했습니다.

DBInc 클라우드 시스템 테스트 베드 구축

개발 기여도 : 30% 이상
DBInc에서 클라우드 시스템 테스트 베드를 설계하고 구축하는 동안, CMP 솔루션과 IAAS 시스템의 중요한 구성 요소인 VMWare의 네트워크 솔루션, NSX-T와의 연동을 진행 하였습니다.
기존 CMP 솔루션은 vSphere 기능의 일부만을 통합하여 사용하였기 때문에 사용자들이 VM에서 다양한 경험을 하지 못하였습니다.
따라서 NSX-T에서 제공 하고 있는 게이트웨이 방화벽, 로드밸런서 등 여러 네트워크 관련 기능들을 연동 하였습니다.
Feign 클라이언트를 활용하여 NSX-T에서 제공하는 API를 직접 호출, 데이터를 획득하였습니다.
SpringBatch와 Quartz 를 이용해서 일정 기간에 스케줄링 되어 데이터를 내부 DB에 저장하는 로직을 작성 하였습니다.
주로 세그먼트, 로드밸런싱, 네트워크 토폴로지 기능을 작업 하였으며, 이후에는 가상서버 생성, 삭제, 수정 시 수동으로 IP를 셋팅 하는 로직을 추가하는 작업을 진행 하였습니다.

4세대 지능형 나이스(NEIS) 모니터링 시스템 알림 매체 연동 및 이력 개발

CMP 솔루션에서 설정한 임계치를 초과하였을 경우 등록된 매체로 알림을 받는 기능은 필수적이라고 생각합니다.
기존에는 알림 매체의 이력 기능이 알람이 실행되어 매체로 전송된 후에 이력성 데이터를 로깅하는 것이 아니라, 실제 매체로부터 전송 정보를 가져와 결과를 보여주는 방식이었습니다. 그 결과, 일부 연동 매체에서 전송 정보를 제공하지 않는 경우, 해당 기능이 정상적으로 동작하지 않는 문제가 발생하였습니다.
따라서 CMP 솔루션의 역할은 이력성 데이터를 기록하는 형식으로 변경하면서, 매체를 효율적으로 등록하여 유연성을 최대한 활용하였습니다.

사내 솔루션 간 SSO 연동

사내에 A, B, C 세 가지의 내부 솔루션들이 운영되고 있습니다.
대부분의 사이트들이 A, B, C 모두 설치하여 사용함에 따라, SSO 로그인이 필요한 사이트들이 많아지게 되었습니다.
SSO 로그인을 구현하기 위해서는 각 솔루션의 계정 정보를 연동해야 하는데, 이를 위해 오픈소스인 keycloak을 사용하려 했으나 사이트 구축 기간에 맞추기가 어려웠습니다.
이에 대한 해결책으로, 로그인 JWT 토큰을 공유하여 로그인하는 방식으로 SSO 로그인 기능을 구현하였습니다.
솔루션 간의 비밀키 공유
1.
각 솔루션에 비밀키를 공유하고 보관합니다.
2.
A솔루션에 비밀키를 등록 합니다.
3.
해당 비밀키를 활용하여 JWT 토큰에 서명합니다.
JWT 토큰의 생성 및 서명 과정
1.
사용자가 A솔루션에 로그인합니다.
2.
A솔루션은 사용자의 인증 정보를 확인하고, 비밀 키를 사용해 사용자의 권한 정보를 포함한 JWT 토큰을 생성합니다. 그리고 아래와 같은 페이로드로 서명합니다.
3.
그 후, 사용자가 B.C 솔루션에 접속할 때, 이 토큰을 안전하게 전달합니다.
a.
a-1. B 솔루션에 접근하기 위해 새로운 창을 열고, POST 요청으로 받은 토큰 값을 헤더에 전달합니다. a-2. B 솔루션에서는 해당 토큰을 비밀키로 확인하고, 유효한 토큰인지 검증한 후 일회용 코드를 제공합니다. a-3. 받은 코드를 포함하여 B 솔루션에 GET 요청을 보냅니다. a-4. B 솔루션에서는 해당 코드가 유효한 요청에서 온 것인지 확인한 후, 내부적으로 로그인 처리를 합니다. a-5. A 솔루션에서 로그아웃할 때, B 솔루션에서도 로그아웃되어야 하므로 B 솔루션에 로그아웃 요청을 보냅니다.
b.
b-1. C솔루션에서는 발급 받은 토큰 값을 지정된 쿠키에 저장하여 전달합니다. b-2. 해당 토큰을 비밀키로 인증하여 유효한 토큰인지 확인합니다. b-3. 유효한 토큰이면 로그인 처리를 진행합니다. b-4. A솔루션에서 로그아웃 시, C솔루션에서도 로그아웃 되기 위해 저장된 쿠키를 삭제합니다.

슬롯 머신 게임 웹 클라이언트 개발

cocos2dx 게임 엔진을 사용하여 슬롯 머신 게임의 웹 클라이언트 개발을 진행하였습니다.
‘Lucky Bomb Slot’ 슬롯 머신 게임은 사용자가 처음 진입 시 게임의 로비에 진입 하며, 로비엔 여러개의 미니게임(슬롯 머신)으로 구성 된 구조로 되어 있었습니다.
주로 슬롯 머신의 클라이언트 개발을 진행 하였고, 필요에 따라 로비에서 이벤트성으로 누적 캐시 아이템 개발도 진행 하였습니다.
게임에서 사용자들의 비주얼적인 즐거움을 극대화하는 '파티클'이나 긴장감을 높이는 효과들을 철저히 연구하고 적용하였습니다. 사용자들에게 흥미롭고 잊지 못할 경험을 제공하기 위해 끊임없는 노력을 기울였습니다.

EMR, OCS 시스템 유지보수 및 개발

EMR(전자 의료 기록) 및 OCS(처방 전달 시스템) 시스템의 유지보수와 개발 업무를 수행하였습니다.
이에는 기존 시스템의 문제점을 파악하고 수정하는 유지보수 작업, 사용자의 필요에 맞는 새로운 기능을 추가하거나 기존 기능을 개선하는 개발 작업을 진행 하였습니다.
팀 내에 인원이 부족하여 담당 부서가 없었기 때문에 전체적인 병원 프로그램에 운영을 진행 하였습니다
콜센터 운영
청구심사 운영
원무과(외래/입원) 운영
한양방 진료과 운영
약국, 원외탕전원 운영
영양과 운영
간호과 운영
물리치료실 및 운동치료실 운영
영상의학과 운영
이 과정에서 전산의 전체 시스템의 구조를 이해하고, 문제를 해결하기 위한 최적의 방법을 찾아내는 능력을 기르게 되었습니다.

}