* 본 사이트는 라라벨 11 (Vite), PHP 8.2, Tailwind를 기본으로 제작되었습니다.

* 도커 컨테이너 환경에서 구동되며 Ubuntu 22, Nginx 프록시 서버로 호스팅(https) 합니다.

프로필

이름: 류지훈

나이: 1980년 생

email: ryuwebd@naver.com

1:1 오픈채팅

Good

PHP

2012년 부터 본격적으로 쓰기 시작했다. 요즘 같은 시대에 아직도 PHP인가 싶겠지만 지금까지 나를 먹여주고 재워주고 살려 준 은혜로운 개발 언어라서 섣불리 버릴 수 없었다. 게다가 AAA급 서비스나 자사 운영 서비스가 아닌 이상 웹호스팅에서 구동할 수 있는 거의 유일한 언어이기 때문에 중소기업 외주, 랜딩페이지 제작 등 여러모로 쓸모가 많아 여전히 PHP로 개발하고 있다.

MariaDB

PHP의 경우 찰떡궁합 DB가 MySQL이기 때문에 PHP를 시작한 시점부터 MySQL을 썼다. 그러다 MariaDB가 나왔고 지금은 MariaDB를 활용한다. 사실 둘의 차이는 잘 모른다. "왜 모르냐?" 할 수 있지만 레이서가 자동차 엔진의 세세한 기능이나 성능까지 알 필요는 없다고 생각한다. 그 정도의 서비스 수준이라면 DBA가 필요할테니까. 나의 수준과 경력에서는 뭘 써도 비슷했지만 어찌됐든 공인된 오픈소스는 MariaDB이기 때문에 쓴다.

코드이그나이터3

2012년 중국 웹게임 플랫폼을 만들면서 접한게 계기가 되어 지금도 쓰고 있다. (공식 지원은 이미 생명을 다했다) 주의할 점은 4가 아닌 3다. 위의 맥락과 비슷한데 웹호스팅에서 FTP 파일 전송 방식으로 심플하게 운용이 가능한 PHP 프레임워크는 코드이크나이터3기 때문이다.

라라벨

코드이그나이터4와 라라벨과의 전쟁에서 코드이그나이터가 패배(?)함을 보고 라라벨로 환승했다. 2020년 7버전부터 쓰기 시작해 11버전까지 왔다. 9버전부터 Vite 번들링을 지원하는데 러닝 커브가 좀 있긴 하지만 로컬 개발시 속도면에서 확실한 차이가 난다. 국내에서는 인지도가 확 떨어진 느낌인데 9버전까지 활발하게 이루어지던 한글번역이 더는 이루어지지 않고 있다. 가끔은 굳이 PHP를 이렇게까지 무거운 프레임워크를 써야 하는 생각도 들기는 하지만 표준화된 관리 이슈 문제도 있고 더는 스파게티 코드 양산소라는 오명도 듣기 싫어 PHP=라라벨 이라고 생각한다.

도커

2019년 도커를 접하고 '웹 세상에 은총이 내려왔다'라는 생각이 들 정도로 도커는 나에게 있어 개발의 사고방식을 바꿔준 고마운 존재다. 로컬에서 개발 환경 맞추고 프로덕트 환경에서 다시 맞추기 위해 서버 셋팅 문서를 서비스마다 만들던 수고가 이제는 완전히 사라지게 됐다. 하지만 라이브 서비스에 도커 도입을 꺼리는 회사도 여전히 존재하고 대형 서비스에서 어떻게 활용하는지 겪어본 바가 없어 이 부분은 경험해 보면 좋을 것 같다.

So So

JavaScript

웹 개발에서 자바스크립트는 사실상 뺄 수 없는 존재지만 개인적으로 나는 자바스크립트를 그렇게 좋아하지 않는다. 브라우저를 넘어 서버까지 확장했으니 자유롭다못해 우주까지 넘어간 언어가 자바스크립트라 생각한다. 게다가 현대의 프론트엔드 환경에서 자바스크립트의 활용도가 훨씬 높아졌는데 개인적으로 피로도가 너무 상승해 "있으니까 써야한다"의 느낌으로 쓸 뿐이다. 그래서 라라벨과 같이 전통적인 SSR 환경인 경우 JQuery를 활용하는 편이다. 어차피 리액트와 같은 CSR 환경은 대안이 없기에 기조에 맞춰 쓴다.

