오늘 한 일

  • 아침 스크럼이 끝났을 때를 적당히 노리다가 케이님과의 허들 타임에서 어제까지 온갖 종류의 에러를 만난, 변명 아닌 변명을 구구절절하게 풀었다. PoC 프로젝트인 만큼 속도가 중요해서, 빠르게 작업할 수 있다면 리액트를 사용해도 괜찮다고 하셨다. 역시 PoC이기 때문에 리액트로 짜 놔도 코드 전체가 다 엎어질 수 있다고도 하셨다.
  • 그렇다면 나는 배운 게 도둑질이라 리액트로 속도를 내보기로 했다. 지금까지 손댔던 모든 부분을 미련 없이 통째로 밀어버리고 프로젝트를 다시 생성했다. 오늘 만든 페이지는 단 두 개, 로그인과 회원가입이었고 디자인은 원래 있는 것을 그대로 따다 썼다. 두 페이지를 라우팅 하는 과정에서는 드디어 react-router v6를 적용해 보았다. <Switch>가 <Routes>로 바뀌고 <Redirect>가 없어지는 등 다양한 변경사항이 있지만 공식문서가 워낙 잘 되어 있어 큰 어려움은 없었다. 애초에 <Route>가 둘밖에 없기도 하고
  • 단순한 유효성 검사 정도의 간단한 기능만 붙인 후 작업을 마쳤다. 상현님의 도움으로 내 생애 첫 PR을 날려보았다. reviewer에는 세 분 다 올려놓고 한 분 확인이 나자마자 기다렸다는 듯이 바로 머지했다는 게 함정ㅋㅋ..
  • PR도 해봤겠다, 그러고 나니 이제는 기능을 붙여야겠는데, 로그인이나 회원가입에 쓸 api가 있는지, 있다면 어떤 건지, 명세는 있는 건지를 전혀 모르겠다는 문제가 있었다. 지금 진행되는 이 프로젝트에서 내가 맡은 부분이 정확히 어디까지인가도, 처음에는 안다고 생각했는데 생각할수록 아리송했다. 그래서 잠깐의 낯가림 고민 끝에 채널에 헬프를 쳤다. 그리고 발렛 키를 든 승진님이라는 천사가 날아왔다..
  • 지난번 첫 싱크업 때의 미로 보드 한쪽에 도식을 그려가며 거의 40분 가량 설명을 해주셨다. authentication과 authorization부터 시작해서 OIDC, OAuth의 기능과 역할, 전체 흐름이 어떻게 되는지, 거기서 내가 작업할 파트가 무엇인지까지... 설명을 잘 못하시는 것 같다고 자꾸 말씀하셨지만, 이해가 너무 잘 되는 설명이었고, 만약 이해가 안됐다 하더라도 그건 제가 바보이기 때문인 거죠ㅠㅠ 그리고 바쁘실 텐데 시간 내 주셔서 감사하다고 말씀드리니 시니어들은 이런 설명을 하는 것도 시니어의 일이라고 생각한다고도 말씀하셨다. 나도 꼭 이런 멋있는 시니어가 되고 말겠다.

오늘 배운 것

  • 상현님한테 PR 날리는 법을 배우는 중에 git commit -am 명령어로 git add . 를 생략하고 한 번에 입력하는 방법이 있다는 것을 처음 알았다! 충격 나는 그것도 모르고 지금까지 일일이 git add . 입력 후에 git commit -m 을 했다. 다만 나는 새로 생성한 프로젝트에서 git add 를 한 번도 한 적이 없기 때문에 오늘 나의 경우에는 적용할 수 없었다.
 

Git commit할 때마다 add하지 않는 법, 기본 에디터 변경

그동안 버전 관리할 때 nano hello1.txt git add hello1.txt git commit -m "Message 3" 이렇게 일일이 귀찮게 입력하지 않아도 되는 법! git add . 현재 디렉터리 밑에 있는 모든 파일을 add git add 디렉토리..

hyunjungchoi.tistory.com

  • authentication(인증): 유저가 누구인지를 식별하는 과정, authorization(인가): 식별한 유저에게 적절한 권한을 부여하는 과정
 

