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

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

프로필

이름: 류지훈

나이: 1980년 생

email: ryuwebd@naver.com

1:1 오픈채팅

Good

PHP

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

MariaDB

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

코드이그나이터3

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

라라벨

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

도커

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

So So

JavaScript

웹 개발에서 자바스크립트는 사실상 뺄 수 없는 존재지만 개인적으로 나는 자바스크립트를 그렇게 좋아하지 않는다. 브라우저를 넘어 서버까지 확장했으니 자유롭다못해 우주까지 넘어간 언어가 자바스크립트라 생각한다. 게다가 현대의 프론트엔드 환경에서 자바스크립트의 활용도가 훨씬 높아졌는데 개인적으로 피로도가 너무 상승해 "있으니까 써야한다"의 느낌으로 쓸 뿐이다. 요즘 개발을 배우는 분들은 React = Javascript 공식일텐데 난 바닐라 자바스크립트로 만드는 걸 더 선호한다.

퍼블리싱

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

파이썬

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

리액트

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

NextJS

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

Common

Git(hub)

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

서버

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

클라우드

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

개인 프로젝트
단편닷컴
Summary

AI와 함께하는 소설 창작 서비스

Feature

사용자 문장 파악 후 AI가 스토리텔링 생성

스토리텔링을 바탕으로 AI와 1:1 글짓기 연습

유저 댓글에 댓글을 이어 소설을 만드는 릴레이소설

Dev

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

개발: 프레임워크는 라라벨, 자바스크립트는 바닐라, DB는 MariaDB로 개발. 현 시점의 라라벨 최신 버전인 12로 제작했다. 프로덕트 배포는 도커 이미지 빌드 후 도커 허브의 이미지를 서버에서 컨테이너 구동하는 방식으로 구성했다. AI 관련은 openai API를 백엔드 cURL 통신으로 작업.

회사 소속 작업

* 연식이 오래된 사람인지라 회사가 없어졌거나 서비스 중지가 많아 요약으로 대체했다.

* 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개발자가 아닌 다른 언어 개발자가 한 티가 역력하게 났었다. 기본적인 sql 인젝션 처리도 되어있지 않았고 여기저기 구멍이 많아 다시 만들어야 할 정도의 수준이어서 기능 하나 추가 할 때마다 문제를 해결해야 했다. 테스트 상태의 값을 그대로 사용을 한다던가 유저 정보가 바뀌어 있다던가 하는 문제점들이 있어 하나씩 찾아 해결을 해야 했다.

신한금융희망재단
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의 50%는 뜯어 고쳐서 프로덕트까지 진행했다. 오픈소스에 대한 대기업(불신)과 일반기업(활용)의 차이를 분명하게 느낄 수 있었던 프로젝트.

Issue

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