박진호

박진호님의 아티클

박진호

박진호

피그마의 기술적 흐름

WebGL 기반 렌더링 엔진 개발 (2013)

커스텀 폰트 렌더링 시스템 개발 (2014)

자체 DOM 구현 (2015)

Vector Networks 기술 도입 (2016)

실시간 협업 기능 (멀티플레이어 기술) 구현 (2016)

컴포넌트 기능 첫 도입 ("Symbols"로 시작, 후에 "Components"로 개편) (2016-2017)

WebAssembly 도입으로 성능 3배 향상 (2017)

Rust 서버 도입으로 서버 성능 개선 (2018)

Styles와 Team Library 기능으로 컴포넌트 시스템 강화 (2018)

LiveGraph 시스템 개발 시작 (2019)

Auto Layout 기능 첫 출시 (2019)

동적 페이지 로딩 기술 도입 (2020)

Component Variants 기능 출시 (2020)

브랜칭 및 머징 기능 추가 (2021)

Component properties 도입 (2022)

LiveGraph 100x 프로젝트 시작 (2022)

새로운 버전의 Auto Layout 출시 (2023)

데이터베이스 샤딩 구현 (2023)

Variables, Dev Mode 기능 도입 (2023)

AI 기능 통합 시작 (2024)

* Visual Search

* AI-enhanced Asset Search

* AI 기반 텍스트 도구 및 콘텐츠 생성

* AI를 이용한 프로토타이핑 및 디자인 생성


----- -

피그마는 어디로 가고 있을까요?

피그마는 디자인 툴이 맞을까요?

3
0
박진호

박진호

HTML 기반의 위지윅 에디터 쓰시나요?

오랜만에 프로덕트를 하나 올렸습니다.

Summernote 라는 HTML 기반의 위지윅 에디터 인데요.

https://github.com/summernote/summernote

나름 github 에서 star 를 10k 이상 받은 라이브러리입니다.

최근 4년 동안 릴리즈를 못했어요.

그러는 사이에 에디터 관련된 기술도 계속 발전해서

최근에는 순수 HTML 를 사용하는 것보다 스키마를 정의할 수 있는 ProseMirror 기반의 에디터들이 많이 나오고 있습니다. (디스콰이엇도 ProseMirror 쓰고 있군요)

마지막 버전업이 4년 전인데, 알게 모르게 PR 올라온 것들을 누군가는 모아주고 있었어요.
그래서 마지막 버전을 내보내려고 준비를 하고 있습니다.

그 동안 너무 안 했던 것들을 다시 하려니 기억이 날랑 말랑 하네요.

ps.

자매품 리액트 버전도 있어요.


summernote

HTML 위지윅 에디터

5
4
박진호

박진호

동시편집 에디터 서비스 codepair 업그레이드 하기

요 근래 동시편집 관련된 이것 저것을 계속 개발 중입니다.

지금은 https://yorkie.dev 라는 것을 만들고 있어요.

