나의 이력은 Velog와 닮아 있다.
Velog는 velopert님이 만든 https://velopert.com/이 그 시작이였다.
처음에는 PHP CMS인 워드프레스(Wordpress)를 이용해 블로그를 운영하였지만 불편함이 있었고 이를 해소하려다 차라리 새로운 블로그 플랫폼을 개발하기로 한다.
그것이 바로 이 플랫폼 Velog인 것이다.
Velog 서비스 공개 및 계획 (https://velopert.com/3704)
나는 18년도에 스타트업을 시작으로 19년부터 본격적인 웹사이트 개발에 뛰어들게 되었다.
주니어 개발자로 제작이 가능한 웹사이트들은 규모가 작은 영세한 곳들이기 때문에 호스팅 및 제작 비용이 가장 합리적이여야 하는 것이 기술 선택의 제1요소 였다. LAMP(Linux, Apache, MySQL or MariaDB, PHP)는 호스팅되는 곳이 많고 무료로 구성되어 있기 때문에 반박의 여지가 없는 훌륭한 선택지였다.
당시 라라벨의 인기가 뛰어나진 않았지만 충분히 훌륭한 지표들이 나타나 있었고 준수한 성능과 범용성으로 전천후로 사용되기 좋다고 판단되었다. 그러나 호스팅이 문제가 되었다. 일반적으로 국내 웹호스팅 환경의 몇가지 특징이 존재했는데 그중 가장 치명적이였던 것이 컴포저(Composer)를 지원하지 않는 다는 것이다. 컴포저가 없다는 것은 매우 치명적이였다. 이를 해결하기 위한 여러작업들이 존재하였지만 CLI로 구동되는 버전은 PHP 7.0.0으로 고정되는 등 계속해서 발목을 잡게 된다. 그리하여 선정하게 된 것이 오래되었지만 여전히 많은 사랑을 받고 있는 CI라 부르는 코드이그나이터(CodeIgniter)였다.
PHP 프레임워크 CodeIgniter(CI)를 활용해 MVC 모델을 지키는 웹사이트를 처음으로 제작하게되었다. 게시판을 만들고 NOT IN Query로 Pagination을 구성하고 첫 개발 당시 참 많은 시간이 들었다. 개발은 항상 첫 개발이 많이 걸린다. 하지만 그 뒤로는 향상과 성장으로 언제나 향상되어 간다. 나는 그게 좋다. 언제나 앞으로 나아간다는 것!
사내 개발자는 오로지 나뿐이였다. 웹퍼블리싱까지 도맡아 했지만 웹디자이너가 웹퍼블리셔로 전향하게 되어 프론트단에서 벗어날 수 있게 되었다. 그럼에도 불구하고 일이 너무 많다. 나는 개발자 이자 대표였고 일을 받기 위해 마케팅을 하고 사람들을 만나러 다녀야 했고 클라이언트와의 미팅, 주기적으로 발생하는 국가 퀘스트인 세무와 회계까지 처리해야 했다.
프론트를 내가 담당하지 않는다고해서 업무가 사라지는 것은 아니다. 프로젝트 메니징을 하기 위해서는 전 과정에 참여해야 하고 조율해야 한다. 밑바닥에서 제작해야 하는 날코딩 방식의 한계가 찾아온다. 클라이언트가 생각하는 '간단한' 기능을 구현하기 위해서는 너무 많은 시간이 필요하다.
우리는 그렇게 CMS인 워드프레스를 도입하게 된다. 여기서부터 Velog와의 차이가 있다. Velog는 이전 프로젝트에서 워드프레스를 깊게 들어가야 하는 순간 다른 노선으로 옮겨 새로운 개발 플랫폼을 제작하게 된 것 이지만 우리는 워드프레스를 더욱 깊이 들어가기로 하였다. 물론 처음부터 완벽하게 시작한 것은 아니다. 처음에는 테마와 플러그인에 종속되어 서드파티와 라이브러리들이 치덕치덕 붙어 있는 흡사 키메라와 같은 웹사이트가 만들어졌다. 점점 워드프레스 코어 구조를 파악하며 테마를 제작하고 보안 사항을 늘리고 기능들을 추가하게 된다. Wordpress가 제공하는 API외에도 PHP 함수를 온전히 사용할 수 있다는 장점도 있었다. 이후에는 한국형 게시판 오픈소스 Kboard를 수정해 커스텀 스킨을 제작하고 적용하며 점점 더 만족도 높은 웹사이트 제작에 힘썻다.
빠르게 쳐내야 하는 프로젝트 공장과 많은 것들을 담당하는 대표자(CEO) 생활은 개발자로서 성장에 한계가 있었고 이는 다른 것으로 해소될 수 없는, 갈증과도 같은 것이었다. 발전하지 않는 사수 아래 직원들이 발전할 수 있을지 의문이었고 직원들을 붙잡고 있는 것마저 그들의 기회를 빼앗는 것이 될 수 있었다. 모두가 모여 사내 회의를 열게 되었고 그 결과 모두의 성장을 위해 지금까지의 오랜 여정을 멈추게 된다.
현재 재도약을 위해 개발자로서의 갈증들을 해소하며 성장해 나가고 있다. 삶 그 어느 때보다도 활기차고 살아 있음을 느낀다. 다양한 디자인 패턴들에 대해 살펴보고 적용해보며 조금 더 구조적인 설계를 하고 싶다! 전통적인 방식으로 주고받았던 요청을 REST API를 통해 더욱 RESTful하도록 인터페이스를 설계하고 구현하고 싶다.
동작하는 코드를 최대한 빠르게 생산해 내는 것이 우선 과제인 환경 속에서 만들어진 코드들에는 if/else, switch 문이 난무하고 있었고, 한 파일에 비즈니스 로직과 서비스 로직이 함께 있어 책임과 역할이 다른 코드들이 뒤섞여 있었다. 이러한 개발 방식은 개발자로서의 성장도 멈춘 것 같았다. 분명 나아가고 있음에도 그동안 생산 해온 코드들이 부끄러웠다. 절차 지향적인 코드들에서 벗어나 객체로 구분하여 구조적으로 만들고 싶었고 MVC가 명확한 개발에 항상 목말라 있었다.
물론 PHP만으로도 OOP 적 설계와 프레임워크를 통한 MVC 모두 가능하다. 그러나 Java Spring만큼 체계적이고 안정적이라는 느낌은 받지 못했다. Java Spring은 대규모 커뮤니티 풀을 통해 끊임없는 성장과 고민이 가능하고 유사 언어가 많아 추후 작업 환경 변화에 쉽게 대응할 수 있어 학습 비용이 줄어드는 장점도 있다. (플루터도 관심있게 지켜보는 中)
Java Spring을 살펴보며 느낀 거대한 감정을 표현할 길이 없다. ‘이것이 엔터프라이즈 프레임워크구나!’를 절실히 느낄 수 있었다. REST Controller에서 사용자에게 값을 받아 올 때 Validation부터 Sanitation까지 수행하는 과정에서 중복되는 작업이 지속해서 발생하게 된다. 너무나도 유사한 작업을 Spring에서는 Annotation을 이용하여 직관적이고 예쁘게 작업할 수 있다는 게 참 좋았다. 그 외에도 직접 신경 쓰며 구현해 왔어야 할 세세한 부분들을 프레임워크가 기본적으로 제공하는 것은 마치 체계적이고 친절한, 멋진 사수를 둔 것만 같다.
Fastcampus - 한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지를 수강 중이다. 강의에는 Validation, Exception, Filter, Interceptor, Rest Template와 JUnit을 통한 테스트, Swagger를 통한 API 공개 등 스프링 부트에 대한 기본적인 사항들부터 안정적인 서비스를 위한 Spring DATA와 Security, 대규모 서비스를 위한 스프링 Cloud, Batch 등이 포함되어 있다. 이러한 학습 방법을 양반식이라 부르지만 선구자들의 지식을 전수 받는 것은 인간이 가진 가장 큰 무기라 생각한다.
Velog는 워드프레스로 시작하여 개발자 블로그 플랫폼으로 자리매김 하였다.
나는 워드프레스로 시작하여 Java&Spring 개발자로 나아가고 있다. 나의 미래도 Velog와 같이 멋진 팀원들과 좋은 서비스를 위해 머리 맞닿으며 정진해 나가고 싶다!
이 곳을 통해 그 여정과 여정 속에서 익힌 정보들을 가감없이 공유하려한다.