I LOVE TO PROGRAMING

I AM

image
안녕하세요,

저는 조연석 입니다.

9년차 .Net 개발자로 ERP 메뉴를 개발을 시작으로 프로그래밍에 입문했으며, 자사 프레임워크, 컨트롤 개발 및 유지보수를 주로 담당했습니다.

평소 게임개발에 관심이 있어서 공부하고 있을때, 타 부서에서 진행하던 정부지원 사업 경영 시뮬레이션 게임개발에 추천되어 주말엔 학원을 다니며 공부하여 프로 젝트를 성공적으로 마무리 시킨 경험이 있습니다. 그 당시 없는 기능을 만들면서 수 많은 에셋을 찾아보며 공부했던 경험은, 모든걸 직접 만들려던 습관에서 제 3자가 만들어놓은 검증된 좋은기술을 먼저 검토하자는 방향으로 개발마인드가 변화되었습니다. 그러한 결과 지금은 새로운 언어나 프로젝트에 대한 거부감보단, 원하는 기능을 어떤 기술을 사용하여 더 빠르고, 사용하기 쉽게 만들수 있을까에 대한 고민을 하는 편이며, 다양한 기술을 빠르게 배우고 적응 할 수 있게 되었습니다.


Education
강원대학교(~ 2012.02)

컴퓨터과학,경영학 복수전공

비트교육센터(~ 2012.11)

.Net 전문가 과정


Career
더존비즈온(2012.11 ~)

응용프로그래머


Programing Skills
.Net C# WinForm
Unity
Blazor
Els, Kibana, Linux, Nginx, JS, Packaging, OpenXml...

Employment history


WHAT CAN I DO

.Net5

.Net WinForm을 사용하여 다양한 윈도우 응용프로그램 개발이 가능합니다.

Unity

유니티를 사용하여 멀티플랫폼으로 3D앱을 개발 가능합니다.

Blazor

Blazor를 사용하여 Client-Side(WASM) 및 Server-Side 앱 개발이 가능하며, Nginx를 이용한 웹서버 구축이 가능합니다.

Monitering

ElasticSearch 와 Kibana를 사용한 로그시스템 구축 및 APM을 적용한 성능측정 및 모니터링을 할 수 있습니다.

Unlimited

할 수 없는것은 없습니다. 단지 시간이 얼마나 필요한가의 문제일 뿐 입니다.


WHO AM I

100% 일치하다고 할수는 없지만, 객관적인 지표로서 설명이 가능하다고 생각합니다.


SOME OF WORK

[2021] OpenAPI를 이용한 Xamarin Android 앱 개발

개발배경

닷넷에서 Maiu(Multi-platform App UI)가 출시된다고 해서 샘플 프로젝트를 받아서 테스트해본 결과, 아직 프리뷰 버전이라서 아직 테스트 및 학습하기에 부족하다고 판단되었습니다. 그래도 결국은 하나로 통합될거라 생각되어 Maui의 뿌리가 되는 Xamarin을 알아두면 나중에 도움될듯 하여 공부를 하던중에 평소 지인이 요청했던 앱을 개발하게 되었습니다. 


프로젝트설명

- 유기농업자재 목록을 조회
- 정부 사이트에 있는 내용(OpenAPI)
- 고령층이 주로 사용하기에 간단하고 큰 UI


개발후기
간단한 앱을 만들어서 그런지 장점보단 단점만 보였습니다. 휴대폰의 내장된 디바이스기능을 이용하지 않을 거라면 굳이 Xamarin을 사용할 필요 없이, Unity로 만드는 편이 더 낫습니다.

- 원하는 디자인을 만들기 위해서 플랫폼 별로 렌더를 새로 만들어야 합니다.
- 기본 용량이 큽니다. 
- 특별히 성능이 빠르다는 느낌도 없습니다.
- 단순 페이지 전환 애니메이션도 생각보다 부드럽게 동작하지 않습니다.

Maui에서는 얼마나 변경될지 모르겠지만, 현재로서는 kotln이나 flutter  를 사용하는게 더 나은듯 합니다. 



[2015~ ]개인 제작중인 게임..

장르 : 로그라이크

장르선택이유
1. 개인적으로 좋아하는 장르.
2. 매니아층 보유.
3. 수익성 문제로 게임회사에서 투자를 안함. (하지만 개인단위라면??)
4. 즉 장르가 겹쳐서 경쟁에서 밀릴 가능성이 전무.

개발을 진행하며서..
- 던전 플레이 뼈대 생성 - 랜덤 던전생성, 실시간 턴이동, 마법, 애니메이션 등등
기본 던전 플레이 뼈대가 생성되니 다 만든것 처럼 느껴졌는데.. 이제부터가 시작인걸 그때는 알지 못했다.

