가장 오랜시간 동안 다루어온 언어가 바로 C/C++ 입니다.
그렇기 때문에 가장 자연스럽고, 가장 자신있습니다.
C/C++ 언어에 대한 자신감은 다른 언어를 배우거나 활용할 때 두려움을 없애는데 도움을 줍니다.
프로그래머는 내가 가장 잘 아는 것으로만 코딩할 수는 없습니다. 상황에 따라 내가 해보지 않은 것도 할 수 있어야 합니다.
그럴 때마다 이정도는 나도 금방 할 수 있을거야. 할 수 있어. 라는 근거없는 자신감으로 도전할 수 있습니다.
지금까지 그래왔듯이 앞으로도 그럴 수 있습니다.
C/C++ 언어를 기반으로 하는 코딩은 다양한 프레임워크 또는 라이브러리의 도움을 받을 수 있습니다.
고전적이긴 하지만, MFC(Microsoft Foundation Class library) 가 있습니다.
그 다음에는 STL(Standard Template Library) 가 있습니다.
가장 작은 크기로 가장 빠른 성능의 프로그램을 만들기 위해서 win32 로 코딩하기도 합니다.
C/C++ 언어를 잘 다루기 때문에 리눅스용 에이전트 개발을 경험할 수도 있었습니다. GTKmm 과 Glade 를 이용하여 엠오피스 리눅스용 에이전트 개발을 한 바 있습니다.
Java 라는 언어가 탄생할 때, 자바가상머신(JVM)만 있다면 어느 플랫폼의 기기에서든 실행 가능한 코드를 작성할 수 있게 한다는 개념이 있었습니다.
C/C++ 언어로 코딩한 바이너리는 플랫폼 기기가 달라지면 코드가 달라져야 할 수도 있고, 플랫폼에 맞춰서 새롭게 컴파일을 해야 하는 단점이 있습니다.
현재는 Java 언어가 구글 안드로이드, 웹 등에서 각광을 받고 있습니다.
C++ 이라는 언어가 객체지향형(Objective) 언어라서 이미 객체지향 특성을 잘 알고 있는 터라 Java 언어를 배우는데 그리 어렵지 않았습니다.
C++ 언어의 역사가 깊어질수록 다양한 라이브러리가 탄생하는 것과 마찬가지로 Java 언어를 사용한 개발도 방대한 라이브러리의 도움을 받을 수 있습니다.
Java 언어의 객체지향적인 특성의 재미를 한껏 느끼며 코딩할 수 있습니다.
요즘에는 안드로이드 프로젝트와 Spring Boot 프로젝트에서 많이 사용하고 있습니다.
C# 언어의 탄생 배경에는 Java 가 있습니다.
Java 처럼 모든 기기에 이식 가능한 프로그램을 코드변경없이 구현한다는 모토였지만, 지금 현재는 Java 만큼 성과를 이루지 못한게 아닌가라는 평가입니다.
C# 언어의 가장 큰 장점은 Microsoft 가 지원한다는 것입니다. WinForm 프로그래밍은 정말 조금만 공부해도 쉽게 구현할 수 있습니다.
Microsoft 가 지원하는 방대한 C# 라이브러리를 사용하면 정말 편리하게 코딩할 수가 있습니다.
웹 프로그래밍도 데이터베이스 프로그래밍도 아주 편리합니다.
근래에는 다른 언어들(Kotlin)이 버전업되면서 지원하는 편리한 문법을 거의 흡수하고 있습니다. C# 에서 이런 문법을 알면 다른 언어에서도 그런 문법을 사용할 수 있으며, 다른 언어에서 그런 문법을 알면 C# 에서도 이런 문법을 사용할 수 있을 정도로 매우 흡사합니다.
WinForm 프로그래밍 뿐만 아니라 Rest API 를 작성하는 BackEnd 프로그래밍도 경험하였습니다.
아이폰이 우리나라에 출시된 것이 2009년입니다. 이 당시 아이폰용 앱을 개발하기 위해서는 MacBook 이 필수였고 XCode 개발 프로그램을 사용하여 Objective C 언어를 사용해야만 했습니다.
저는 해킨토시를 만들어서 아이폰 프로그래밍을 배우기 시작했고, 아주 재미있게 Objective C 언어를 배웠습니다.
C/C++ 언어에 익숙해 있었기 때문에 Objective C 라는 언어의 로직이 그리 어렵지 않았던게 아닌가 생각합니다.
iOS 앱 개발뿐만 아니라 macOS 용 애플리케이션을 만들 때에도 사용합니다.
대표적인 iOS 앱으로는 증권통, DevTong 이 있고, macOS 용 애플리케이션으로는 엠오피스 macOS 용 에이전트가 있습니다.
iOS 용 앱을 개발하는 언어로 Swift 도 있는데, Swift 는 학습정도만 하였고, 실무에서 사용해본 일은 아직 없습니다.
데이터베이스 프로그래밍 기술은 요즘 너무 당연하게 가지고 있어야 할 기술이 아닌가 합니다.
프로그래머 초창기부터 델파이 데이터베이스 완벽가이드 저서를 집필할 정도로 데이터베이스에 관심이 아주 많았습니다.
그 이후에 경험한 프로젝트는 거의 데이터베이스를 직접 다루었습니다.
Oracle, MS SQL Server, PostgreSQL, MySQL 등 모든 RDBMS 를 다루었습니다.
프로그래밍, 설계 뿐만 아니라, 튜닝의 역량도 갖추고 있습니다.
대용량 데이터베이스 프로그래밍에서 필요로 하는 기술과 경험도 갖추고 있습니다.
한때 각광받던 JSP 는 웹 FrontEnd 개발의 주요 언어로 사용되었습니다.
다양한 웹 개발 프로젝트에서 JSP 를 주력으로 사용한 바 있습니다.
PHP 는 국내보다도 외국에서 인기가 많은 웹 FrontEnd 개발 언어라고 알고 있습니다.
프로그램 초창기에 APM(Apache + PHP + MySQL) 로 서버를 구성하던 시기에 가장 많이, 편안하게 사용했던 웹 FrontEnd 언어입니다.
최근에는 PHP 를 사용하지 않아서 업그레이드된 언어의 특징은 잘 파악하고 있지 못하지만, 분석은 가능합니다.
프로그래머 초창기에 ASP 를 이용한 웹 프로그램을 개발한 경험이 있어서 ASP.NET 역시 쉽게 사용할 수 있었습니다.
C# 과 함께 ASP.NET 을 이용한 웹 프로젝트를 다수 경험하였기 때문에 ASP.NET 만의 특징을 잘 알고 있습니다.
웹 FrontEnd 프로그램 개발을 하려면 빼놓을 수 없는 것이 JavaScript 입니다.
웹 프로젝트를 수행하면서 다양한 자바스크립트 프로그래밍을 한 바 있습니다.
순수 JavaScript 보다는 조금 더 사용하기 편한 jQuery 도 잘 사용합니다.
네이티브 프로그램 프로그래밍이든, 웹 프로그램 프로그래밍이든 개발을 편하게 하려면 적절한 IDE Tool 을 사용해야 합니다.
윈도우 응용 프로그램을 개발하는 경우에는 뭐니뭐니해도 Visual Studio 가 제일 좋습니다.
리눅스용 프로그램을 개발한 프로젝트에서는 NetBeans, Glade 를 사용했습니다.
iOS, macOS 프로그램을 개발하는 경우에는 Xcode 가 정답이지요.
웹 프로그램을 개발하는 경우에는 Eclipse, IntelliJ 를 사용합니다.
안드로이드 응용 프로그램을 개발하는 경우 Eclipse 에서 Android Studio 로 전환되었습니다.
공통 프로젝트를 하는 경우에는 소스형상관리가 무엇보다 중요합니다.
프로그래머 초창기에 SourceSafe 를 쓰기 시작하면서 개인 프로젝트에서도 소스형상관리 툴을 사용하는 것이 습관이 되었습니다.
CVS, SVN 을 거쳐 git 에 이르기까지 모든 프로젝트는 형상관리부터 시작하였습니다.
근래에는 GitLab, GitHub 를 이용하여 협업을 진행하고 있습니다.
응용프로그램을 개발하기 위해서는 OS에 대해서 더 잘 알고 있어야 합니다.
지금까지 경험해본 OS 는 Windows, macOS, Linux 가 있습니다.
특히 Linux 는 Debian 계열의 CentOS, Ubuntu 뿐만 아니라, tmaxOS, 구름OS, 하모니카OS 를 경험해 보았으며,
서버시스템(웹서버, 파일서버, 메일서버, git서버, DB서버 등)을 구성하고 운영한 경험도 가지고 있습니다.
가상화OS 의 하나인 Vmware ESXi 를 이용하여 여러 종류의 서버들을 구성하고 운영하고 있습니다.
방화벽 솔루션 pfSense
web 서버 (apache, nginx)
wiki 서버 (dokuwiki)
blog 서버 (wordpress)
소스형상관리 서버 (gitlab)
파일 서버 (ownCloud)
DB 서버 (PostgreSQL)
모니터링 서버 (zabbix)
배포 서버 (jenkins)
특히 여러 대의 웹서버를 HAProxy 로 구성하여 서비스중입니다.
기술블로그를 운영하고 있습니다.
SmartFormDe 를 이용한 MTS 화면 개발 업무를 수행하였습니다.
Lua Script 를 자유자재로 다룰 수 있습니다.
EC2 인스턴스를 생성하고,
Ubuntu 서버를 구성하여 Apache, Tomcat 등의 웹서비스 엔진을 설치 운영하는 능력을 보유하고 있습니다.
S3 에 스토리지를 구성하여 업로드/다운로드 작업을 수행하고,
SES 를 이용한 메일 발송 서비스를 구현하는 능력을 보유하고 있습니다.
RDS 를 이용한 데이터베이스 관리 능력을 보유하고 있습니다.
IAM 을 이용한 사용자계정의 관리 능력을 보유하고 있습니다.
SpringBoot 를 이용한 BackEnd, FrontEnd 개발 능력을 보유하고 있습니다.
특히 FrontEnd 개발시 Thymeleaf, Bootstrap 을 사용한 화면 개발 능력을 보유하고 있습니다.
BackEnd 에서 RestAPI 를 이용한 데이터 통신 개발 능력을 보유하고 있습니다.