오늘 한 일

  • 웬일인지 출근까지 한참 남은 시간에 눈이 떠졌다. 어제 자기 전까지 환경변수 설정 파일 작성과 관련해서 이게 맞는 건지 계속 고민하고 있었는데, 마침 나보다 훨씬 일찍 일어났다는 상현님에게 도움을 요청할 수 있었다. 덕분에 물론 애매한 부분은 있지만 적어도 완전히 틀리지는 않았다는 약간의 자신감을 얻었다.
  • 출근 시간이 되자마자 승진님께 다시 한 번 확인을 부탁드렸다. 아직 실환경 관련한 세팅까지 마무리할 수 있는 단계는 아니므로 일단은 적당히 맞게 했다-는 게 결론. 마무리 작업에 대해서 간략하게 설명을 해주셨는데 알아들을 수가 없었따.. 공부할 거리가 태산이다.
  • 승진님이 구글 소셜 로그인 버튼을 프론트단에 넣어 놓으셨다고 하시면서 코드 정리를 부탁하셨다. 환경변수 설정도 했으니 내친 김에 그 부분도 아주아주 약간 손을 봤다. 그런데 문제는 그 버튼이 로그인 페이지로 처음 진입했을 경우나 페이지 자체를 새로고침한 경우에는 잘 보이는데, 링크를 통해 회원가입 페이지로 넘어갔다가 돌아오면 버튼이 없다!?
  • 이걸 해결해 보겠다고 시간을 다 썼다. 하루종일 낑낑대다가 beforeMount와 mounted에 각각 구글 로그인 버튼을 렌더링하는 함수를 넣어놓으니 결과적으로 버튼이 두 경우 모두 잘 보이기는 한다. 그런데 브라우저 콘솔 창이 에러로 새빨갛다. 저 어떡하죠
  • 1시 30분부터 3시까지는 AWS 클라우드 컴퓨팅 웨비나를 BGM처럼 깔아놓고 있었다. 처음에는 열심히 들으려고 했는데 새로운 내용이 아주 많지 않았고 나중에 필요할 때 구글링해서 찾는 게 훨씬 빠를 것 같았다.
  • 용빈님이 docker로 서버 구동하는 게 잘 안된다고 하셔서 상현님과 셋이서 머리를 맞대고 허들을 했다. 그런데 충격적이게도 원인이 또 다시 VPN이었다...!? 잊을 만 하면 나오는 그것

오늘 한 일

  • 오늘은 드디어 말로만 궁금해하던 node.js + express를 로컬에서 그냥 돌려만 보았다. 명령어 몇 번이면 뚝딱뚝딱이었다. 그런 점에서 express generator는 리액트의 CRA와 비슷한 느낌이었다.
  • 일요일이니까 매우매우 간단하게 :)

오늘 배운 것

  • 토코톡 뷰 프로젝트의 package.json에 sass-loader 같은 게 왜 들어가 있는지 알게 되었다. <template>, <script>, <style>에 lang attribute를 주려면 해당 loader의 설치가 선행되어야 한다. vue loader 공식문서에 들어가서 어떤 loader가 필요한지 확인한 후 설치해주면 된다.
 

Using Pre-Processors | Vue Loader

Using Pre-Processors In webpack, all pre-processors need to be applied with a corresponding loader. vue-loader allows you to use other webpack loaders to process a part of a Vue component. It will automatically infer the proper loaders to use based on the

vue-loader.vuejs.org

  • 컴포넌트를 main.js에 import하면 전역으로 사용할 수 있다.
// main.js

import Component from '@/components/Component.vue';

Vue.component('Component', Component);
  • 전역으로 사용할 컴포넌트가 너무 많아서 일일이 import 하기 귀찮고 불편하면, 아래 링크를 참고하여 automatic registration을 실행하는 것도 가능하다.
 

Component Registration — Vue.js

Vue.js - The Progressive JavaScript Framework

v2.vuejs.org

  • PascalCase, camelCase, snake_case에 이어 kebab-case라는 것도 있다...!?
 

String Case Styles: Camel, Pascal, Snake, and Kebab Case

The most popular ways to combine words into a single string

betterprogramming.pub