스토리도 좀 있으면 좋겠네?
- 월드 맵은 크고 다양하게(마을, 농장, 언덕, 사막, 성, 숲, 전초기지)
- 회사다니며 짬짬히 맵만드는데 1년 경과(맵 디자인이 개발보다 힘들구나...)
- 맵이 커진만큼 생각해야 될 스토리 구성이 많아짐

자 이제 맵도 대충 다 만들었고 뭐가 남았지??
- 각종 무기 캐릭터 애니메이션
- 던전 레벨디자인
- 상점, 인벤토리
- 웹서버, DB서버

등...... 
(시간이 부족해.....)

결론
프로젝트 축소
뼈대는 어차피 공통이니 프리퀄 형식으로 간단하게 개발로 목표 변경
맵을 1/100 로 축소시켜서 만든 후 개발중...

URP 변경

[2021] Promethues & Grafana 를 이용한 서버 모니터링 구축


개발배경
회사에서 운영중인 원격프로그램의 서버가 증성되면서 관리가 힘들어졌기 때문에 , 실시간으로 서버의 상태를 모니터링 해서 장애대응할 필요가 생겼습니다. 원래는 익숙한 Elastic + kibana를 이용할 생각이여있지만 이사님께서 지나가는 말로 프로메테우스를 언급하셨기에, 나중에 비교해서 말씀드리기 위해 프로메테우스로 진행했습니다. 

진행해보니 둘다 장단점이 있었는데 확실히 Elastic보다는 학습난이도도 낮고, 사용하기도 더 편리해서 생각보다 빨리 구현할 수 있었습니다. 

프로젝트설명
- DB 트랜젝션 모니터링
- WebService 모니터링
- 시스템 상태, 사용량 모니터링
- 장애발생시 회사 메신져로 알리기 위한 웹서비스 개발

담당업무
- 단독개발

사용기술
Prometheus, Grafana, Blazor, Docker

운영하면서..
모니터링 대상서버에서 수집해오는 형태이기 때문에, 서버를 여러대 늘리거나, 메인이되는 Prometeheus 서버를 변경하는데 어려움이 없었고, 장애 알림을 설정하는것도 간단해서 관리하는데 힘이들지 않았습니다. 단순 시스템 Metric을 모니터링하는 것 뿐이라면 확실히 Elastic보다는 좋은 듯 합니다. 그러나 애플레케이션에서 발생하는 정보들을 수집하는 방법이 번거롭기 때문에 개발&업데이트가 진행되는 구조의 서버를 관리한다면 다른 솔루션을 사용하는것이 더 좋을듯합니다. Prometheus는 안정적으로 변화가 없는 시스템을 모니터링하는쪽이 더 적합한듯한 느낌이 들었습니다. 




 

[2021] PostgreSQL Streaming Replication

 
개발배경
기존 서비스되고 있던 원격프로그램 DB가 매일 수동백업이 이뤄지고 있는것을 보안하기 위해서 실시간 백업을 적용기능 개발에 투입되었습니다. 레퍼런스를 찾아보니 간단하게 구현가능할거로 생각되었지만, 현재 DB시스템이 윈도우 환경에서 동작하고 있었기 때문에 Pgpool의 기능을 사용할수 없었고, 리눅스서버에 Pgpool을 두어 프록시로 사용하고, 윈도우용 로컬 서버를 중간에 두어서 프록시 서버와 연동을 시켰습니다. 

프로젝트 설명
- Master Slave 이중화 구현
- Master 장애 발생시 Slave로 자동 Faliover 기능 구현
- 장애 발생시 알림기능 추가
- 관리용 웹페이지 추가


담당업무
- 사전조사, 구현 및 테스트, 실무자에게 리뷰 및 구축 방법 메뉴얼 전달.

사용기술
- PostgreSQL, pgpool, Docker ,Net5, Blazor

개발이슈사항
실제 해당제품 개발자는 별도로 있었기 때문에, 테스트 서버구축해서 리뷰 및 메뉴얼을 전달하는 것이 주 목표였습니다. 
운영서버에는 실제 담당자가 새로 구축해야 하고, 윈도우환경이라 웹서버가 실행되야 했기 때문에, 오히려 관리용 웹페이지를 생성해서 원클릭으로 환경구성을 가능하게 만들수가 있었습니다. 

[2020] ElasticSearch및 Kibana를 이용한 모니터링 시스템구축