What Is the Difference Between Authentication and Authorization?

While authentication and authorization are often used interchangeably, they are separate processes used to protect an organization from cyber-attacks. As

www.sailpoint.com

 

편의성을 높인 ID 인증 관리 - OIDC[OpenID Connect]가 주목 받는 이유

편의성을 높인 ID 인증 관리 - OIDC[OpenID Connect]가 주목 받는 이유

www.samsungsds.com

 

OAuth 개념 및 동작 방식 이해하기

1. OAuth란? image 웹 서핑을 하다 보면 Google과 Facebook 및 Twitter…

tecoble.techcourse.co.kr

오늘 한 일

  • 아직 API도 붙이지 않은(그냥 내가 알아서 원래 있는 API 적당히 갖다 붙여놓고 시험 중인) 페이지만 계속 만지작거렸다. 오늘 안에 끝나지 않을까 싶어서 아침 스크럼 때 그렇게 말했는데 웬걸, 하루 웬종일 시간 다 잡아먹고 결국은 오늘을 넘기게 되었다. 언제나 그랬듯이...
  • 게시판과 같은 종류의 페이지를 만드는 건 여러 프로젝트를 거치며 쉽게 할 수 있다고 생각했는데, 지금껏 해 온 것과는 조금 다른 형태를 다루게 되니 마냥 새롭기만 하다. 회사 일이다 보니 조금 더 신중히 작업하게 되는 것도 같다.
  • DB에 저장된 항목들이 input(text, file)이나 select로 알아서 나열되어야 한다. 당연하게도, DB에 저장된 그 항목들은 언제든지 개수가 늘어날 수도, 줄어들 수도, 내용이 바뀔 수도 있다. 그러다 보니 input과 select가 어떤 순서로 몇 개가 나열될지는 알 수 없다. 그런 상황에서 useRef로 해당 태그의 값들을 가져오고 싶은데, 일일이 선언하자니 말도 안되는 짓인 것 같았다. 만약 input 태그가 극단적으로 많아져서 100개라면!? 1억개라면!? (생활코딩?ㅋㅋㅋ)

오늘 배운 것

  • 그래서 찾아온, useRef의 초깃값을 애초에 배열로 줘버리고 배열로 관리하기 링크.
 

useRef() 여러개 관리 하기

웬만한 컴포넌트에서 거의 다들 useState 혹은 useRef 를 많이 쓸 것이다. useRef로 각각의 input 타입들에 접근해 값을 뽑아내려고 했는데 그 개수가 조금 많았다. const userRef = useRef(); const phoneRef = u..

devilfront.tistory.com