오늘 한 일

  • 어제 올린 PR이 통과(?)되고 나서 부족한 부분을 보완하는 후속 작업을 했다. url 파라미터가 변경되는 대로 바로 반영되지 않는 건 로그인 페이지뿐만 아니라 다른 페이지도 마찬가지여서 어제와 마찬가지의 방식으로 수정했다.
  • 프로젝트 디렉토리 내 components 폴더에 index.ts를 생성해서 아직은 많지 않은 컴포넌트들을 배럴링 했다.
  • 아무튼 첫 번째 항목을 완료해서 마음 놓고 있었더니, 거기서 건든 것 외의 다른 url 파라미터가 바뀌면 그것 또한 전혀 반영되지 않는 문제가 제보되어 급히 수정했다.
  • 로그아웃을 하면 로컬스토리지에 이메일과 같은 유저 정보가 포함된 데이터들이 그대로 남아 있게 되어서, 유저 정보가 담긴 데이터는 삭제하도록 했다.
  • 이메일과 전화번호의 유효성을 검사하는 정규표현식을 거듭 수정하고, 회원가입할 때 뿐만 아니라 로그인을 할 때에도 적용하도록 했다.
  • 그리고 오늘도 약간의 뷰 공부를 했다.
  • 승진님이 프론트엔드 환경변수 설정과 관련해서 말씀하시는 걸 들으려고 시작한 허들에서, 끝은 약간 삼천포로 빠졌지만 1시간 20분간 너무 재밌고 유익한 시간을 보냈다. 정말 여쭤보고 싶었던, 근데 언제가 좋은 타이밍인지 모르겠던 '게임회사에서도 깃을 쓰나요' 질문에 대한 대답부터 시작해서 온갖 피가 되고 살이 되는 말씀을 해주셨다. 역시 짱짱시니어님

오늘 배운 것

  • Vue Router에서 path 대신 name을 사용하면, 나중에 path가 변경되더라도 일일이 찾아다니며 다 바꿀 필요 없이, router 디렉토리의 index 파일에서의 path 한 번만 바꿔주면 된다.
this.$router.push('/about') // 변경 전
this.$router.push({name: 'about'}) // 변경 후
 

Programmatic Navigation | Vue Router

Programmatic Navigation Aside from using to create anchor tags for declarative navigation, we can do this programmatically using the router's instance methods. router.push(location, onComplete?, onAbort?) Note: Inside of a Vue instance, you have access to

v3.router.vuejs.org

  • name과 함께 params를 넘기고, router의 index 파일 안에서 해당 route에 props: true 옵션을 주면, 그 컴포넌트 안에서 params를 그대로 props로 받아서 쓸 수 있다.
 

Passing Props to Route Components | Vue Router

Passing Props to Route Components Using $route in your component creates a tight coupling with the route which limits the flexibility of the component as it can only be used on certain URLs. To decouple this component from the router use option props: Inst

v3.router.vuejs.org

오늘 한 일

  • 지난 금요일 퇴근 직후에 맞닥뜨린 문제가 있었다. 리액트에서나 뷰에서나, url 파라미터를 받아서 로컬스토리지에 저장한 다음 그걸 꺼내서 화면에 띄워야 한다. url 파라미터가 바뀌면 그 즉시 스토리지에 저장된 값이 바뀌고, 화면에도 바로 반영 되기를 바랐다. 예를 들면 사용자가 A 사이트를 통해 로그인을 시도했다가 곧바로 로그아웃을 하고 나갔는데 바로 다시 B 사이트를 통해 로그인을 시도했다면, 이 사용자가 어디서 유입된 건지에 대한 데이터가 화면에 다르게 보여져야 한다. 리액트에서는 별다른 고민 없이 작성한 코드로 바로 원하는 결과가 나왔는데, 뷰에서는 그게 되지 않았다.
  • 이것저것 찾아보고 적용해봐도 보란 듯이 데이터는 따로 놀았고, 당장 너무 궁금하고 해결하고 싶었지만 금요일이니까 접어뒀었다. 그리고 월요일을 맞아 다시 꺼내보았다. 그런데 무심코 넣어 본 코드로 해결되었다!?
  • 컴포넌트가 마운트 될 때마다 실행되게 하려고 url 파라미터를 로컬스토리지에 저장하는 코드를 mount() 안에 넣어뒀었는데, 그 바로 아래에 해당 데이터가 있으면 그 데이터를 this.key에 할당한다. 그리고 template에서는 key를 보여준다.
<template>
	...
    <span>{{ key }}</span>
</template>

<script>
	...
    data() {
        key: '',
    },
    mount() {
        // url 파라미터를 로컬스토리지에 저장한 후
        if (window.localStorage.key) {
            this.key = window.localStorage.key
        }
    }
   	...