퍼블리싱

'CSS is Awesome'이라는 자조적 문구가 절실하게 와닿지만 소규모 회사에서 이것저것 하다보니 퍼블리싱도 하게됐다. 간단한 웹사이트는 혼자 만드는 편이다. 리액트 체계의 프론트엔드로 오면서 퍼블리싱도 예전과는 많이 다르다는 걸 느낀다. 특히 세계 적으로 Tailwind 활용도가 높아졌는데 Bootstrap파였던 나는 Tailwind로 넘어 온 게 그리 오래되지는 않았다. 하지만 역시 퍼블리싱은 전문 퍼블리셔다 해야한다.

파이썬

'난 자바스크립트로는 절대 서버를 만들지 않겠다!'를 충족한 언어가 파이썬이었다. 사실 그 이외의 이유는 없다. 서버는 PHP로도 충분히 만들 수 있다. 하지만 요즘에는 글로벌 서비스 API지원이 자바스크립트 or 파이썬 구도이기 때문에 자바스크립트가 싫다면? 파이썬 해야 한다. 그래서 PHP로 개발할 수 없는 백엔드는 파이썬을 활용하고 있다. 파이썬도 프레임워크 전쟁 후 몇 선택지로 나눠졌는데 FastAPI가 좋아보여 선택했다. 실제 이름대로 Fast하긴 하다. 단, 개발하는 내 마음은 Fast하지는 않다. 없는 기능도 있고 제약도 있고... 특히 ORM인 SqlAlchemy는 좀 유기적으로 돌아가지 않는 느낌도 있다.

리액트

개발자인데 리액트 안하면 무슨 대역죄인 되는게 요즘 분위기다보니 눈치 봐가며 사이드 프로젝트 몇 개 만들었다. 하면서 느낀 점은 '도대체 왜 이렇게 비효율 적으로 움직이는 것인가?' 였는데 아무래도 브라우저라는 제약이 심한 한계 안에서 어떻게든 해보려고 하다보니 그렇게 된게 아닐까 한다. 파고들면 들어갈수록 해야 할 게 너무 많아서 도대체 이게 끝은 있는건가 싶다. 요즘의 프론트엔드는 이게 문제면 저게 나오고 저게 문제면 그게 나오는 식이라 너무 피로가 심하다...

NextJS

결국 '이게 문제 저게 문제 그게 문제' 하다가 나온 리액트 보완 프레임워크 NextJS. 리액트를 해봤으니 NextJS도 해봐야 할 것 같아서 사이드 프로젝트로 해봤다. '버그, 어수선, 여전히 변신중, 용어 불일치' 등이 내가 느낀바다. 결국 라라벨이나 스프링, 장고 처럼 프론트엔드 개발자도 서버의 개념을 알아야 하는 단계까지 와버린 것이다. 과연 어디까지 프론트엔드라고 볼 것인가. 백엔드의 지원은 어디까지 인가. 작업의 경계를 어떻게 나눌 것인가? 사실 내가 이해도가 딸려서 그런거지만 현대의 프론트 세계는 참으로 어렵다.

Common

Git

이제는 Git 안 쓰고는 뭘 할 수 없다. 버전 관리를 넘어 단순 백업 용도로도 훌륭한 서비스다. 하지만 의외로 Git을 도입하지 않은 업체도 많다. (물어보면 불편해서라고 한다) 대형 서비스에서 Git을 써본적은 없기에 어떤 구조로 활용되는지 궁금해서 기회가 되면 접해보고 싶다.

서버

초창기에는 CentOS를 썼는데 2019년부터 Ubuntu를 쓴다. CentOS는 기업형에 초점을 맞췄다면 Ubuntu는 범용성에 초점을 맞췄다는 느낌이다. 게다가 WSL2 환경에서 공식적(?)으로 쓸 수 있는 리눅스 버전이 Ubuntu이기 때문이기도 하다. 당연히 서버 엔지니어만큼은 사용할 줄 모르지만 어찌됐든 서비스 하나 구동할 수 있을 정도 활용도는 있다. (rm -rf를 조심하시오)

클라우드