오늘까지 한 일

  • 이게 TIL인지 WIL인지 모르겠다...ㅋㅋ블로그 한 번 들어와 볼 시간 없을 정도로 정신없는 게 뭔지 이제는 알 것 같다. 오늘까지 뭘 했는지 다 적으려면 시간도 많이 걸릴 것 같고, 사실 머릿속이 뒤죽박죽이라 정리하기가 어렵다. 생각나는 대로 간단히만 적겠다.
  • 모바일 사이즈로 미디어쿼리를 한창 적용하고 있던 중에 발견되는 다른 오류들을 고치고 하다 보니 결국 오류의 늪에서 벗어나지 못하고 모바일 사이즈는 절반도 채 제작하지 못했다. 그리고 난 아직도 그 안에...
  • 있어야 하지만 아직도 없는 페이지들을 급히 만들었다.
  • AWS에서 SSL 인증서를 발급받아 https 도메인을 적용했다.
  • 구글, 카카오 소셜로그인 기능 적용하는 것을 백엔드 팀원인 하영님과 함께 며칠에 걸쳐 시도해 보았는데, 기능을 다 붙여놓고 나서 처음에는 둘 다 잘 되는 듯했다. 나중에는 유독 구글 로그인 후에만 CORS 에러가 빈번하게 발생했다. 구글 쪽으로는 눕고 싶지도 않았다..
  • 이 CORS 에러를 해결하기 위해 XMLHttpRequest, 프록시 설정 등 온갖 찾을 수 있는 해결책은 다 때려 넣어봤다. 몇 시간을 붙잡아도 해결이 되지 않아서 우리는 CORS 에러 자체가 나오지 않는 환경을 만들기 위해 동일 도메인 배포를 시도했다. 48시간 동안 6시간만 자는 고난을 겪었지만 마음처럼 잘 되지는 않았다. 하지만 그렇게 긴 시간, 잠을 제대로 안 자도 열중해서 뭔가를 파고들 수 있다는 게 스스로 참 신기했다. 비록 결과는 만족스럽지 않았을지라도, 과정 자체에서 배운 게 많았다.
  • 바로 윗 단락을 훈훈하게 마무리했지만, 동일 도메인을 포기하자마자 기다렸다는 듯이 https 배포가 말썽을 일으키기 시작했다. 도메인부터 해서 기본적인 설정들이 워낙 많이 다시 바뀌었으니 배포도 처음부터 차근차근 다시 했는데, 잘만 됐던 https가 이번에는 안 되는 것...!!! 울며 겨자먹기로 https마저 보류했다. 인터넷에서는 어쩜 그렇게 다들 쉽게 설명해 놨는지 모르겠지만 모든 방법을 다 따라해도 안 됐다ㅠㅠ(사실 나도 첫 번째 배포는 쉬웠어...)
  • 1주일 내내 시도해본 것은 많았는데, 그랬던 것치고는 손에 쥘 수 있는 결과물이 얼마 없었다. 프로젝트에 적용을 못했으니 결국 누구도 이런 피나는 노력을 알아봐주지 않을 테니 허탈했다. 그래도 좋은 경험이었다. 대표적으로 하영님 말씀대로, AWS는 하도 들락날락거려서 이제 예전만큼 어렵게 느껴지지 않았다.
  • 그러고 나서는 다른 조보다 늦어진 1차 배포를 준비했다. 크고 작은 에러, 어떤 경우에는 발생하고 어떤 경우에는 발생하지 않는(왜인지 원인을 아직 모르겠는) 에러들이 많은 상황에서 최대한 에러를 잡고 오류를 수정했다. 미완성인 부분이 꽤 있지만 어찌 됐든 일단 1차 배포는 할 수 있었다. 이건 '1차'니까 계속 수정하고 다차 배포하면 되지ㅎㅎ
  • 배포를 하고 나서 든 생각인데, 어차피 나 스스로에게나 누군가에게나 지적받을 수밖에 없는 오류라면 배포해서 보여줘버리고 피드백으로서 추후에 반영하는 것도 괜찮은 것 같다. 조금이라도 더 고쳐놓고 배포하려고 하니 그 과정에서 시간이 너무 많이 걸렸고 효율적이지 않을 수 있다. 한 번 배포했다고 프로젝트가 끝나는 게 아닌데 피드백 받을 수 있는 기간이 긴 게 더 낫지 않았을까.
  • 1차 배포 기념으로 처음으로 우리 팀 넷이서 맥주 한 캔씩 들고 얘기하는 시간을 가졌다. 프로젝트 관련이 아닌, 그냥 그때그때 생각나는 얘기 아무거나 할 수 있다는 게 너무 좋았다🍺
  • 다들 주무시러 가셨고 나는 배포 이후에 바로 들어온 피드백 중 오류 관련한 사항들을 몇 가지 해결했다. 그리고 오랜만에 이렇게 TIL 아닌 TIL을 쓴다.
  • http://talkbout.camphttps://talkbout.camp

돈 주고 샀으니 여기에라도...

 

내일 할 일

  • 내일은 스파르타 대표와 우리 팀 전체의 면담이 있다. 그 전에 일어날 수 있겠지...?
  • 모바일 사이즈 미디어쿼리를 후딱 적용하고 피드백 들어오면 가급적 바로바로 처리하자.
  • 튜터님 면담 이후 작성한 할일 목록 중 이제 추가적으로 적용할 사항들 몇 가지만 남아 있는데, 하나씩 시도해보자.
  • 그러고도 시간이 남으면 https와의 재대결을 위해 공부를 하자.