</script>
  • 그렇게 문제 하나를 해결한 후에 프로젝트 디렉터리에 있던 리액트 프로젝트를 통째로 뷰 파일들로 갈아치웠다. 커밋을 하려니 메시지에 적을 커밋 타입을 뭐라 해야 할지 모르겠어서 꽤 오래 고민을 했다. feat, fix, chore도 아니고, 그렇다고 modify, change도 아닌 것 같고. 결국 질문을 남겼고 동균님 말씀대로 refactor를 선택하기로 했다.
  • 프로젝트 매니저로 yarn을 쓰던 리액트에서 npm을 쓰는 뷰로 바꾸면서 리드미 내용도 수정하고 안심하며 PR을 날렸는데, copy 파일들이 함께 올라가 버렸다. 첫 리뷰를 받은 후에야 실수를 알게 되었다. 대체 왜 안심했지
  • 그리고 오늘은 뷰 공부를 조금 했다. 이제는 조금 익숙하게 쓰고 있던 vue cli 말고도 터미널에 vue ui 명령어를 입력하면 브라우저에서 ui를 통해 프로젝트를 관리할 수 있다는 것도 알게 되었다.
  • 상현님한테서 얻은 소스 덕분에 마우스 커서에서 물방울이 생긴다. 그리고 블로그 테마 색상을 변경했다. 물론 난 파란 계열을 선호하지만 기존 색상도 괜찮다고 생각했는데 신랄하게 공격을 받아서 흑흑 조금 마음이 아프다.

오늘 배운 것

  • 다양한 코드 스니펫을 제공하는 Emmet을 vue에서도 사용할 수 있다는 것도 처음 알았다. 리액트만 가능한 줄...
 

Emmet — the essential toolkit for web-developers

Emmet — the essential toolkit for web-developers Emmet is a plugin for many popular text editors which greatly improves HTML & CSS workflow: Demo | @@@ tooltip: Type CSS-like abbreviation type: ul#nav>li.item$*4>a{Item $} wait: 1000 tooltip: Run “Expan

emmet.io

 

오늘 한 일

  • 지금 우리의 SSO 프로젝트에 작업 기한이 붙어버렸다. 어, 뭐 사실 저번 달에도 앞으로 한 달 정도 예상한다고 하셨었는데 생각해 보면 거기서 크게 달라진 건 없는 것 같긴 하다.
  • 아무튼 그래서 어쨌든 나는 계속해서 리액트 작업분을 뷰로 다시 똑같이 구현 중에 있는데, 갑자기 머리가 잘 안 돌아가는 것 같고 머릿속이 좀 뿌예지는 것 같고 뭔가 생각한 대로 안 되고 있다. 리액트에서는 이렇게 이렇게 하니까 잘 됐는데, 왜 뷰는...! 그러니까 나는 뷰린이가 맞아
  • 일단 여기서 첫 번째 문제. 뷰 공식문서를 다 안 봤다. 이것부터 처리(?)해야 한다. 리액트도 사실 공식문서를 보기 전에는 얼기설기 대충 돌아만 가는 코드를 짤 뿐이었다. 지금은 그때보다 더 능숙하게 잘 한다고는 말 못하지만, 코딩하면서 스스로 의심해야 할 포인트, 구글링에 적합한 검색 키워드, 에러가 나면 디버깅을 시작해야 하는 지점, 다른 사람들의 코드에서 눈여겨 보아야 하는 것들을 그래도 많이 알게 되었다. 보통 그런 것들은 공식문서에서 짚어주기 때문이다.

오늘 배운 것

  • 공부 열심히 해야지. 역시 다른 차원에 있는 코드를 한 번 구경해 봐야 정신을 차리지.
 

[TIL] 2022.03.04 - 무스택인데 놀람

오늘은? Store Sync 주간 데모 놀랐다 회고 현재 작업 목록 FE: help button + dialog + QA link + chat room link BE: product delete sync PR review solve loadtest: k6-kafka BE: product delete sync V2 하는..

firstquarter.tistory.com

 

