테크트리란?

기술을 의미하는 테크놀로지(Technology)의 테크
나무를 의미하는 트리(Tree)를 합쳐 테크트리 라고한다.

나무위키 내용을 응용하여 설명하자면
이는 주로 전략 게임에서 쓰이는 개념으로,
다음 단계로올라가기 위한 기술이나 경험 등을 트리 형태로 표현한 것을 말한다고 한다.

기원은 모르겠지만, 언제부터인가 개발자들 사이에서도 테크트리라는 말이 유행처럼 번지고 있다.
예전에도 몇 번 본 적 있지만, 이번 기회에 나의 상황을 살짝 점검해보고자 한다.

난 웹 개발자라서 그쪽 분야로 살펴봤다.

2020 개발자 로드맵 github
여기를 참고 삼아 정리해본다.

 


 

백엔드

PHP (+ 라라벨)

내가 처음 이 회사에 입사했을 때 PHP 생짜로 개발이 되어있었다.
이전 회사에서는(SI) 정부프레임워크를 사용하다 이직을 했는데, PHP라는 것도 생소한 가운데, 프레임워크를 사용하지 않으니 신규 개발 및 유지보수가 너무 힘들었다.
기존 사용하던 프레임워크의 개념 긁어와서 간단하게 model 단과 레이아웃 부분 정도만 규칙성 잡아넣고 내 이름 따서 DG_Frame이라 명칭하고 1~2년 사용했던 걸로 기억한다.

그 후 코드이그나이터2(CI2) 를 도입하였고, 몇 년이 지난 지금도 우리는 CI2를 사용하고 있다.
배운 게 도둑질이라고 CI4를 검토하는 가운데 라라벨8을 보니, 완전 개념부터 시작하여 거의 유사한 것을 보게 되었다.
이왕 갈아타려면 PHP에서 가장 많이 사용한다는 라라벨로 갈아타는 게 나을 것 같다는 것이 현재 생각이다. 

갈아타고 싶은 이유는 아래와 같다.

  • 컴포저 좀 쓰고 싶다. 
    (많이 사용하고 있는 서드파티 모듈 중 몇 가지가 신버전들이 우리 쪽에서 안 돌아간다.  - 요구사항 반영 못 한다는 말을 간간이 하게 된다.)
  • prepared statement를 쓰고 싶다. 
    (처음 CI2 도입 시 mysql 레거시 쿼리를 사용하려고 좀 튜닝했는데 지금 그게 발목을 잡는다. 얼마 전에 별거 아닌 SQL 인젝션에도 좀 타격 입었다 - 시스템이 커져서 섣불리 변경할 수도 없는 상황이다.)
  • 신입 뽑기가 어렵고 / 떠난다는 멤버 잡기도 어렵다. 
    (꼭 버전 낮은 CI 탓을 하긴 그렇지만, 은근 영향도 있긴 하다.)
  • 다양한 기법 사용해보고 싶다. 
    (라라벨 가면 무엇이 다양한지는 모른다. 많을것 같긴 하다. 파악해봐야 할 내용이다.)

 

각설하고 본론으로 돌아가서 공부해야 할 목록 정리해보자.

  • [블로그] PHP 버전 업그레이드에 따른 이득 분석
    (현재 PHP 7.0 사용하고 있다. 그리 낮지는 않지만, 그리 높지도 않다.)
  • [블로그] 라라벨 CI -> 라라벨 갈아타야 하는 이유 (본부장님 설득용)
  • [git] 라라벨 샘플
      - CRUD 샘플
      - 엘로퀀트의 모든 것
      - CLI 정리
      - 블레이드 
      - 사용자 인증
      - 캐싱 방법
      - 유닛 테스트 계획 (가능하면)
      - 기타 등등등 (아직 모름)

 

데이터베이스 (DB)

현재 mariadb 10.2를 사용하고 있다.
기존 자회사 서버를 기생하다가 18년도에 단독 서버 구축을 하였다.
OS 및 APM 등의 모든 버전 및 을 내가 선택하여 혼자 구축을 해야 하는 상황이었다.
이때 가장 공들였던 부분이 DB였다. (공들였다 = 어려웠다 = 두려웠다.)

현재 내가 섭렵한 부분은 아래와 같다.

  • DB 설치 방법 (응?  난 어려웠었다. -_-;;)
  • mysql과 mariadb의 차이점
  • myisam VS innodb
  • 리플리케이션 구축 방법
  • myisam, innodb 복원 방법
  • mariabackup 운영방법
  • 마이그레이션 경험