어제까지 한 일

  • 며칠 만에 쓰는 TIL인지 모르겠다. 게을러서 혹은 바빠서 안 쓴 것도 있었지만, 그동안 멘탈 터질 일이 많았다. 아직 잠을 안 잤으니 오늘이 토요일이라 치면, 엊그제인 목요일에 우리 팀 프론트 두 분이 항해99에서 동시에 하차하셨다. 이로써 놀랍게도 우리 팀 프론트에는 나 하나 남게 되었고(ㅋㅋㅋ) 추가하려던 기능은 거의 모두 포기해야 했다.
  • 하차 이유야 어찌 됐든 사전에 귀띔 한 번 하지 않은 것은 문제였다고 본다. 하지만 이미 앞으로의 시간은 2주도 채 남지 않았고, 이 문제에 대해서 왈가왈부할 시간도, 여유도 없었고, 감정 소모조차 하고 싶지 않았다. 팀장님 포함 팀원들도, 항해99 매니저님도, 리액트 튜터님도 모두가 나를 너무 걱정했다. 감히 짐작건대, 그 걱정은 1차적으로는 '이러다 얘마저 하차해버릴 수도 있겠는데...?' 하는 마음 아니었을까. 그렇지만 나는 애초에 하차를 고려해 본 적도, 외부 요인으로 하차할 마음도 전혀 없었다. 다른 분들의 우려는 이해하지만, 그 우려가 나는 약간 찜찜했다. '내가 그렇게 책임감이 부족해 보이나?' 싶었다. 그리고 사실 하차하신 두 분이 나에게 그렇게 영향력 있는 분들은 아니었으니 흔들릴 일도 아니었다.
  • 아무튼 급한 대로 당장 코드 리팩토링부터 시작했는데, 구석구석 살펴보다가 알게 된 사실은 이미 태블릿 사이즈 CSS 적용 단계로 넘어간 상태였음에도 데스크탑 버전조차 삐끗하는 부분들이 있다는 거였다. 그러니 태블릿 버전은 말할 필요도 없었다. 이번 주 초에 두 분에게 '계획을 세워서 작업을 (빡세게) 해보자'고 얘기했었고(실제로는 하다 보니 그렇게 진행하지도 못했지만) 혹시 그것 때문에 부담을 느끼셔서 하차를 고민하신 게 아닐까, 잠시 그런 생각을 했었다. 하지만 코드를 정리하면서, 아무리 그렇게 얘기했어도 실제로 작업을 수행하는 쪽에서 전혀 협조적이지 않았었다는 것도 깨달았다. '이것도 안 했다고?' 하는 생각이 끝없이 중첩되고, 리팩토링을 하면 할수록 기운이 빠졌다. 상황을 이렇게 만든 나 자신에게 너무나 실망스러웠다. 밤새 코드를 만지고 나니 밤낮은 완전히 바뀌었고 기분도 많이 상했다.
  • 그런 상태에서 어제 금요일 낮에는 튜터님이 오셔서 이 절망적인 상황을 타파하기 위해 전체적인 프로젝트 코칭을 해주셨다. 물론 프론트 중심이었지만, 튜터님이 오셔서 촌철살인 해주신 덕분에 앞으로의 작업 방향이 구체적으로 세워질 수 있었다. 내가 프론트지만 프론트는 정말 진짜로 엄청나게 꼼꼼해야 한다는 걸 절실하게 배웠다. 단 한 번도 생각지도 못한 포인트를 끝도 없이 짚어주셨다. 말 그대로 디테일에 강해야 했다. 할 일 목록이 길어지다 못해 바닥에 끌릴 정도였다. 그마저도 지금 나 혼자인 상황을 고려해서 규모가 크거나 시간 소요가 많을 만한 작업들은 다 제외하고 말씀해 주신 거였다.
  • 그러고 나니 체력도 정신력도 온통 고갈되어 버려서 침대에 눕거나 눕지 않더라도 정신없이 잠들고 아주 난리가 났었다.

