리액트 작업을 하다가 useEffect 의 deps 를 [] 로 설정했음에도, 함수 부분이 2번 실행되는 문제가 있었다. 코드는 다음과 같다. function BuyPage () { const navigate = useNavigate() const { productId } = useParams() const { state } = useLocation() const { nickname } = useUserInfoStore() useEffect(() => { if (state === null) { navigate(`/products/${productId}`) } }, []) useEffect(() => { if (nickname === '') { alert('로그인 후 접근 가능합니다.') navigate(..
TIL ✍️
저번 주 금요일부터 주말까지 프론트를 하고 있다. Vite + React + MUI + Zustand + React-query 를 이용해서 구성을 했다. 요즘 프론트 구성하려면 참 많이도 깔아야 하네~ 했는데 생각해보니 스프링도 만만치 않네 ㅋㅋ 반년 전에 투두리스트 풀스택으로 만들어보는 플젝 한 적이 있어서.. 일단 그거 가져다가 써서 오전 시간동안 회원가입과 로그인을 완성했다 ㅋㅋ 그리고 이걸 나만 쓸 순 없지 하며 리액트를 쓰는 다른 팀들에게 내 레포를 뿌렸다. 모두들 리액트 좋아해줬음 좋겠다 ㅋ 재밌다. 지금은 메인 페이지를 얼추 다 하고 상품 페이지를 작업하고 있다. 백엔드 API 완성이 되어야 작업 가능하기도 하고, 또 배포, 도메인 연동, HTTPS 까지 다 구성하느라 조금 늦춰줬다. 백은 ..
오늘은 오전을 쉼 없이 달렸었다. 어제 멘토링 노트 준비하느라 CS기술 노트 작성을 안 했던 만큼 오늘 4개 질문을 10시까지 작성 후, 10시부터 12시 반까지 쉽없이 회의만 했다. 거의 6개 안건을 의논하고, 튜터님 찾아뵙고, 결론을 내리느라 진이 빠져서 30분 일찍 점심시간을 가졌다. 우선 계획으로, 오늘까지 기능을 다 완료하고 내일부터는 다음 볼륨을 위해 계획을 짜고, 부하테스트를 해볼 것 같다. 나는 이제 슬슬 프론트를 해야겠고,, 요즘 너무 쳐지는 것 같은데 다시 힘내봐야겠따. 일단 오늘은 일찍 자고. 오늘 안건은 우선, 서비스에서 다른 도메인의 데이터를 가져오려면 서비스를 통하기로 결정을 했었는데, 두 서비스가 서로 참조하면 상호 참조가 발생하는 문제가 예상이 되어서, 파사드 패턴을 사용해보..
오늘은 오전에 튜터님과 멘토링 시간이 잡혀서 미리 질문한 것들을 정리해서 갔었는데, 튜터님의 인터넷 상태가 고르지 못해,, 일단 적어둔 것을 글로 피드백 해주시고 저녁에 방문해서 질문을 받았다. 정말.. 도움이 많이 되었다. 우선 우린 백엔드로 취업을 할 거여서, 쌩 EC2에다가 이것저것 구현하는 것보다 이미 잘 나와 있는 AWS의 서비스들을 잘 이용하고, 우리는 프로덕션 코드에 집중하는 것이 더 좋다고 하셨다. 또 기획서는 꼭 버전 관리를 잘 해야 한다고 조언 받았다. 아 그리고 나는 레디스를 담당하다 보니까 캐싱에 대해 궁금한 것들을 여러 개 질문했었는데, 그 중에 실제 상황에 가깝게 부하테스트를 해보고, 이를 토대로 어느 요소들을 캐싱해둘지, 또 캐싱 해둔다면 그 기준을 어떻게 잡아야 할지가 궁금했..
오늘은 아침에 기술면접 준비를 해두고, 담당 튜터님과 피드백 일정을 잡고, 오전에는.. ERD를 또 갈아엎었다. 그래도 이번에는 조금 더 깔끔하게 다듬었고, 결제 부분을 포인트로 대체해서 구현하기로 했다. 그리고 로직들도 다듬어서 각 케이스별 처리 방법도 정리를 해두었다. 또한 AWS의 EC2 및 RDS, S3 인스턴스를 만들어서 팀원들과 공유를 해두었고, 코드 컨벤션으로 JpaRepository를 상속받을 것인가와 @RepositoryDefinition 으로 할 것인가를 고민해봤고, JpaRepository를 상속받은 것으로 결론이 났다. 사실 나는 납득이 안 됐었다. 필요하지 않은 메서드들까지 전부 구현을 해주기 때문에 캡슐화 되지 않는다고 생각했고, 기본 제공 메서드를 테스트 코드를 작성할 수 있는..
최종 프로젝트 2일차 오늘은 아침에 ERD를 계속 수정해나갔다. 너무.. 힘들다 ㅋ ㅋ 점점 주문 테이블이 비대해지고 있다. 조인이 너무 많지 않게 고려를 하면서도 중복 데이터가 안 생기도록 설계하기 꽤나 애를 먹고 있다. 팀원들과 회의를 하는데 내 DB 지식이 너무나도 부족하다고 느꼈다. 유저가 삭제됐을 때 어느 데이터가 남아야 하고 또 없어져야 하며, 그로인한 연관관계와 캐스케이드 설정도 머리가 지끈거리고, 시나리오 대로 데이터를 가져올 때 조인을 최소화 하기 위해 테이블에 어떤 필드들을 넣어주고 빼주고 해야 하는지도 부족함을 많이 느낀다. 단순히 이론 지식을 쌓는다고 해결되지 않을, 그런 위기감을 느끼고 있다. API도 설계를 했는데, 내가 중간에 취업 특강을 들으러 잠시 자리를 빈 동안 대부분 완..
오늘부터 최종 프로젝트가 시작됐다. 팀장은 내심 내가 하고 싶었지만 그래도 하고 싶은 분들이 있을까봐 아무도 안 하면 제가 할거니 부담없이 말해달라고 했고, 내가 팀장이 되었다. 이제 부팀장을 정해야 했는데, 팀장/부팀장의 역할 중 하나로 튜터님, 매니저님과 팀원 사이를 이어주는 부분도 있다고 했고, ㅈㅎ님이 평소에 튜터님을 열심히 괴롭?히는 모습을 종종 보았기 때문에 ㅋㅋ 내가 직접 선정을 했다. 많은 아이디어들이 나왔지만, 결국 챌린지반의 존재 이유였던 대용량 트래픽 처리에 집중하고자 비즈니스 부분은 과감히 덜어냈다. 우리 팀은 크림의 기프티콘 버전을 만들어 보기로 했다. 처음부터 크림을 염두에 둔 것은 아니고 아이디어를 내고 피봇팅 하는 과정의 결과물이 크림이었다 ㅋ ㅋ 원래 중고 물품을 다수의 구..
협업툴 프로젝트 KPT Keep 컨벤션을 미리 잡고 프로젝트를 시작한 점. 그리고 이를 sample 디렉토리로 프로젝트 시작때 만들어 둔 것. 단순히 문서화 이상으로 어떻게 코드를 작성해야하는지 바로 확인하며 작성할 수 있어서 아주 좋았음 스타일 가이드를 미리 적용해놓고 시작한 점. Google style guide 로도 줄바꿈에는 팀원마다 달랐지만, spotless를 통해 이마저도 강제하여 충돌난 경우가 확연히 줄어들게 됨. 리뷰 및 소통, 참여에 적극적 PR 하나에 최대 41건의 리뷰가 달릴 정도로 리뷰에 적극적이며, 문제가 발생해도 서로 해결하려고 함. 커밋 수가 700개가 넘을 정도로 다들 열심히 함 Problem 문제가 없어서 문제를 찾을 수 없어서 문제였다. 프로젝트 시작 전에 도입을 고려했던..
JWT (JSON Web Token) JWT란, 인증에 필요한 정보들을 암호화 시킨 JSON 토큰을 의미한다. JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다. 따라서 클라이언트가 JWT를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며, 검증이 완료되면 응답한다. Base64 URL-safe Encode 란, 일반적인 Base64 Encode에서 URL에서 오류없이 사용하도록 +, / 를 각각 -, _로 표현한 것이다. JWT 구조 JWT는 .을 구분자로 해서 3가지 문자열의 조합으로 나타내며, header.payload.signature 로 구성되어 있다. 이거는 ..