분류 전체보기 (95) 썸네일형 리스트형 [최종프로젝트]Embedded Redis 이슈 프론트엔드와 백엔드의 초기 mvp목표를 달성했기 때문에 이제 추가 기능구현보다는 테스트 코드를 만드는 데에 집중하기로 했다. CI/CD 자동화를 위해서는 gradle의 테스트 코드 실행 과정을 거쳐야 했기 때문에 테스트 코드가 반드시 필요했다. 보통 프로젝트를 할 때는 백엔드에서 비즈니스 로직이 구현되면 그에 관련된 테스트 코드부터 작성을 우선시 하는게 맞다.그러나 이번 프로젝트에서 테스트 코드부터 작성을 하면 프론트엔드 뷰를 구현하지 않아서 중간 발표회에서 비즈니스 로직 시연이 어려울 거라 판단하고 CI/CD자동화는 나중에 구현하기로 하고 따라서 테스트 코드를 제일 나중에 작성하기로 했다. CI/CD자동화를 빨리 구현하기 위해 우선 비즈니스 로직의 모든 기능이 작동하는지 확인할 수 있는 통합 테스트코드.. [최종프로젝트] 프로필 페이지 런타임 에러 백엔드 서버 구현을 어느정도 마무리하고 프론트엔드 뷰를 슬슬 구현하기로 했다. 프로필 페이지는 React를 활용해서 구현하기로 했는데 React같은 프론트엔드용 언어는 익숙치 않다 보니 구현하던 도중 여러 문제가 있었다. 이번 포스팅도 그 문제 중 하나를 해결하는 과정을 포스트로 남기는 것이다. 여러 사소한 문제들이 개발 도중 있었지만 가장 기억에 남는 이슈를 포스트로 남긴다. 각설하고 본론을 얘기하자면 프론트 뷰를 개발하던 과정 중 회원 프로필 페이지를 구현할 때 발생한 이슈이다. 프로필 페이지를 구현하기 위해 백엔드 서버에서 데이터를 요청해서 가져오는 도중 런타임에러가 발생했다.에러 내용을 자세히 읽어보니 변수가 null이어서 읽을 수 없다는 내용같았다.const Mypage = () => { .. [최종프로젝트]GenericJackson2JsonRedisSerializer 역직렬화 이슈 최종프로젝트는 일자별로 일일이 기록하기에는 프로젝트에 투자할 시간이 모자를것 같아서 이제부터는 큰 트러블 슈팅위주로 포스팅을 할 계획이다.그래서 오늘 쓸 주제는 Redis에 관한 이슈이다.우리 서비스에서 로그인을 하면 인증에 필요한 jwt토큰이 발급되고 이건 30분동안 유효하다. 30분이 지나면 토큰이 만료되어 재발급이 필요하다. 재발급을 위해서는 refresh토큰의 인증절차를 거친 뒤 인증되면 새 토큰을 발급하는 구조로 코드를 작성하기로 했다. 이 때 refresh토큰을 인증하는 절차를 만들려면 이 refresh토큰을 서버에서 기억하고 있어야 한다. 그렇다고 dbms에 저장하면 새 토큰을 발급할 때 마다 트랜젝션이 수행될 거고 이게 누적되면 서버에 적잖은 부담이 가해질 것이다. 다시 말해 리프레쉬 토큰.. public class Dev {}(최종프로젝트) 2일차 전날에 프로젝트의 주제를 결정했으니 이제 와이어프레임, API명세서, ER-Diagram을 정해야 했다.여기까지가 이번 프로젝트의 와이어프레임이다. 팀원들이 피그마를 굉장히 잘 다루어서 조금 놀랐다. 특히 부팀장님이 굉장히 잘 정리해주셨다.여기까지가 api명세서이다. 작업 분배는 도메인 단위로 분배를 했다.여기까지가 ER-Diagram이다. 한달짜리 장기 프로젝트여서 그런지 이전에 볼 수 없던 복잡하고 큰 규모의 설계이다. 이제 프로젝트를 위한 준비는 끝난 것 같다. 레포지토리에 프로젝트를 업로드하고 다음주 월요일부터 생성해 둔 프로젝트에서 개발을 시작하기로 했다. Trello프로젝트(심화 프로젝트) 5일차(KPT 회고) 이번 프로젝트는 주말까지 모여서 함께 작업할 정도로 모두가 열정이 넘치는 팀이었다.(사실 그만큼 일정이 매우 빡빡했었다.)팀원들은 이번 프로젝트 일정이 너무 빡세다고 했다. 주말 제외하면 5일이고 포함해도 7일인데 거기에 프론트엔드 뷰까지 구현을 해야 하니 백엔드 서버에서 개발하는 것 만으로도 시간이 쪼들렸던 우리 팀은 프론트엔드에서 대부분의 시간을 다 써버리고 서버 개발을 할 수 없었다.프론트엔드가 오래걸린 이유는 개인적으로는 프론트엔드 뷰 개발할 때 담당 도메인을 제대로 정하지 못해서 서로 겹치는 내용을 작업했던 것과 회의를 제대로 진행하지 않아서 시간이 지체됐을 때 대책을 세우지 않은 것 등등 여러 요인이 있었던 것 같다. 다음 프로젝트에서는 이 점 참고해서 개발을 해야 겠다. Trello프로젝트(심화 프로젝트) 4일차 이번 포스트를 쓰기에 앞서 제목상으로는 4일차 이지만 4일차였던 월요일만 이야기하는 것이 아니라 주말간 있었던 모든 에피소드들도 함께 다루려는 것임을 알린다. 우선 잠시 모여서 팀 회의를 하다가 필자가 구현한 수정모드를 신기하다고 했다. 그러면서 팀장님은 이 기능을 보드 리스트 페이지에 똑같이 구현해야 겠다고 말씀을 하셨다. 그런데 나는 이걸 나한테 부탁하는 걸로 오해하고 작업을 진행해 버렸다.결국 구현은 완성됐고 팀장님은 이걸 보더니 자기도 같은 기능을 구현했다면서 곤란해 하셨다. 이건 팀장님이 하셨던 말씀을 잘못 이해한 순전히 필자의 책임이니 팀장님이 구현한 기능을 반영하기로 하고 필자는 이 기능을 커밋하기 이전으로 브랜치를 리셋시키고 다른 작업을 진행했다. 회의가 끝나고 한 팀원이 자신이 드래그 앤.. 최종프로젝트 1일차 이번 프로젝트는 기존처럼 5일짜리가 아닌(주말 제외) 4주라는 굉장히 긴 시간이 주어진 프로젝트이다. 이번 프로젝트는 주제와 요구사항이 정해져 있지 않다. 주제부터 요구사항 까지 우리가 직접 설계해야 한다. 프로젝트 기획안을 만드는 것 부터가 난관이었다. Clone 코딩을 통한 기능 개선Scope 적정 설정레퍼런스를 좀 잡아서 (배민, 블라인드 그 프로젝트처럼)국비지원 부트캠프의 정형화된 프로젝트 보단 디테일이 다른 프로젝트이런 방향을 잡고 기획을 하려고 노력을 했다. 그래서 저 방향대로 아이디어를 제시를 해도 시중에 풀려있는 서비스와 크게 다르지 않고 부트캠프의 정형화된 프로젝트에서 벗어나기가 어려웠다. 도저히 결론이 나지 않아서 여기서 아이디어를 계속 내봐야 그 나물에 그 밥인 터라 지금까지 나온 아.. Trello프로젝트(심화 프로젝트) 3일차 이제 프론트엔드 뷰를 구현할 차례이다. 지금까지 구현한 api들을 프론트엔드 뷰에 연결하는 작업을 해야한다.필자는 컬럼/카드 리스트 조회 페이지를 구현하기로 했다.결과 화면이다. 데이터를 가져오기 위한 서비스단 코드이다.@Service@RequiredArgsConstructorpublic class ColumnsServices { ... public ColumnsListResponseDto getColumnsList(Long id) { Board board = findBoardById(id); List cards = new ArrayList(); List columnList = board.getColumnsList().stream().sorted(Comparat.. 이전 1 2 3 4 ··· 12 다음