오늘 한 일

  • 오늘은 출근 5분 전에나 일어나던 평소보다 훨씬 일찍 일어나서, 업무 시간 전에 어제 못 받은 물리치료를 받았다. 저번보단 안 아팠지만 여전히 아팠다.
  • 목요 테크 세션인 어쩔살롱에서 마이크를 잡게 되어 얘기할 내용을 급하게 정리했다. 주제는 리액트와 뷰인데 발표의 포인트를 어떻게 잡을지는 어제부터 계속 고민을 했었다. 사실 내용 정리도 어제 밤에 하려고 했었지만 깜빡 잠들어 버렸기 때문에 결국 벼락치기가 되어 버렸다ㅠㅠ 하지만 아직 너무 겉만 알기 때문인지 내용을 어떻게 다듬어 봐도 썩 마음에 들지 않았다. 시간은 얼마 없고 강행하게 되었는데, 비록 마음에 걸리는 구석이 많았어도 일단 끝나고 나니 속이 후련하다.
  • 어제 급히 붙였던 로그아웃 기능에 쿠키를 핸들링 하는 코드가 없어서 겉으로는 로그아웃이 된 것 같아 보여도 클라이언트를 통해 재진입하고 나면 로그아웃 버튼을 누르기 전의 그 계정으로 이미 로그인한 상태가 되어 버렸다. 생각도 못하고 있다가 영봉님의 제보로 알게 되었다.
  • 그래서 로그아웃을 하면 브라우저의 쿠키를 삭제하게끔 했는데, 승진님이 자바스크립트로 쿠키에 접근할 필요는 없겠다고 하셨다. 그것도 그런가 싶어서 승진님이 api 응답 헤더에 넣어 보내주시는 Set-Cookie 속성을 받을 수 있도록 요청에 withCredentials: true를 넣었다. 근데 우리 코드에서 자바스크립트로 접근을 지양한다고 해서 모두의 접근이 차단되는 건 아니지 않나..? 결국 httpOnly 같은 옵션이 들어가야 하지 않을까?

오늘 배운 것

  • 대충 스킴만 했으므로 시간 내서 다시 읽어보자.
 

쿠키와 document.cookie

 

ko.javascript.info

 

오늘까지 한 일

  • 이번 주부터 다시 어깨가 근육 뭉친 것마냥 아프기 시작했다. 1월에도 한 일주일간 그랬었는데, 잠을 도대체 어떻게 잤길래 이렇게까지 어깨가 쑤시나 하고 그냥 넘겼었다. 그런데 이번에 다시 또 비슷하게 아프길래 월요일에는 병원에 가봤다. 네? 일자목이요?
  • 태어나서 처음으로 물리치료라는 것을 받아봤다. 어깨 아픈 건 생각도 안 날 만큼 정말 너무 아팠다. 치료 끝나고 한 세 시간쯤 지나니 아픔이 좀 가시고 시원해지기는 했는데 그때까지 다소 고통스러웠다. 사실 오늘도 가야 했는데 어쩌다 보니 안 갔다. 오늘 꼭 오라고 신신당부 하셨었는데..
  • 오늘 오전에는 앞으로 생각해봐야 하는 것들에 대한 회의가 있었다. 나름대로 열심히 귀기울여 들었지만 내 머리로는 정보 처리의 한계가 있었다ㅠㅠ 일단 지금까지 기본적인 로그인 플로우는 구현을 했고, 앞으로 작업해 나가야 하는 과정들을 짚어보는 단계였다. 결국 지금 하는 프로젝트는 구글이나 페이스북 같은 소셜 로그인 어플리케이션을 만드는 것인데, 단순히 로그인 기능만을 제공하는 것이 아니라 이미 있는 사용자 계정들과도 데이터를 통합할 수 있어야 하기 때문에 생각해야 하는 경우의 수도 많아지고 계산이 복잡해지는 것 같았다.
  • 근데 나는 일단 저번까지 만들어놓은 기본적인 기능들에서 로그아웃을 빼먹은 상태였다. 어렵고 손이 많이 가는 작업은 아니니 일단 그것부터 하고 나서, 앞으로 할 일이 많아져 코드가 더 복잡해지기 전에 지금 단계에서 리액트를 뷰로 엎어치기로 했다.
  • ? 그런데 서버가 안 켜졌다. (????) 로그인을 하든, 로그아웃을 하든, 서버를 돌려놔야 테스트를 할 수가 있는데 원래 하던 대로 명령어를 입력해도 터미널에서 자꾸 에러가 났다. 에러 메시지 내용으로 보아 100% 이해는 못하겠지만 mongoDB 관련인 것 같아 설치도 해보다가 설치마저도 잘 안 되고? 커맨드 에러 자꾸 나고? 수렁으로 빠져드는 삽질.. 혹시 내가 갯벌에 대고 삽질 중인가
  • 삽질 삽질 끝에 영봉님께 헬프를 쳐봤다. 에러가 나는 상황을 보여드리니 잠깐 고민하시더니 "혹시 VPN 켜셨나요?" 하셨다. ??????????????????????????????????예...???설마 제가 안 켰나요?????????

오늘 배운 것

  • 아무리 주니어라지만 너무 부끄럽다. 스스로 박제하고 다신 이러지 말자. DB 사용할 때는 VPN을 꼭 켭시다. 나 자신아 제발...ㅠㅠ

+ Recent posts