오늘 한 일

  • 튜터님이 가르쳐 주신 포인트들을 우선순위를 매겨 대충 정리한 후 위에서부터 하나씩 지워나가고 있다. 하지만 다 지우려면 아직 한참 멀었지...
  • 리스트로 죽 나열한 이미지 카드들에는 투명도가 낮게 설정되어 있고, 동적인 느낌을 주기 위해 마우스 호버 시에만 투명도를 높이게 되어 있었다. 그러다 보니 호버 효과가 나오면 이미지 위에 하얀색으로 적힌 타이틀이 거의 안 보이는 문제가 있었다. 텍스트 쪽을 어둡게 처리하면 된다는 그림이 그려졌고, 튜터님은 텍스트 쪽에 알파값을 주면 된다고 하셨었는데, 관련해서 아무리 검색을 해도 이렇다 할 시원한 해결책이 보이지 않았다. 결국 처리방법의 정석은 아닌 것도 같지만, 의사 요소 ::before와 linear-gradient를 적절히 섞어 이용했다. 마음에 드는 모양을 만들어 낼 때까지 너무 많은 시간이 걸렸다.
const ImageDiv = styled.div`
	opacity: 0.4;
    &:hover {
    	opacity: 0.9;
        ::before {
            position: absolute;              // 부모 요소에 position: relative 를 준다
            bottom: 0;
            content: '';
            width: 100%;
            height: 100%;
            background: linear-gradient(to bottom, transparent 20%, rgba(0,0,0,.6) 100%);
        }
    }
`;

 

내일 할 일

  • 일단 아침에는 좀 쉬고....라고 해봤자 지금 벌써 8시구나ㅠㅠ
  • 아마 많이는 못 쉬겠지...

오늘 한 일

  • 벌써 이번 주 이틀이 지났다. 할 일은 산더미 같은데 오류를 한 번 만나면 내 멘탈 바사삭 되어 한동안은 더 이상 생산적인 사고가 불가능한 상태가 되어버린다. 기능을 더 탄탄하게 만들기 위해 필요한 추가적인 API가 아직 준비되지 않은 상황이라, 오늘은 프론트 팀원들과 함께 비교적 가벼운 목표들을 설정했고, 앞으로 더해볼 수 있을 만한 기능들을 탐색하는 데 시간을 보냈다.
  • 그러면서 '로딩스피너나 붙여 볼까나 룰루' 했다가 큰 코 다쳤다... 의외의 복병이었다. 생각해보니 리덕스 모듈을 여러 개 쓰는 프로젝트에서 로딩스피너를 붙여본 적이 없었던 것이다(!!) 모듈이 하나이면 로딩 상태 여부에 대한 boolean 값을 리듀서에서도 설정해 줄 수 있는데, 모듈이 여러 개다 보니 결국 적어도 어느 하나의 모듈에서는 모듈 밖에 있는 로딩 상태를 건드려야 하는 꼴이었다. 이렇게 된 이상 모든 모듈들에게 공평하게, 로딩만 다루는 모듈을 새로 하나 팠다. 그리고 각 모듈 안에서 액션함수를 호출할 때마다 시작 지점쯤에 로딩 상태를 true로 바꿔주었다. 그런데!? 바로 여기서 문제가 있었다. 아무 생각 없이 모듈 한 개짜리 프로젝트에서 했던 것처럼 리듀서 안에서 다시 로딩 false로 바꿔주려니, 리듀서에서는 다른 동작을 불러 일으키는 짓을 할 수 없었던 것이다...! 모든 상태가 리듀서 안에서 깔끔하게 완결이 되어야 하지, 다른 모듈을 건드려서 또 다른 함수를 호출하면 안되는 것이었다. (stackoverflow에서 이걸 뭐라고 하던데 기억이 안 난다)
  • 아무튼 매우 큰 실망을 안고 차선책을 찾아 헤맸다. 액션함수 앞에 넣은 로딩 true를 리듀서에 들어가기 전에 다시 바꿔주려면 결국 액션함수 말미쯤에나 로딩 false를 넣어야 한다는 건데, 그렇게 해서 스피너가 보이기는 할까 싶었다. (눈물을 머금고 해봤더니 보이긴 보이더라...) 원하던 그대로의 예쁜 코드는 아니었지만 트러블은 이렇게 일단락되었다.
  • 그동안 나중에 봐야지 하고 미뤄놨던 자료들을 한 번 들춰보는 과정에서, 주특기를 리액트로 선택하기 이전에 진행되었던 주특기 Q&A 시간에 받아놨던 자료도 보게 되었다. 리액트를 "리액트스럽게" 사용하는 방법은, 컴포넌트를 재활용하고 서버에 대한 요청 횟수를 가급적 줄여서 리소스를 아끼는 것이라고 했다. 안 그래도 지금 우리 프로젝트 중 내가 짜 놓은 컴포넌트 일부가 API 콜을 필요 이상으로 많이 하는 것 같다는 생각을 하고 있던 와중에 접한 내용이었다. 이건 오늘이 날이다 싶었다. 마침 급하게 해결할 일도 없는 이 상황은 오늘이 마지막일 것이니 각 잡고 시작했다. 3개로 나눠진 페이지에 공통적으로 속해 있는 컴포넌트 하나를 완전히 위로 빼 버리고, 거꾸로 3개의 페이지는 하위 컴포넌트로 바꾸어 집어넣었다. 결론적으로 3개였던 페이지는 1개가 되고, 1개였던 하위 컴포넌트는 3개가 되었다. 그 3개의 페이지는 어차피 상단의 디자인은 같고 하단의 탭 간 이동만 발생하는 구조라 상식적으로도 하나의 상위 컴포넌트 밑에 3개가 함께 묶여 있는 게 맞다고 생각했다. (그 말인즉슨 지금까지는 비상식적...)
  • 해결하는 과정에서 라우팅에도 변동이 생겨 에러란 에러는 다 만났지만 탭 간 이동을 할 때마다 API 콜을 하거나 useSelector를 쓰거나 history.state로 데이터를 넘겨줘야만 했던 문제가 해결되었다.