개발배경
ReportViewer를 웹용으로 개발을 하게 되면서 다수의 클라이언트나 서버에서 발생하는 정보들을 통합해서 , 오류 확인 및 통계 성능측정을 해야할 필요가 생겼습니다. 기존에 NLog 등을 이용해서 어플리케이션 단위로는 확인했었지만 좀더 체계적이고 관리가능한 프레임워크를 이용하고 싶어서 ElasticSearch 와 Kibana를 선택하게 되었습니다. 

프로젝트설명
- 모든 로그를 Elastic에 기록
- 각 스텝별 진행상태 및 수행시간 측정
- 각 서버별 시스템 자원상태 분석
- 유저별 접속 정보 통계 분석

담당업무
- 단독개발

사용기술
- ElasticSearch, Kibana, Metricbeat, Apm






  

[2020] Blazor를 활용한 리포트뷰어

  



개발배경

.Net Framework 버전으로 개발되었던 인쇄모듈은 윈도우에서만 동작되고, 설치를 필요로 했기 대문에 이 단점을 해결한 웹버전으로 개발할 필요성이 생기게 되었습니다. 
그래서 후보군으로 생각했던 HTML5 Canvas, Typescript, Unity, Blazor 의 프로토 타입을 개발해보고 최종적으로 가장 합리적인 Blazor를 통하여 개발을 진행하게 되었습니다. 

각 모듈별 채택되지 않은 원인
HTML5 Canvas - 렌더링 품질문제(폰트 확대시 계단현상발생).
TypeScript - C# 스크립트를 동적으로 실행할 방법이 없음.
Unity - 브라우저 인쇄시 현재 렌더된 화면만 인쇄가능.


담당업무
- JS , CSS를 제외한 BackEnd 서버 개발, Linux 셋팅, Nginx 웹서버, 로드밸런싱 구성
- 현재 유지보수 단계에서는 단독으로 담당중.


사용기술
- Net5, Blazor, Nginx, Docker

개발이슈사항
- 막연히 클라이언트로 실행되는 WASM이 성능상 이점이 있을것으로 생각했으나, 현재(2020년) Blazor를 통한 WASM은 싱글스레드로 동작되어 성능이 낮은 문제가 있었습니다. 
- 더 큰 문제는 WASM에서 브라우저로 데이터를 전달하는 과정에서 Json Serialize 시간이 1MB 당 1초정도로 오래 걸리는 문제가 있었습니다. .Net 버전이 증가함에 따라 속도 향샹이 있었지만 서버처럼 1/100로 속도가 단축되지 않는이상 의미가 없다고 생각되어 Server-Side로 변경을 진행했습니다. 
   (앞으로 기술 발전에따라 성능이 개선될거라 생각되어 양쪽 버전 전부 동작되게 소스를 관리중입니다.)
- Server Side로 작업을 진행하니 다중 사용자에 의한 성능 부하 발생이라는 문제점이 생겨나게 되어 프록시서버를 통한 로드밸런싱 및 다수의 서버에 일관성있는 배포를 위한 도커환경을 구성하게 되었습니다. 

[2020] Unity를 활용한 리포트뷰어

 



개발배경

기존 인쇄 모듈을 웹버전으로 전환하기 위해서 진행했던 플랫폼 중 하나입니다. 
유니티를 이용해 WebGL을 사용하면 고성능에 고화질 렌더링 , 부드러운 애니메이션처리가 가능하기 장점이 있고, 기존 C# 모듈을 재사용 할 수 있기 때문에 프로토타입 개발을 진행했습니다.


담당업무
- 전체

사용기술
- Unity

프로토타입 개발 결과
일반적인 WASM은 지원안되는 멀티스레딩이 가능하여 고성능의 렌더가 가능하고, 어느 플랫폼이나 동일한 화면을 보여줄수 있다는 장점이 있으나, 
가장 큰 기능인 브라우저를 통한 인쇄는 현재 렌더된 화면을 인쇄하기 때문에 원하는 형태로 직접적인 인쇄는 불가능하고, PDF 다운로드 형태로만 제공해야하는 큰 단점이 있어서 채택을 할수가 없었습니다. 미리보기 기능만 제공한다면 이것보다 좋은 플랫폼은 없을거라 생각됩니다. 

그 이외의 단점으로라면 일반적인 웹 버전보다 큰 배포 용량으로 인한 로딩시간의 문제가 있고,
다국어 지원시 PC에 각 폰트가 설치되지 않아도 되는 장점이 있지만, 각 언어별로 만드는 폰트가 커서 역시 배포용량이 늘어나는 단점도 있습니다. 


(외국 무료 호스팅을 사용하기 때문에 로딩시간이 오래 걸릴 수 있습니다.)
(좌측 하단 테스트 버튼 2개에 기능이 할당되어 있습니다.)

Start Work With Me

Contact Us
조연석
010-4180-5216
강원도 춘천