면접시 꼭 나오는 질문이 "AWS 쓸 줄 아세요?"인데 질문 자체가 잘못됐다고 생각한다. AWS에 있는걸 내가 다 쓸 줄 알면 클라우드 서비스 창업하지 개발자는 안 할 것 같다. AWS든 네이버든 구글이든 NHN든 기본적인 인스턴스 생성하고 네트워크 구성하고 스토리지 추가 연결하고 오브젝트 스토리지 활용하고 이정도는 한다. AWS는 수 많은 서비스 안에서 어떻게 보물을 찾아내고 우리 서비스에 접목시키느냐가 관건인데 사실 그정도 규모의 서비스를 운용하는 회사가 없다보니 경험해볼 수 없었다. 이 부분 또한 접해볼 수 있으면 정말 훌륭한 경험이 될 것 같다.

회사 소속 작업

* 위에서 아래 년도 순서임.

* 2019년 이전의 프로젝트는 생략.

카네비모빌리티 인트라넷 리뉴얼
Summary

소속: 에스에스모터스

작업년도: 2024년

참여도: 개발 100%

개발 스펙: 도커, 라라벨9, PHP8, MySQL, NHN 클라우드

관리자 모드: 없음(인트라넷)

라이브 서비스: 안함

Feature

회원 관리

차량 데이터 입력/관리

엑셀 다운로드

엑셀 데이터->DB변환

Before-After

작업 전: 의뢰사 인트라넷 리뉴얼이 필요하다 하여 기획 없이 진행.

작업 후: 의뢰사에 개발 관련한 담당 인원이 없어 역 기획을 제안해서 개발. 그렇다보니 제대로 프로젝트 진행이 되지 않고 만들어도 수정하는 일이 다반사로 일어남. 가안으로 납품을 진행했으나 추후 진행은 이루어지지 않음.

Issue

개발 이슈: 라라벨의 태생이 도커와 맞지 않아 프로덕트 환경 셋팅과 배포 과정 자체가 매우 어려웠다. 한 번에 해야 할 일을 두 번 꼬아서 해야 하는 형태라 배포에 손이 많이 갔다.

파라다이브
Summary

소속: 큐패스코리아

작업년도: 2023년

참여도: 예약 부분 개발 100%

개발 스펙: PHP7, MySQL, CentOS, 자체 서버 호스팅

관리자 모드: 있음

라이브 서비스: 진행

Feature

회원(고객 및 강사) 분기 가입 및 로그인

고객 실시간 예약 및 취소

카드 결제 및 환불

관리자 모드

Before-After

작업 전: 외주 개발사의 사전 개발된 서비스에 추가 기획 부분 담당.

작업 후: 미완된 기획으로 갑자기 파견 근무로 참여하게 되어 어려움이 많았던 작업. 의뢰사의 요구사항과 기획의 충돌을 개발에서 모두 떠안아 진행을 해서 트러블이 끊이지 않았다. 의뢰사의 서비스 특성상 실시간 예약과 취소, 위약 등 생각할 게 많았던 프로젝트. 결국 무리한 파견과 요구사항을 더는 진행 할 수 없어 유지보수는 담당하지 않음.

Issue

개발 이슈: 담당자가 유지 보수가 어렵다고(?) 외주 개발사에 프레임워크 사용을 금지 했었다. 그래서 원래 사내 시스템(바닐라PHP) + 외주 개발사(영카트)라는 해괴한 조합으로 개발이 되었었고 추후 참여하니 도저히 손을 쓸 수 없을 정도가 되어 있었다. 의뢰사는 기획 기능이 누락되었다고 빠른 개발을 원했고 개발을 하며 기획이 진행되는 최악의 상황에서 최선을 얻어내려 했던 작업.

또가자
Summary

소속: 모든에프

작업년도: 2020년

참여도: 유지보수 100%

개발 스펙: PHP7, MySQL, 서버 호스팅

관리자 모드: 있음

라이브 서비스: 진행

Feature

회원 관리

제3사 API연동 쿠폰 상품 판매 기능

카드 결제 및 환불

관리자 모드

Before-After

작업 전: 외주 개발사에 사전 개발된 상태였음. 입사 전 사전 정보 없이 프로젝트를 전담했는데 외주 개발사에서 무성의하게 개발해 유지보수가 어려운 특징이 있었음.

