전체 글 39

Node.js 가 뭐임?

들어가며 SSR 를 위해 Nuxt 를 하면서 결국엔 Node 서버까지 알아야 되는 상황에 처했다 이전에 공부하긴 했었지만 "대충" 훑기만 했었기 때문에 이게 뭔지 다시 톺아 보려고 한다 Node.js 가 생기게 된 배경 기존에 javascript 는 웹에서만 쓰이는 언어였다 나 첨 시작할 땐 언어라고 인정해 주지도 않았음 이때는 js 가 그저 html 을 예쁘게 만들어 주는 도구 정도였다 chrome 에서 v8 엔진을 만들었는데, 이게 무지 빠른 엔진이었던 것이었다 그리고 그 당시 웹 서버들은 매 요청마다 별도의 스레드를 생성하고 있었는데, 그게 리소스를 넘 많이 소모하고 확장성에 한계가 있었음 따라서 비동기 이벤트 주도 방식을 도입한 Node.js 를 개발하게 된 것임 I/O 작업이 블락되지 않아서 높..

백엔드/Node 2024.04.21

클로저 패턴이란 무엇인가

들어가며 의도치 않게 너무 어그로 끄는 제목이 되었는데, 별 생각 없이 정한 제목입니다... 이 글은 그저 끄적이는 글이기 때문에 엄청난 의식의 흐름일 수 있습니다 갑자기 뿅 하고 끝날 수도 있으니, 이 점 양해 부탁드립니다 ㅎ;; 배경 최근 react 를 공부하면서, 클로저 패턴을 자주 쓰게 되었음 (예를 들어, click과 같은 이벤트 핸들러 함수에 특정 값을 넘기면서 이벤트도 함께 넘기고 싶을 때 이 패턴을 활용하곤 하더라) 예시 export default function App() { const togglePopover = (index) => (e) => { e.preventDefault(); e.stopPropagation(); setOpen(openedIndex === index ? null ..

Vue2, Vue3 에서 지원되는 라이브러리를 만들어 보자

개요 디자인 시스템을 만들 때, 컴포넌트 모듈화를 하고 싶다는 생각이 들었다 마치 Vuetify 와 같은 사내 라이브러리를 만들고 싶었다 하지만 사내 기술은 Nuxt2 로 이루어지고 있었다 Vue2 만 지원하기엔, Vue2 에 대한 지원이 끊기고, 앞으로 나아가야 할 방향은 Vue3 이기 때문에 vue2, vue3 둘 다 지원이 필요했다 삽질 다른 라이브러리들은 Vue 버전을 어떻게 지원하는걸까? quasar:: 3버전부터는 vue3 만 지원 Vuetify:: 3버전부터는 vue3 만 지원 ㅜㅜ 진짜 없는걸까 새로운 라이브러리를 발견 https://github.com/vueuse/vue-demi 열심히 구글링하다 보니 vue-demi 라는 것을 발견함 description 에 적혀있듯이, Vue2 와 V..

프론트/Vue 2024.04.20

IDE 켜지면 저절로 node 버전 셋팅되도록 하기

개요 IDE 를 킬 때마다 매번 node 버전을 셋팅하는 것이 킹받았다 사전 작업 프로젝트의 node version 을 .nvmrc 로 추가해 놓는다 // .nvmrc 12.16.3 이것은 각 개발자가 로컬에 갖고 있는 것이 아닌, 프로젝트 디렉토리에 넣고, git 에 올리는 편이 나을 것 같다 (모든 개발자의 노드 버전을 맞추기 위해) zsh 설정 터미널에 vi ~/.zshrc 입력하여 zshrc 파일을 엶 최하단에 아래 내용을 넣고 > esc > :wq 하여 저장 autoload -U add-zsh-hook load-nvmrc() { local node_version="$(nvm version)" local nvmrc_path="$(nvm_find_nvmrc)" if [ -n "$nvmrc_path"..

시각적 회귀 테스트 - Backstop

간단 배경 설명 아토믹 디자인 패턴 도입하면서 몇 가지 한계점이 보이기 시작하였다 하나를 조금만 바꿔도 전체가 망가지는 상황이 생김 예를 들어, base swiper 에서 height 하나 조정했더니 메인이 이상하게 꼬여버림 이유는 메인에 스와이퍼가 있어서 그런 것 그래서 코드 변경하는 걸 좀 망설이게 되었고 페이지가 망가지는 걸 막기 위해 여러 방어 로직을 넣기 시작했는데, 이런 코드들이 개발자들 간에 오히려 혼란을 주고 있었음 그래서 생각했다 누군가 매번 지켜보고 있다면 이런 문제가 없지 않을까? 여기서 '누군가 지켜보고 있다'는 건 >> 테스트 코드라는 생각을 했다 데이터 중심의 유닛 테스트는 인증 같은 명확한 로직에는 잘 맞지만, 시각적인 변화를 테스트하기에는 한계가 있겠다는 생각이 들었다 “시각..

프론트 2024.04.07

23년을 돌아보며

의식의 흐름으로 작성한 글입니다.. 그냥 무시해 주세요 ,, 적어야지... 적어야지 하다가 3월 중순인 드디어 적게 된다 23년에는 많은 일이 있었다 회사의 일 조직의 변화와 그에 따른 업무 강도 변화 내 역할과 캐릭터의 변화 개인적인 일 비사이드 참여 개발자 커뮤니티와 알고리즘 스터디 참석 특히 회사의 업무 강도는 2023년 중반부터 급격히 세져, 많은 도전을 겪었다 하지만 이런 변화는 나에게 중요한 개인적 발전의 기회가 되었다 깊게 공부하게 된 기술 Node.js 에 대한 공부 상태에 대한 공부 디자인 시스템에 대한 공부 도커에 대한 공부 다른 팀과의 효율적인 커뮤니케이션 방법 탐색 개인 프로젝트에서의 발전 aws 와 비슷한 NCP 에서 처음 서버를 다루게 됨 도커를 처음부터 구축하게 됨 Next.j..

주절쓰 2024.03.15

프론트엔드에서의 테스트 코드에 대한 생각

의식의 흐름으로 글을 써 본다... 조직 내에 QA 가 있지만, 때로는 QA 에 의존할 수 없는 상황이 생긴다 예를 들어, 1. 이미 다 통과한 QA 인데 리팩토링을 하고 싶거나 2. 잘 돌아가고 있는 서비스를 리팩토링 하고 싶거나 3. 아니면 이미 리팩토링을 해 버렸거나 (;;;) 소스 코드가 '더러운' 것을 알면서도, 경력이 쌓일수록 그 더러움을 그냥 참고 넘어가는 경우가 많아진다 그 이유는... 나 자신도 포함해서, 그렇게 코드를 작성할 수밖에 없었던 여러 이유들이 있기 때문이다 어떤 코드를 볼 때, 나중에 보면 '이걸 왜 이렇게 짰지? 멍청인가...' 라고 생각할 때가 있다 미래의 나는 그저 리팩토링을 진행하고, 그 결과로 나비 효과 같은 장애가 발생하기도 한다 이런 경험이 쌓이다 보면, 결국엔 ..

주절쓰 2024.03.15

SSR 에서 상태 오염을 방지하자

개요 최근 개발 시 상태 오염이 발생한 것이 잦았다 따라서 겪었던 이슈와 함께 어떻게 해결했었는지 정리해 보고자 한다 발단 상태 오염으로 인하여 토큰이 잘못 들어간 이슈가 발생 백엔드에서는 해당 토큰으로 인증을 시키기 때문에, 사용자가 교체되어 데이터가 인입된 증상이 발생하게 됨 원인 프론트의 서버에서 상태를 싱글톤 상태로 만들어서, 하나의 전역 상태를 공유하게 됨 싱글톤 상태가 되었던 이유 js 에서는 모듈이 싱글톤 형태로 이루어짐 (import, require 등) export 해 준 객체를 그저 참조를 해서 사용하고 있었음 vuex 에서 module 을 등록할 때 참조한 모듈의 주소만 넣어 등록하기 때문에, 매 요청마다 모듈의 state 를 만드는 것이 아닌 참조만 하고 있었음 해결 방안 modul..

IDE 켜지면 저절로 node 버전 셋팅되도록 하기

개요 IDE 를 킬 때마다 매번 node 버전을 셋팅하는 것이 킹받았다 사전 작업 프로젝트의 node version 을 .nvmrc 로 추가해 놓는다 // .nvmrc 12.16.3 이것은 각 개발자가 로컬에 갖고 있는 것이 아닌, 프로젝트 디렉토리에 넣고, git 에 올리는 편이 나을 것 같다 (모든 개발자의 노드 버전을 맞추기 위해) zsh 설정 터미널에 vi ~/.zshrc 입력하여 zshrc 파일을 엶 최하단에 아래 내용을 넣고 > esc > :wq 하여 저장 autoload -U add-zsh-hook load-nvmrc() { local node_version="$(nvm version)" local nvmrc_path="$(nvm_find_nvmrc)" if [ -n "$nvmrc_path"..

프론트 2024.03.10