yorkie 는 다른 동시편집 라이브러리와 달리 동시편집 라이브러리(SDK), 서버, 어드민툴 등등을 모두 제공하는 PaaS 형태의 서비스를 지향하고 있습니다. (비슷한 서비스로는 https://liveblocks.io/ 가 있어요)


동시편집 자체를 테스트 해야하다 보니 몇가지 테스트 프로젝트를 만들고 있습니다. 그 중에 동시편집 라이브러리를 테스트 하기 위한 간단한 에디터 서비스를 만들었는데요. 누구나 들어와서 마크다운 형태로 동시편집을 할 수 있습니다.

이름은 코드페어에요.

https://codepair.yorkie.dev


코드(마크다운)을 같이 공유해서 편집하자 그런 의미로 만든 서비스에요.



그냥 단순히 에디터 하나만 떠 있기 때문에 일회성 테스트를 하거나 회의 시간에 간단하게 쓰는 용도였습니다.


하지만 개밥먹기라고 하죠.

저희 팀 안에서 회의 할 때는 무조건 코드페어를 쓰다 보니깐

단순히 테스트로만 존재하면 안될 것 같은 느낌이 들었어요.


그래서 동시편집 라이브러리 기능만 고민하지 말고

에디터 자체를 쓸만한 형태로 만들어 볼까 하다가

얼마전에 링크를 관리하는 기능을 추가 했습니다.



로그인이 없기 때문에 링크는 로컬(브라우저)에서만 저장이 되구여. 나중에 언젠가 로그인 기능이 제공이 되면 여러가지 부가 기능을 넣을 수 있을 것 같아요.


대략 아래와 같은 기능을 추가 했습니다.


* 현재 보고 있는 링크를 트리 형태의 데이타 관리

* 저장된 링크를 브라우저 새로고침 없이 바로 해당 글로 이동해서 동시편집 상태로 연결

* 즐겨찾기 추가


이렇게 넣고 나서 보니깐 맥에 있는 기본 노트앱이랑 구조가 비슷하네요.

기본 노트앱에 동시편집 기능이 들어가있다고 보시면 될 것 같아요.

에디터의 사용성이 한결 올라간 것 같습니다.


이건 개인용도로도 좋지만 협업시스템에서 사용하면 좀 더 좋을 것 같은데요.

그래서 계속 고민을 해보고 있습니다.


어떻게 하면 괜찮은 에디터 서비스를 만들지 고민이 많네요. ^^


-------------


개발자로 지내면서 가끔 그럴 때가 있습니다.


나는 라이브러리를 만들고 있으니깐 기능만 충실하면 돼.

그런데 하다 보면 그게 아니더라구여.


이 라이브러리를 잘 쓰기 위한 방법도 제시를 해줘야 할 때가 있고

때로는 그걸 넘어서 내가 가지고 있는 기술 그자체로 상품화를 시켜야 할 때가 오는 것을 느낍니다.


그래서 지금부터는 단지 기능 개발한다는 느낌보다는 좀 더 제품을 만든다는 느낌으로 업그레이드를 해볼려고 해요.


계속 라이브러리 형태로만 만들다가 서비스 형태로 올려서 만드니깐 뭔가 재밌네요. ^^



4
0
박진호

박진호

SplayTree 를 한쪽으로 몰아봅시다.


계속해서 https://yorkie.dev 프로젝트에 도움이 될만한 구조를 만들고 있습니다.


SplayTree 구조상 데이타가 자꾸 왼쪽, 오른쪽 한쪽으로 기울여져서 구성이 되는 경우들이 많아 그냥 한쪽으로 몰아서 볼 수 있게 했어요.


이미지의 왼쪽을 보시면 엄청나게 많은 노드들을 보실 수 있습니다.


저렇게 되는 이유는 yorkie 의 text 자료형에 데이타가 저장이 될 때 모든 글자를 잘라서 저장해서 그렇습니다.


이제 내부가 복잡하게 되어 있다는 것을 알았습니다.


하지만 이대로 놔두면 텍스트 크기가 크면 클수록 자료형으로 관리되는 트리의 양 자체가 방대해지기 때문에 성능에 문제가 있을 수 있습니다.


그래서 이 다음부터는 실제로 성능을 튜닝해서 트리의 구조를 좀 더 심플하게 만들어볼 예정입니다.


ps.


동시편집 300명을 목표로....


3
0
박진호

박진호

동시편집 서비스 Text 자료형 모니터링 하기

https://yorkie.dev 프로젝트에서 몇가지 개발하고 있습니다.


최근에는 text CRDT 자료형을 모니터링 하기 위한 도구를 만들고 있는데요.

text 내부가 2가지의 바이너리 트리로 되어 있습니다.


SplayTree

LLRBTree


이 두가지 트리가 그 주인 공인데요.

바이너리 트리라 글자가 많아 지면 많아질 수록 눈으로 확인 할 수 없는 영역에 가까워집니다.


그래서 조금 쉽게 볼 수 있는 툴을 만들고 있는데 생각보다는 쉽지가 않네요.


^^ 그래도 이런게 있으면 개발할 때 확실히 도움이 되서 즐겁네요.


혹시나 동시편집에 관심있으면 언제든 yorkie.dev 로 와주세요.

오픈소스입니다.


2
2
박진호

박진호

해결하지 못한 기능을 잠시 내려 놓자.

전에 해결하지 못한 버그를 그냥 두기로 했습니다.

명확히는 기능 구현을 못한 것에 가깝긴 한데요.

제가 처음부터 구현했던 사항이랑 안맞아서

만약에 한다고 하면 처음부터 다시 해야할 것 같아서

일단은 잠시 내려놓고 생각을 해볼려고 합니다.


------


저는 지금 sapa 라는 react 와 비슷한 라이브러리를 만들고 있는데요.

react 는 fragment 라는 여러 리스트를 다룰 수 있는 기능이 있습니다.

저도 넣어두긴 했는데 react 와 완전히 동일한 형태로 동작하지 않아서 이번에 고쳐볼려고 했다가 안된단다는 것을 알았습니다.


리액트 코드랑 해외 다른 사람들이 만든 코드들을 계속 보면서 처음부터 구조가 안 맞았다고 생각되었습니다.


리액트는 본질적으로 jsx 라는 vdom 의 리스트의 나열인데요.

sapa 는 component 내부의 jsx 라는 vdom 의 나열이라 구조가 조금 다릅니다.


sapa 는 기본적으로 component 는 무조건 하나의 root 를 가지게 되어 있는데 fragment 가 되면 안됩니다. (지금은 반쪽만 구한한 상태)


하지만 react 는 컴포넌트의 root 를 fragment 로 가져도 됩니다. 다만 이렇게 하다 보니 트리를 항상 최상위 부터 재구성 해야합니다. ( 리액트 자체적으로는 이것을 회피하기 위한 많은 기법이 사용됩니다.)


일단 이 구조에서 저랑은 안 맞아서 어쩔 수가 없었네요.


--------

가끔 코딩을 하다 보면 어디까지 할 것인가를 계속 고민하고 있습니다.


지금은 잠시 내려 놓을 때인가봐요 ^^

다른걸 해봐야겠네요.


이지로직 스튜디오

CSS/SVG 기반 웹디자인 툴

8
2
박진호

박진호

Dropdown UI 를 만들고 있습니다.

Dropdown UI 를 만들고 있습니다. 버튼이나 텍스트를 누를 때 나오도록 하고 있는데요.


클릭하고 뜨는 형태는 괜찮은데 hover(마우스가 위로 왔을 때) 할 때가 이벤트 제어 하기가 어렵습니다.


왜냐하면 보통 Dropdown 영역이랑 실제 UI 영역이랑 디자인상에서 안겹치도록 해놨거든요.


그러다 보니 살짝만 잘못 움직여도 드롭다운이 닫혀버립니다.


그래서 Dropdown 이 화면에 표시 될 때 dropdown 보다 더 큰 영역으로 이벤트 패널을 하나 깔아줍니다. 다만 눈에는 보이지 않습니다.

보이지 않지만 다른 곳으로 이벤트가 가는걸 막아주고 있죠.


UI 를 만들다보면 눈에 보이는 것보다 보이지 않는 부분이 더 섬세해야함을 느낍니다. 그런 것들로 인해서 자연스러워지거든요.


------


이제 UI 는 기본적인건 해서 문서를 열심히 적어놔야겠습니다.


3
0
박진호

박진호

버그를 발견했습니다.

어제 개발하던 항목에서 버그를 발견했습니다.

눈에 잘 안보여서 몰랐는데 정상적으로 동작하지 않는 상태였습니다.

구조상 다른 것들은 괜찮은데 유독 하나만 특정 상황에서 안됩니다.

상황은 아는데 어떻게 고쳐야할지 잘 떠오르지 않습니다.


이럴 때는 그냥 하는 수 밖에 없겠죠?


-----


하면서 몇가지 느낀건 버그는 잘 드러나지 않는다 입니다.

코드가 복잡해질 때서야 그 때서야 조금 보입니다.

하지만 느낌만 올뿐 정확히 판별하기가 힘듭니다.


그래서 우리는 로그를 남기는데요. (사람이 일기를 쓰듯이 )


프런트 영역에서는 로그 조차도 남기기가 쉽지 않습니다. 데이타가 모두 객체 형태로 전달되기 때문에 참조를 어디에 가지고 있는지 파악하기도 쉽지 않구여.


뭔가 모니터링을 쉽게 할 수 있는 구조가 필요하다고 느꼈습니다.


물론 개발자 도구의 디버깅 툴을 써도 되지만 그건 너무 특정 상황에만 매칭이 되어 있어서 내가 짠 구조에 대한 히스토리를 추척하기 힘듭니다.


------

오늘은 이문제를 꼭 해결해야할 것 같아요.


몇가지 생각해봅니다.


  1. 해당 특정 상황만 우회해서 문제 해결하기
  2. 전체적인 상황에 맞게 정석으로 문제 해결하기
  3. 해당 기능 삭제하기


무엇이 좋을까요?

6
2
박진호

박진호

Hot Module Replacement 기능 개발하기

최근 UI 프레임워크들은 필수로 이 기능이 들어가있습니다.

번들러(vite, webpack, rollup) 를 통해서 개발을 할 때 특정 컴포넌트 파일이 수정이 되면 화면을 무조건 새로 고침하는게 아니라 해당 렌더링 되는 컴포넌트만 바뀌도록 되어 있습니다.


제가 만들고 있는 sapa 도 이 기능을 제대로 동작시키기 위해서 계속 업데이트를 하고 있는데요.


기본적으로 컴파일러로 코드를 뒤집어서 재구성 해야하는 방식이기 때문에 쉽지가 않네요.


-----

이 기능의 기본 컨셉은 import() 함수를 사용한 모듈을 자동으로 가지고 오는 것입니다.


하지만 기본적으로 JS 는 import() 이후에 들어온 것들에 대해서 인지를 하지 못합니다. 정확히는 같은 패스로 불려왔다 치더라도 다른 컴포넌트가 됩니다. 이름만 같을 뿐 .


아래 예를 잠시 보시죠.


import A from "a"; 

function B () {
	return A;
}


B 함수는 과거의 A 밖에 모릅니다. import 로 아무리 새로운 A 를 가지고 와도 B 는 과거의 A 만 알 수 있죠.


이말은 기존의 모듈을 읽어 들이는 방식을 바꿔야 한다는 것과 같습니다.

즉, B 는 아래와 같이 해야합니다.


function B () {
	return getModule(A);
}

registerModule(uniqueId, { A });


uniqueId 어딘가에 A 를 등록해놓고 B 는 A 를 바로 호출하지 않고 새로운 A 를 찾을 수 있도록 함수로 다시 감싸야 합니다.

------

흠 그럼 개발 방식일 다 바꿔야 하나요? 라고 물어볼 수 있습니다.


아닙니다.

react 는 react-refresh 라는 라이브러리를 제공하고 있고 vuejs 도 마찬가지로 그런 것들이 있습니다.

그런데 재미난건 react-refresh 코드를 보면 babel 로 코드를 완전히 재구성하는 것을 볼 수 있습니다.


개발방식을 안 바꾼다면서요?


우리가 안 바꿀 뿐, 번들러가 알아서 해주는데, 결국은 번들러도 함수 형태로 모듈을 로드 해야하기 때문에 그런 형태로 바꿔야 합니다.


어떻게 어떻게 컴파일러로 구문 분석 해서 export 되는 애들만 다른 모듈 형태로 감싸고 리턴하게끔 구조를 바꾸는 것입니다.

-------


이게 단순히 여기서 그냥 바꾸면 될 줄 알았는데요. 좀 더 본질적인 문제가 있습니다.


실제 컴포넌트가 렌더링 될 때 이전에 렌더링 된 컴포넌트의 상태를 그대로 유지를 해야할지가 고민이 됩니다.


그 말은 [과거 A] 가 가지고 있던 몇가지 데이타를 [새로운 A] 에게 넘겨줄 수 있어야 하는데요. 여기서 진도가 잘 안나가네요.


어떻게 하면 잘 풀수 있을까?


-----


컴포넌트가 새롭게 로드되면 내부에 가지고 있던 훅 정보를 어떻게 유지를 해야할까요?


일단 기본적으로 Sapa 는 리액트에서 지원하는 몇가지 훅들을 비슷하게 지원합니다.


useState


useState 는 하나의 값으로 들어가 있기 때문에 값을 복사해서 그대로 유지 시켜 주면 됩니다.

다만 변경하는 함수가 문제인데요.

이건 해당 컴포넌트를 변경하는 함수 기준으로 작성하면 넘어갈 수 있습니다.

그럴려면 해당 함수에 component 의 instance 를 넣어줘야 하네요.


그 외 Hook 들

함수 기준으로 작동하기 때문에 모두 초기화 합니다.

초기 생성된 함수의 context 가 옛날 클래스의 context 로 동작할거기 때문에 새로 생성된 context 랑 안 맞을 거에요.

즉, 옛날 콜백을 부르겠죠. 그래서 모두 지워줍니다.


Hook을 지우고 재구성 할 때는 hook 의 순서를 맞춰줘야 하기 때문에 훅 배열에서 특정 부분만 지우면 됩니다.


----------


이로써 대략적인 초기화를 할 수 있게 되었습니다.




9
7
박진호

박진호

끊어가야 하는 시점

sapa(리액트 같은 라이브러리) 와 그걸 사용한 UI 라이브러리 개발이 거의 막바지에 들어왔습니다.


조금만 더 다듬고 1차로 오픈해볼려고 하는데요. 막상 할려고 보니 문서화가 큰 걱정입니다. 원래 만든 코어 라이브러리보다 UI 는 훨씬 많거든요.


(일단 디자이너도 없도 개발자 혼자서 UI 컴포넌트 만드는건 엄청난 모험임을 알았습니다. 컨셉을 못잡겠어요 ^^;;)


UI 는 최소 2가지 형태의 가이드가 필요한데요.

  1. 디자인 가이드가 있어야 하고
  2. 개발자 코드 가이드도 있어야 합니다.


이 두가지를 매 컴포넌트를 만들면서 다 같이 할려니 진도가 하루에 1~2개 정도 밖에 못 나가네요.

다만 문서를 적고 보완하면서 기능도 다시 한번 보게 되기 때문에 좋은 점도 있는 것 같습니다.


-------


암튼 곧 오픈 할 수 있을 것 같습니다.

대략 3달 가까이를 엄청 달렸는데요.

이제 시작이라고 생각하고 더 달릴 예정입니다.


-------


그런 의미에서 개발할 때 문서를 얼마나 적으실까요?

실제로 문서와 기능이 동일하게 보장이 되실까요?

문서를 적는 것도 개발의 한 과정이고 하나의 영역으로 보실까요?


문득 궁금한점이 많아졌네요. ^^;;

이지로직 스튜디오

CSS/SVG 기반 웹디자인 툴

8
7
박진호

박진호

Skeleton UI 만들기

안 만들고 싶었지만 간혹 필요한 UI 들이 있습니다.


저의 경우는 Skeleton UI 가 그런 UI 중에 하나 인데요.

이유는 사이트 자체가 느리다라는걸 너무 명확하게 인지시켜주는 느낌이라서 그렇습니다.


그래도 만에하나 그런 경우들이 생길 수 있기 때문에 하나씩 만들어보고 있습니다.


다들 Skeleton UI 를 많이 쓰시나요?



5
1
박진호

박진호

progress circle UI 컴포넌트 만들기



sapa 로 UI 만드는 중에 progress circle 컴포넌트를 만들게 되었습니다.

원래는 따로 만들지 않을려고 했는데, 다른 UI 컴포넌트 중간 중간에 로딩 상태를 표현 해야하는 부분들이 있어서 작게 만들었습니다.


기본적으로 svg의 circle 을 사용하고 있고 stroke-dasharray 로 offset 을 맞춥니다.


사이즈는 정사각형으로 고정(width)입니다. min, max, value 에 따라서 offset 을 구할 수 있습니다.


offset = (value - min) / (max - min);


여기까지는 js 영역인데요. css 의 기능들이 조금 더 필요합니다.

----


offset 을 기준으로 stroke-dasharray 를 자동으로 표현할려면 어떻게 할 수 있을까요? 이 때부터는 css variable 이 힘을 발휘 합니다.


circle 은 small, medium, large, extra-large 의 크기를 가집니다.

각 크기마다 width 가 정의되어 있습니다. 그리고 stroke-width 도 정의 되어 있습니다. 이 말은 circle 의 크기마다 stroke-width 도 같이 영향을 받는다는 말입니다.


처음에는 width 기준으로만 원을 계산 했습니다.

이러다 보니 offset 이 자꾸 넘어가는 현상이 나왔다.

(stroke-dasharray 에 정의된 크기가 안 맞아서 원을 가득 채우게 되는 현상)


왜인지 몰라서 한참 생각하다 보니 circle 에서 stroke 가 중심을 기준으로 커진다는게 생각났다.


svg 크기가 50 x 50 으로 되어 있을 때 circle 도 25, 25 형태로 맞추면

svg 박스를 벗어나면서 그리는게 아니라 박스 안에 circle 을 그리게 되기 때문에

stroke 가 굵어지면 실제로 box 보다 작은 원을 기준으로 그리게 됩니다.


그래서 최종적으로 css 코드를 맞춰보면 아래와 같습니다.


// calculate svg circle size (width - bar-height) is circle raidus
--progress-circle-size: calc(var(--elf--progress-circle-width) - var(--elf--progress-circle-bar-height));


// stroke total length
--progress-total-length: calc(var(--progress-circle-size) * var(--math-pi));


// stroke offset length
--progress-gauge: calc(var(--progress-total-length) * var(--elf--progress-circle-offset));


stroke-dasharray: var(--progress-gauge) calc(var(--progress-total-length) - var(--progress-gauge));


(gauge) 크기와 (전체 - gauge) 크기를 맞추면 css 만 가지고 gauge 를 그릴 수 있게 됩니다.


ps.


참고로 --math-pi 는 따로 없기 때문에 아래와 같이 정의해서 쓰시면 됩니다.


:root { --math-pi: 3.141592653589793; }
10
0
박진호

박진호

sapa 가 어느 정도 마무리가 되어 간다.


sapa 는 react, vue 같은 ui framework(?) 이다.

(예전 버전은 여기에 ....

https://sapa.easylogic.studio/docs/tutorial-basics/start-sapa/)


기존에 만들었던 sapa 의 개념과 사용성을 jsx 로 맞춤으로써 내부 구조를 다시 만들었다.


jsx 로 구조를 맞춘건 기존의 리액트 개발자들에게 설명하기 쉽도록 하는 목적이 있다.

ui framework 라는 것도 결국은 누군가가 써줘야 하는 입장이니 이왕이면 유저가 많은 곳이 좋을 것 같았다.

그래서 문자열로 되어있는 template 구조를 jsx 형태로 만들고, vdom 개념을 추가 하고 , react 에 있는 몇가지 Hook 들도 비슷하게 넣었다.


겉으로 보면 react 랑 거의 흡사하지만 내부 구조는 완전히 다르다.


그런데 여기까지 하면 또 안 쓸 것 같아서 이번에는 UI 셋도 제공할려고 작업하고 있다.

이름은 elf (easy logic framework) 이다.


문서화 까지 다해서 오픈할려고 열심히 준비중이다.

그러다 보니 생각보다 오래 걸리지만 한 번의 베이스를 만들어 둬야 그 다음으로 갈 수 있기 때문에 마무리를 잘 해볼려고 한다.


곧 오픈할 수 있기를....


ps.

이걸 마무리 하면 아래와 같은 것들이 한번에 정리된다.


  1. ui framework 코어를 만질 수 있다.
  2. 디자인 시스템과 그 결과물의 ui component 를 같이 개발 할 수 있다.
  3. 원하는 기능은 코어에 직접 넣어서 작업 할 수 있다.
  4. 라이브러리 의존성이 많이 없어진다.




6
2
박진호

박진호

프런트 개발할 때 대략적인 나의 능력


  • 프록시 서버 만들 수 있음
  • 컬러피커 만들 수 있음
  • 위지윅 에디터 만들 수 있음
  • 그라디언트 에디터 만들 수 있음
  • 2d 벡터 그래픽 에디터 만들 수 있음
  • 2d 이미지 필터 만들 수 있음
  • 3d 이미지 필터도 살짝 만들 수 있음
  • 디자인 시스템 설계 및 구현이 가능함
  • 디지인 시스템만 있으면 한달안에 전체 (40개) 컴포넌트 개발 가능
  • 가상 스크롤 ui 도 개발 가능
  • 오픈소스 뜯어다가 폰트에디터 만들어본 경험도 있음
  • 한글 유니코드 조합해서 폰트 만들 수 있음
  • 프로모션 디자인 툴 만들 수 있음
  • 차트 코어, 렌더링 , 플러그인 시스템도 만들 수 있음
  • 리액트 같은 ui 라이브러리도 만들 수 있음


덕분에 기획자, 디자이너와 일 할 때 개발 가이드 라인을 구축할 수 있습니다.

우리가 어느 정도 수준이고 어디까지 개발 할 수 있고 뭐가 필요한지 이야기 해줄 수 있습니다.


-----


재미나게도 저 위에 있는 기술 대부분 실무에서 별로 필요가 없습니다. 왜그럴까요?


국내는 사업을 영위하기 위한 기술들이 대부분 이기 때문에 그렇습니다.

가져다 쓰는데 초점이 맞춰져 있습니다.

프런트엔드 개발자분들이 저런걸 개발하면 회사에서는 시간 낭비가 될 뿐이거든요.


그럴 때 마다 드는 생각들이 있죠.

우리 회사는 기술중심의 회사가 맞는지, 나의 개발자 커리어를 어떻게 해야할지 등등의 고민이 많이 됩니다.


좀 더 명확히는 프런트엔드 개발자 분들이 커리어를 쌓을 수 있는 어떤 명분을 회사에서 제공해주기 쉽지 않습니다.


그래서 저는 오픈소스 형태로 저런 것을 해보고 있습니다.


-----


가끔 그런 의문이 듭니다.


리액트 같은것을 회사에서 10년을 개발했으면 참 많이 발전 했을텐데 페이스북 좋은 일만 시키는 구나.


이런 생각이 들 때 마다 느끼는 것은 회사의 기술적 성장은 전적으로 사장님의 의지에 달려있다고 봅니다.


사장님의 목표가 구글, MS, 페이스북, 아마존 같은 곳이면 쌓아야 하는 기술이 레벨이 달라질 것 같습니다.


회사에서 개발자분들의 능력치(?), 어떤 것을 만들 수 있는 사람들인지 미리 알아두면 좋습니다.


개발자니깐 아무거나 만들수 있는 것은 아니기 때문이기도 하지만 저 정보를 알면 사업/ 기획/ 할 때 사전에 전략을 세울 수도 있습니다. 일만 주고 날짜 가기만을 기다리는게 아니라 시뮬레이션을 돌려볼 수 있게 됩니다.


결국은 사람도 데이타의 영역안에 놓여야 한다고 생각합니다.


여러 분들의 개발자들은 어떤 능력치가 있을까요?


이지로직 스튜디오

CSS/SVG 기반 웹디자인 툴

6
0
박진호

박진호

Sapa 에서 사용할 간단한 라우터를 구현 했습니다.


jsx 문법을 가지고 sapa 에서 사용할 간단한 라우터를 구현 하고 있습니다.


생각보다 코드가 짧아서 이렇게 해도 되나 의심이 좀 가긴 하지만


실제 코드는 이게 끝이네요.


여기서 hashchange 나 popState 같은 이벤트 처리를 어떻게 할지만 정리하면 될 것 같습니다.


export class Route extends UIElement {}

export class Switch extends UIElement {}

export class Router extends UIElement {

template() {

return this.getLastRoute();

}

getLastRoute() {

const target = this.props.target;

const switchObject = this.findSwitch();

const route = switchObject.props.content.find((it) => {

return it.props.path === target;

});

return route.props.content[0];

}

findSwitch() {

return this.props.content.find((it) => it.Component === Switch);

}

}

이지로직 스튜디오

CSS/SVG 기반 웹디자인 툴

3
2