채워야 할 부분은 아래와 같다.

  • [블로그] mariadb 버전 업 해야 하는가 / 버전업 방법 및 실행계획 (본부장님 설득용)
  • [블로그] explain 읽는 법 / 교정하는 법
    (알기야 알지. 지속적으로도 쓰고 있지. 체계가 부족하다고 느껴질 뿐)
  • [고민] 슬로우 쿼리 없애는 방법
    (현재 구조상 슬로우 쿼리 못 없애는 곳이 몇 군데 있다. 응? 한 개가 아니야? )
  • [블로그] 인덱스 작동방식

 

API

  • REST full API
    (현재 URL 호출하여 결과값 받아 처리하고 있다. REST를 사용하면 이득이 무엇인지 등 사용해보고 적용점 있으면 적용해야 한다.)
  • SSO 인증
    (이걸 API에 넣어야 하는지는 모르겠지만. 정말 SSO 구현하고 싶다.)

 

테스팅

  • 통합 테스트, 단위 테스트, 기능 테스트
    현재 우리는 debug=true를 선언하여 DB 쿼리를 실행하지 않고 출력하는 것으로 사용하고 있다. 
    echo 및 exit 조합으로 줄단위로 문제점을 찾고 있는데, 불편하지는 않다. 
    이 말을 바꿔 이야기하면 통합? 단위? 기능? 느낌은 오는데 딱히 필요성을 못 느꼈고, 알아보지 않았다. 
    무엇인지라도 좀 파악해보자. 그래야 발전으로 하던 외면을 하던 하지.

 

설계 & 원칙

  • 디자인 패턴
  • SOLID / KISS /YAGNI / DRY
  • 기술 부채
    그래. 이 부분, 막막하고 막막하지만 진짜 건드려야 할 때가 된 것 간다.
    변명 좀 하자면, 웹 쪽에서는 디자인 패턴 등이 엄~~ 청~~ 중요하다가 생각하지 않았다.
    지금 기술 부채 + a로 인해 유지보수 비용이 엄청 늘어난 걸 느낀다.
    이 실마리의 많은 부분이 이곳에 답이 있지 않을까 막연히 생각이 든다. 

 

웹서버

앞서 이야기 한대로 서버 기생할 때는 nginx를 사용했다.
내가 서버 구축하면서 apache를 채택했다.
큰 이유 없다. 하나부터 열까지 얕은 지식밖에 없던 나한테 단기간에 너무 많은 것을 선택하고, 테스트해보고,  결정하고, 구축하고 너무 힘들었다.
웹서버를 분석할 때 요즘 apache 가 많이 좋아졌다는 글 하나 보고, nginx를 배제했었다. (말 그대로 많이 안 팠다.)

  • [블로그] nginx VS Apache  <= 결론으로 갈아탈지의 문서 정리 필요하다. (이제 좀 서버에 여유가 생겼다 -_-)

 


프론트엔드

기초 편 -  알긴 알지만 정리해보고 싶은 주제

[블로그] :  정리하여 글 작성하자는 의미이고
[git] : 은 구현 또는 공부하여 git에 올리자는 의미로 작성해봤다.
볼드체 : 우선순위 높음.

  • [블로그] DNS 작동원리
  • [블로그] 호스팅은 무엇일까?
  • [블로그] 브라우저 동작원리
  • [블로그] 호스팅은 무엇인가?

 HTML / CSS / Javascript 부분은 불편함 없이 사용하고 있기 때문에
에이~ 이 부분은 굳이 건드릴 부분은 없겠지~라고 생각하며 읽어봤더니,
에고.. 정리가 많이 필요해 보인다.

 

HTML

  • [블로그] 컨벤션과 모범사례
  • [블로그] 기본 SEO

 

CSS

  • [블로그] 반응형 디자인과 미디어 쿼리
  • [블로그] CSS-in-JS는 무엇인가?   <= 이 용어는 처음 들어봤다. (-_-;;)

 

Javascript

  • [블로그] JQuery를 쓰지 않는 추세라는데 왜?
    난 JQuery를 좋아라 하는데 이 주제 보고 의아해했다. 좀 파고들어봐야겠다. (좋은 것 있으면 써봐야지~)
  • Fetch API는 무엇?
    이 용어도 처음 들어봤는데, 우리가 적용 가능 여부 및 장단점 파악을 좀 해봐야겠다.

 

React

사실 리액트, 뷰, 앵귤러 등은 관심이 별로 없다.
내가 백엔드 쪽을 더 선호하기 때문이지 않을까 싶다.
그런데 회사에서 운영 중이 사이트의 한 부분을 다른 파트에서 리액트로 만들고 있다.
유지보수하기 위해서라도 기본은 배워둬야 할 부분이다. 으.. 왜 이 부분은 정말 건드리고 싶지 않은지.

  • [git] 기본 CURD 샘플 

 

 


데브옵스 및 기타