작업 후: 기획 기능 추가를 위해서는 개발을 다시 해야 할 정도로 리뉴얼이 필요했는데 이미 개발된 서비스를 처음부터 다시 개발하는게 쉽지 않아 결국 이행까지는 하지 못한 프로젝트. 보안 다듬는데만 꽤나 많은 시간이 들어가 정작 기능 확장은 할 수 없었던 케이스.

Issue

개발 이슈: 바닐라PHP로 개발한 상태의 서비스였는데 한 눈에 봐도 PHP개발자가 아닌 다른 언어 개발자가 한 티가 역력하게 났었다. 여기저기 구멍이 많아 다시 만들어야 할 정도의 수준이어서 기능 하나 추가 할 때마다 문제를 해결해야 했다. 테스트 상태의 값을 그대로 사용을 한다던가 유저 정보가 바뀌어 있다던가 하는 문제점들이 있어 하나씩 찾아 해결을 해야 했다.

신한금융희망재단
Summary

소속: 씨에스이마케팅

작업년도: 2020년

참여도: 개발 100%

개발 스펙: 코드이그나이터3, PHP7, MySQL, 웹 호스팅

관리자 모드: 있음

라이브 서비스: 진행

Feature

관리자 모드

각종 게시판 관리

디자인 콘텐츠 관리자 모드에서 관리하도록 구현

Before-After

작업 전: 의뢰사의 외주 개발사가 시작 전 하차로 빠르게 만들어야 했던 프로젝트. 시간이 한 달여 정도밖에 없는 상태여서 단기간에 검수부터 오픈까지 진행. 작업 기간을 고려하여 관리자 쪽만 보안 검수 진행 하기로 함. 대신 호스팅의 경우 보안 사항이 높아지기 때문에 웹호스팅을 이용하기로 함. 따라서 FTP 형식이 가능한 코드이그나이터3 프레임워크 사용.

작업 후: 대기업 특성상 컨펌 기간이 최소 2일 이상 소요되어 어려움이 컸던 작업. 높으신 분들(?)의 취향이 반영되어야 하는 부분이 많았던 기억이 남는다. 특히 기업의 기조에 맞게 색상, 로고, 폰트를 계열사 통일을 해야 했기에 퍼블리셔가 고생을 많이 했다.

Issue

개발 이슈: 개발 자체는 큰 이슈가 없었는데 퍼블리싱과 협업 하는데 시간이 많이 들어갔었다. 당시 퍼블리셔가 외부 인원이어서 파일을 전달 받으면 개발쪽에서 적용해서 작업을했는데 버전 관리가 제대로 될 수 없어 파일이 업데이트 될 때 마다 변경점에 대한 부분을 수동으로 체크 했었다.

세부포유
Summary

소속: 씨에스이마케팅

작업년도: 2019년

참여도: 개발 100%

개발 스펙: 코드이그나이터3, PHP7, MySQL, 웹 호스팅

관리자 모드: 있음

라이브 서비스: 진행

Feature

비회원 예약 기능

여행 상품 골라 담기

실시간 예약 확인 및 담당자 카카오 발송

관리자 모드

Before-After

작업 전: 대표님이 세부 여행 후 성사한 계약. '골라담는 관광' 이라는 서비스로 기획. 기본 관광 상품 베이스 위에 내가 원하는 관광 코스를 마음대로 담을 수 있게 개발.

작업 후: '마음대로'라는 컨셉이 어려웠던 기억이 난다. 스케쥴이 꼬이지 않게 예약과 확인 과정 모두 실시간으로 진행이 되어야 해서 까다로웠던 작업. 동남아 관광 특성상 예약 후 고객과 협의가 진행되기 때문에 예약 안내를 현지 담당에게 카톡으로 실시간 발송후 담당은 관리자 모드에서 예약 확정을 처리하도록 처리. 예약금을 받을지에 대한 추가 기획이 있었으나 실행되지는 않음.

Issue

개발 이슈: '실시간'이라는 개념을 녹이기 위해 갖가지 편법과 기술을 총 동원했던 서비스. 그럼에도 생각한 것처럼 완벽하게 작동하지는 않아 기획으로 풀어야 했던 부분도 있었다. 자체 서버를 구축해 현대의 프론트엔드 기술을 활용했더라면 좀 더 완벽한 서비스에 다가가지 않았을까 한다.