내일 할 일

  • 오늘 찾아본 에디터 라이브러리를 적용해보자. 기껏 만들어 적용한 이미지 프리뷰와 업로드는 이 에디터에 묻혀버릴 것만 같지만...ㅠㅠ어쩔 수 없지.
  • 태블릿과 데스크탑의 중간 어느 특정 구간에서 깨지는 배너를 어떻게 좀 해결해 보자.
  • 프로필 사진 업로드 기능을 넣어보자. (이미지 프리뷰, 업로드 여기서 쓸 수 있겠군)
  • 태블릿 CSS 최대한 빨리 끝내자ㅠㅠ그만하고 싶다..CSS..

오늘 한 일

  • 오늘은 회의에 많은 시간을 쏟았다. 지난 주 토요일에 중간 점검이 있었는데, 다른 팀들이 워낙 준비를 잘 하기도 했고, 우리 팀에게서 부족한 점을 생각보다 많이 발견한 계기가 되었다. 다른 팀에는 질문하지 않는 CSS 관련 질문을 받는가 하면, 리덕스에 대한 기본적인 질문도 있었다. 모양새는 얼추 대답 비슷한 걸 내놨던 것 같기는 한데, 발표 준비에 소홀했던 나 자신을 되돌아보게 되었다. 그래도 우리가 앞 순서여서 다행이었던 걸까, 조금 긴장이 풀린 상태로 다른 팀의 발표를 들었다. 마지막 팀 발표까지 전부 보고 싶었지만, 그 전날 이미 한숨도 안 자고 밤을 새버린 나는 중간에 주어진 쉬는 시간 1시간 사이에 잠들어서 밤에 일어나고 말았다.. 아무튼 토요일 이후로 나는 물론 팀장님 포함 우리 팀원들 전체가 적지 않은 충격을 받았다. 그래서인지 바빴던 와중에 모처럼 앞으로의 계획을 차근차근 얘기해볼 기회가 있었다.
  • 프론트 팀원들끼리는 지금까지 완성한 기능들을 톺아보는 시간을 가졌다. 에러가 나는지, 기능이 잘 돌아가는지 교차 확인도 해주고, 에러가 나면 같이 해결도 해보고, 서로서로 부족한 점도 얘기해주고. 평범하다는 평가를 받을 수밖에 없었던 CRUD를 오늘에야 마무리하는 듯싶다.
  • 오후 8시 저녁 회의가 끝나고 나서는 피그마에 올라온 태블릿 사이즈 디자인을 적용해보기 시작했다. 지난번 클론코딩 때 눈에 충분히 익혔던 미디어쿼리를 적용해보았고, 직접 해보니 생각보다 까다롭지 않았다. 이미 styled-components를 사용하고 있던 중이라 원래부터 클래스나 아이디 선택자는 잘 사용하지 않았었는데, 이번에는 어쩌다 보니 클래스 선택자를 써야 할 일이 생겼다. 데스크탑 버전(1440*1080)에서는 메인 화면에 등장하는 카드가 6개인데, 태블릿 버전(768*320)에서는 그 수가 4개로 줄어야 하기 때문이었다. 잘 쓰지 않던 클래스 선택자와, 본격적으로는 처음 사용해보는 미디어쿼리를 적절히 섞어서 styled-components와 함께 쓰려니 약간 애매하게 느껴지긴 했다. 하지만 하늘은 역시 구글링하는 자를 돕는다고.
  • "맨 마지막 카드 2개만을 어떻게 없애지!?" -> "일단 이름을 붙여야 없애든 말든 할 것이니 클래스를 써보자" -> "맵을 돌리는 카드들을 어떻게 각각 이름을 붙이지?" -> "인덱스가 다르니 인덱스로 이름을 줘 보자" -> "이름은 붙였는데 어떻게 없애지!?" -> "안 보이게 하면 그만 아닐까, 미디어쿼리 안에 클래스 선택자를 써서 display: none을 줘버리자" ... 이만하면 의식의 흐름도 생산적이었다(❁´◡`❁) 내 코드 웬만하면 TIL에 안 넣는데 오늘은 너무 뿌듯해서 넣는다.
....
	<CardList>
    	{pop_camps.map((pc, idx) => {
        	return (
            	<CampCard className={`campcard${idx}`} key={idx}>
 					....
                    
const CardList = styled.div`
	....
    @media screen and (min-width: 768px) and (max-width: 992px) {
    	.campcard4, .campcard5 {
        	display: none;
        }
    }
`;

 

내일 할 일

  • 사용자 인증에 쓸 구글폼은 어떤 식으로 적용하는지 찾아보자.
  • 보안을 강화하기 위한 HTTP ONLY 쿠키에 대해 알아보고 적용할 방법을 찾아보자.
  • 백엔드에 요청한 API가 들어오는 대로 적용하자.
  • 그러고도 남는 시간에는 태블릿 사이즈 디자인을 작업한다.
  • 구독자가 구독 취소하는 게 가장 겁나므로 앞으로는 TIL을 꼬박꼬박 쓰자.

Day65 한 일

  • 어제는 생일이라는 그럴싸한 핑계로 퇴근을 서둘렀다. 공식적으로 끝나는 시각인 오후 9시 이전에 나와 본 건 처음인 것 같다. 일찍 나오려면 작업을 미리, 많이 해둬야 하니 잠이 쏟아지는 점심시간에도 낮잠을 안 자고 버텼다. 내 몫의 API 콜 절반 이상을 완료했다.

Day66 한 일

  • 그래서 어제는 나름대로 쉬었지만 잠은 평소와 다를 바 없이 늦게 잤다. 여느 때처럼 아침에 힘겹게 컴퓨터 앞에 앉아서 비몽사몽 팀원들과의 아침 인사를 마치고, 또 다시 반쯤 자면서 꾸역꾸역 일을 해나갔다. 밤새 API 리스트에 크고 작은 변경사항들이 있어서 결국 어제 한 번씩 짚고 넘어갔던 것들도 다시 봐야 했다. 그래도 기본 틀은 변하지 않아서 시간이 많이 걸리진 않았지만, 했던 걸 다시 한다는 것은 어쨌거나 고역이다. 복습(?)을 빨리 끝내고 남은 기능들을 마저 구현하는 데 오늘 하루를 다 보냈고, 덕분에 내일은 조금이나마 여유로울 것 같다. 대충 한번 훑고 지나갔던 부분들을 들여다 볼 수 있는 시간이 주어질 듯하다.
  • 지금까지는, 좋아요 기능처럼 클릭했을 때 새로고침 없이도 그때그때 생김새(?)가 변하면서 상태가 저장되어야 하는 기능은 나 혼자만의 힘으로는 구현하지 못했었다. 그런데 운이 좋은 건지, 오늘은 처음으로 아무것도 참고하지 않았는데도 북마크 기능을 완성할 수 있었다! 그렇지만 아직도, 북마크 추가한 이후에 같은 페이지에서 바로 새로고침을 하면 북마크가 해제되지는 않더라도 해제된 것처럼 표시되고 있다. 다른 페이지로 이동한 후 새로고침하고 나서 다시 돌아오면 서버에 저장된 상태 그대로지만, 북마크 추가한 후 그 자리에서 곧장 새로고침을 해버리면 서버의 데이터는 건드려지지 않는다 할지라도 겉보기엔 북마크가 해제된 것 같다. 이걸 어떻게 해결해야 할지 여러 번 코드를 들쑤시다가 결국 무한루프에도 빠져보고 난리가 났다. 다시 원래대로 돌려놓고 이건 내일의 나에게 맡겨야겠다.

내일 할 일

  • 북마크랑 유사한, 좋아요 기능을 구현하면서 오늘 약간은 모자랐던 북마크 기능의 부족함을 채워보자.
  • 데이터 불러올 때 서버에서 페이징 처리한 데이터를 적절히 운용해야 한다. 오늘은 급한 마음에 다 건너뛰었지만 내일은 꼼꼼히 챙겨보자.

Day63 한 일

  • 그저께는 일요일이었다. 쉬는 날이었지만 으레 그렇듯이 저녁 먹고 느지막이 출석 도장을 찍었다. 게더에는 사람도 별로 없고 해서 게더를 꺼놓고 온전히 코딩만 할 수 있었다. 전날 계획했던 대로 피그마에 디자이너님들이 그려놓으신 대로 CSS 규격을 최대한 정확히 맞춰서 뷰를 구현하는 데 시간을 쏟았다. 피그마에서는 CSS 코드도 어느 정도 확인할 수 있었지만 그렇다고 해서 그대로 갖다 붙인다고 원하는 그림이 나오는 건 아니었다. 바닥부터는 아니더라도 손을 대지 않을 수는 없었다. 그렇게 시작한 CSS 작업은 해가 뜨고 아침 8시가 되어서까지 이어졌다... 잠을 하나도 안 자고 밤을 넘겨 본 게 얼마 만이었는지 모르겠다. 대학생 때도 술 마실 때 아니고서는 과제할 때조차 밤을 꼬박 새진 않았었는데, 세상에나.

Day64 한 일

  • 밤을 새버린 탓에 오늘은 시간이 조금만 나면 부족한 잠을 보충하기 일쑤였다. 오전 11시부터 4시간 자고, 또 오후 6시부터 2시간 자고. 잠이 안 올 때 밤샘 작업을 하면 그때만큼은 온전히 조용하게 시간을 쓰면서 집중할 수 있다는 장점이 있지만, 다음날 부작용이 너무 큰 것 같다. 오늘 뭘 했는지도 기억이 잘 안 난다. (어쩌면 한 게 없는지도)
  • 밤 12시가 되자마자 팀장님을 비롯한 우리 팀 분들이 갑자기(!!!) 모여들어서 생일 축하 노래를 틀고 🍰 이렇게 생긴 스냅카메라의 케이크 필터로 내 생일을 축하해주셨다. ㅋㅋㅋㅋ다시 생각하니 또 웃기다. 당황스럽기는 했는데 재밌고 고마웠다. 0시부터 비대면으로 축하받는 생일이라니 너무너무 특별하다.

내일 할 일

  • 백엔드에서 오늘 거의 모든 기능이 다 들어 있는 API 리스트를 주셨다. 내일 그래두 생일이니까 밤에 조금이라도 쉬려면 낮잠 절대 자지 말고 열심히 다 해버려야지.
  • 틈틈이 피그마에 맞춰 CSS를 고친다.

+ Recent posts