사실 데브옵스가 무엇인지 아직 정확히 모르겠다. ^^;;

 

서버

서버... 앞서 이야기 한대로 서버 혼자 다 구축하면서 갖은 고뇌를 다 한 것 같다.
지금도 야매로 배운 나 말고 다른 사람이 서버 관리했으면 좋겠다는 생각을 계속하고 있다.

DB 서버 10대를 용도 맞게 나누고 그룹을 맞게 리플리케이션으로 구성했다.
mariabackup + 백업 서버 별도로 두어 myisam으로 변환하여 2차 백업을 하고 있다.
myisam으로 변경 후 백업하는 이유는 빠른 복원을 위해서였다.

웹서버 6대로 사이트별로 2대씩 사용하고 있고 L4로 구성했다.
openssl로 2차 도메인을 관리하고 있고, 메인 도메인은 유료 ssl을 이용하고 있다.
SVN을 이용하여 개발자는 커밋을 하면 hook을 통해 즉시 개발서버에 적용되도록 세팅했으며,
동기화 버튼을 통해 모든 서버에 소스 rsync 되도록 구성했다.

각 모든 서버는 하나의 DB군에 자신의 상태를 실시간 보고를 하고, 이를 모니터링 페이지를 만들어서 문제가 발생 시 필요한 사람에게 SMS를 알림 보내도록 구축하였다.
내가 가장 많은 시간을 투자한 곳이 DB 구축 + 백업 / 모니터링이었다.

무엇이 됐든 서버는 정말 내 한 땀 한 땀의 정성스럽게 구축한 영역이다. (모르고 시작해서 더 힘들었다)

정리 및 공부해야 할 부분

  • 도커
    처음 서버 구축 시 누군가 도커를 권장해줬는데, 매우 흥미로웠다. 하지만 도입은 하지 않았다. 
    이유는 프레임워크 먼저 하기보다 쌩짜언어를 해야 한다는 지론 하고 비슷하달까?
  • AWS
    (예전에 호기심으로 살짝 건드려봤는데, 다 까먹었다. 역시나 호기심으로 좀 더 건드려보고 싶긴 하다)
    아는 게 없어서 무엇인가 더 해야 할 곳이 어디인지도 모르겠다. (그냥 잘 돌아가니까 현재로서는 신경 쓰고 싶지 않다. -_-+)

 

형상관리

현재 회사에선 SVN을 사용하고 있다. git은 공부 삼아 2~3일 만져본 게 전부이다.
구글링을 하다 보니 git 은 형상관리뿐만 아니라 코드 리뷰로도 사용한다는 글을 봤다.

  • git으로 할 수 있는 다양할 활용법
  • 공부한 산출물이 소스인 것은 무조건 git 등록하고 평생 관리하기

 

수집 (크롤링)

MFC, C#의 웹브라우저 컴포넌트를 이용하여 수집 프로그램을 만들었다.
IE의 몰락으로 IE 접근을 차단시키는 사이트가 많아졌고 파이썬이 수집이 쉽다는 이야기에 파이썬을 처음 공부했다.
현재 회사의 모든 수집 프로그램을 파이썬으로 재개발 중에 있다.
셀레늄, request, beatifullsoup 등을 이용하고 있다. 

 


 

이제 그만 하자. (지친다. 장시간 앉아서 타이핑하니 어깨가 너무 아프다. )

처음 보는 용어들 아주 많았고, 하나하나 검색해가며 흥미로운 것들 위주로 적었는데도 한가득이다.
한동안 번아웃으로 개발 성장 손 놓고 취미에 몰두했더니 아주 부채더미가 된 것 같은 느낌이다.
숙제하듯 반 호기심 반으로 작성하다 보니 그래도 방향은 좀 보이는 듯하다.

내가 가진 기술을 더 고급화시키는 것에 70
못 가진 부분 새로운 일이 30 정도 에너지 할애하는 게 맞지 않을까 생각한다.

무엇보다 중요한 것은!! 공부한 것은 무조건 정리하자(블로그가 됐든, git이 됐든, 다른 것이 됐든)
살아가면서 많은 공부를 했지만, 가진 스킬이 무엇이니?라고 물어본다는 머릿속이 하얘진다.
아마도 남긴 산출물이 없기 때문일 것이다.


본 글은 개발자 모임 "아우성(가칭)" 2번째 주제로 선정하여 작성한 글입니다. 

 

'일기 > 개발일기' 카테고리의 다른 글

22년도 개발자 회고록  (4) 2023.01.02
PHP 업그레이드 고민  (0) 2022.10.28
[아우성] 첫 개인 프로젝트 "리액트"  (0) 2022.10.25
블로그를 시작한 이유  (0) 2022.10.25