대홍DCA
Summary

소속: 씨에스이마케팅

작업년도: 2019년

참여도: 개발 100%

개발 스펙: 코드이그나이터3, PHP7, MySQL, 의뢰사 자체 서버

관리자 모드: 있음

라이브 서비스: 진행

Feature

출품작 파일 업로드 기능

출품 증빙 프린트 기능

관리자 모드

Before-After

작업 전: 기존 운영되던 사이트 리뉴얼. 대학생 광고 기획 작품을 업로드 하는데 중점을 두어야 했던 작업.

작업 후: 롯데정보통신의 보안 검수가 굉장히 까다로웠다. 보안 검수를 위해 코드이그나이터3의 30%는 뜯어 고쳐서 프로덕트까지 진행했다. 오픈소스에 대한 대기업(불신)과 일반기업(활용)의 차이를 분명하게 느낄 수 있었던 프로젝트.

Issue

개발 이슈: 보안 검수 처리하는데만 개발 기간과 동일한 시간이 필요했을 정도로 많은 시간을 투자 했다. 검수 쪽에서도 코드이그나이터에 대한 지식이 없었고 오픈 소스 프레임워크다 보니 문제 되는 부분을 모두 '보안 위반'으로 처리했다. 쓰지 않는 변수, 함수 등도 보안 이슈로 업데이트가 되어 해당 부분을 개발로 처리하거나 소명하는 작업의 연속이었다. 결국 프레임워크를 쓰는 게 의미가 퇴색 할 정도로 뜯어 고쳤었다.

사이드 프로젝트
Production Architecture (PDF)
호러드
Summary

공포 미스터리 작가와 독자를 위한 단편 소설 플랫폼

Feature

회원 관리

네이버 카카오 간편 로그인

관리자 모드

Dev

스펙: 도커, 라라벨 11, PHP 8.2, MariaDB 10, NHN 클라우드 서버

개발: 프레임워크는 라라벨, 자바스크립트는 바닐라, DB는 MariaDB로 개발. 현 시점의 라라벨 최신 버전인 11로 제작했으며 개발시에는 번들러인 Vite를 활용했다. 프로덕트 배포는 도커 이미지 빌드 후 도커 허브를 이용하여 이미지 다운 후 서버에서 컨테이너를 구동하는 방식으로 구성했다.

카드몬
Summary

openai를 이용해 자동 생성한 이미지로 PvP를 즐기는 카드 배틀 웹게임.

Feature

프론트/백엔드 분리

타 유저 카드 상황 SSE 구현

Dev

스펙: 도커, 리액트, MariaDB, FastAPI, NHN 클라우드 서버

개발: 프론트는 리액트, 백엔드는 파이썬 FastAPI, DB는 MariaDB로 개발했다.

살아남아라 모닥불
Summary

오래도록 모닥불을 꺼트리지 않고 유지시키는 협동 웹게임.

Feature

프론트/백엔드 분리

장작 알림판 웹소켓 구현

랭킹 상황판 SSE 구현

Dev

스펙: 도커, 리액트, PostgreSQL, FastAPI, NHN 클라우드

개발: 프론트는 리액트, 백엔드는 파이썬 FastAPI, DB는 PostgreSQL로 개발했다.

릴레이노벨
Summary

최초의 주제에 글을 달면 그 글에 이어서 글을 써 소설을 만드는, 글쓰기 어려워 하는 작가 지망생이나 일반인들을 위한 가볍게 즐기는 창작 웹게임.

Feature

프론트/백엔드 분리

댓글 상황 웹소켓 구현 (유사 채팅)

Dev

스펙: 도커, NextJS 14, PostgreSQL, FastAPI, NHN 클라우드

개발: 프론트는 NextJS 14, 백엔드는 파이썬 FastAPI, DB는 PostSQL로 구현했다. 사이드 프로젝트라 댓글 저장은 매모리 캐시를 이용하지 않고 바로 DB에 저장했다. 이 기능 이외에 openai를 활용한 버전 (옛 심심이)도 구상중이다.