공부/TIL (84) 썸네일형 리스트형 23.12.07 비상 초비상 [로그아웃 기능 구현 빵꾸] 로그아웃 기능 구현을 그냥 아예 잘못했다. 잊고 있었다. 내가 구현한게 아니었던 건데, 내가 테스트를 안하고있었다. 생각을 해보니 로그아웃은 jwt에서 방법이 없다. 왜냐? 클라이언트에게 넘겨준 토큰은 서버의 손을 떠났기 때문에(무상태성) 컨트롤 할 수 없다. 클라이언트가 가지고 있는 토큰에는 jwt 사인이 된 토큰이 있다. 사인이 된 토큰을 서버에 가져온다면 인증은 오케이다. 언제까지? 만료기한이 지나기 전까지! 그렇다면 서버는 만료 기한을 짧게 줄 수 밖에.. 그렇다면 유저는 불편한 경험을 하겠지? 조금밖에 사용을 안했는데 벌써 나가라고 하는게 마치 내가 노래방 다닐적 경험같군.. 그렇다면 토큰을 계속해서 갱신하면 된다. 솔루션은 토큰의 만료기한을 줄이고, 계.. 23.12.06 팀플을 본격적으로 한 후, 오늘 팀원들과 내가 기능 구현한 코드들을 합치면서 코드 리뷰를 진행했다. 역시 여러 사람들과 코드를 합치는게 진짜 어렵다. 깃부터 아주 말썽이였다. 오늘 내가 밥먹을 타이밍에 마침 딱 깃에서 머지할 때 문제가 생겼다..(내가 한 머지가 문제였던 것.) 밥도 못먹고 일단 문제부터 수정했다. 이유를 잘 알 수 없는데 내가 맡은(User도메인) Repository가 두개였다. 이유가 짐작은 가지만 정확한 이유를 찾기 전에 일단 수습부터 했다. 내가 짐작하는 이유는 이것. UserRepository의 위치가 애매했다. Repository 패키지 안에 있지 않고 혼자 따로 나와 있길래 새로 Repository 패키지를 만들어서 넣어놨는데, 머지할 때 뭔가 이상하게 합쳐졌나보다. 그래서 .. 23.12.05 새로운 프로젝트 시작! 우리는 세명이 한팀이고, 전부 비전공자라 실력이 엄청 뛰어난 팀은 아니다. 따라서 우리는 처음 필수 구현목표를 완수하고, 시간이 여유가 있다면 추가구현을 하기로 했다. 이번 프로젝트의 주제는 익명 커뮤니티 프로젝트. 우리는 MBTI별로 회원을 구분해 운영하는 프로젝트를 시작했다. 기본적으로 지난 뉴스피드와 비슷한 점이 많다. 하지만 이번에는 좋아요 기능을 추가하기로 했다. 내가 맡은 부분은 USER 도메인과 인증기능 구현. 우선 오늘 인증 기능은 구현이 완료 됐다. 인증이 잘 되는지 확인하기 위해 회원가입과 로그인 기능까지 완료했다. 그렇게 팀원들에게 푸시했다고 알린 후에 새로운 것을 배웠다. 바로 AOP. 전역 예외처리를 위해 사용할 수 있다고 지난 주차 때 배웠는데 드디어 써먹.. 23.12.04 오늘 유난히 집중이 안됐던 하루ㅠㅠ 테스트 코드 과제를 제출하고, 해설 자료를 보는데 너무 좋은 것들이 있어서 좀 가져왔다. 테스트 코드를 작성하면서 정말 귀찮았던 포인트가 객체 생성 및 초기화였다. 그런데 이를 인터페이스에 미리 선언을 해놓고, 각 테스트 클래스에 구현을 해서 사용을 하니 정말 편해졌다. public interface TestBase { String SECOND_PREFIX = "second "; Long TEST_USER_ID = 1L; Long TEST_ANOTHER_USER_ID = 2L; String TEST_USER_NAME = "username"; String TEST_USER_PASSWORD = "password"; String TEST_USER_PROFILE = "테스트 .. 23.12.01 테스트 코드 작성중 생겼던 의문들을 정리해보자. 1. 테스트시 인자에 객체를 넘겨줄 때 생기는 오류는 어떻게 대처해야 하는가? (Strict stubbing argument mismatch. Please check) 에러 given(menuRepository.save(menu)).willReturn(resultMenu); // save(menu)는 오류가 난다. Repository에 save메서드에 Menu 객체를 넣으면 생기는 오류. 이것외에 테스트 코드를 작성하며 인자에 객체를 넣을 때마다 오류가 발생했다. NPE가 떴었다. 해당 지점은 항상 객체를 생성해주는 코드였다. 이 오류가 나는 이유는 다음과 같다. MenuService의 post 메서드는 이렇게 구현되어있다. public MenuRespon.. 23.11.30 테스트 개인과제 진행 테스트 코드를 작성하다가 아주 모르겠는 문제에 직면했다. 문제가 무엇이냐? 바로 RequestDto는 초기화 어떻게 하지?? RequestDto는 클라이언트단에서 바디에 JSON형식으로 데이터가 넘어오고, JSON형식으로 넘어온 String값을 Object Mapper가 객체로 맵핑해주는 걸로 알고 있다. 따라서 RequestDto는 태생적으로 Setter도 생성자도 없다. 그렇다면 테스트할 때 RequestDto는 어떻게 초기화 해야되는거지?? 첫번째 안. Setter(생성자) 만들기 간단히 @Setter 어노테이션 하나만 달아주면 끝이다. 근데 의문이 생긴다. 테스트를 위해서 문제없는 코드를 수정하는게 맞나? 의문이 들어 튜터님께 질문 하러 갔다. @Setter든, 생성자를 만들.. 23.11.29 심화과정 강의 완! 이번 심화 강의에서 대표적으로 배웠던 것은 Test와 AOP 그리고 오늘 팀프로젝트를 진행하고 피드백 받은 부분들을 수정했다. 내가 받았던 수정사항에는 응답시에 Entity를 바로 반환하는 것이 아닌, DTO로 반환해라! -> 게시글에 대한 응답을 할 때 게시글에 달린 댓글들을 응답할 때 이전에는 Comment Entity를 List에 담아서 반환했다. 이를 CommentResponseDto로 변환하고, CommentResponseListDto로 변환해서 반환! 그런데... 안된다.. 먹통이 됐다. 오류메세지를 보니 NULL이다. MenuResponseDto의 List가 null이다! 왜 널인지 찾아가보자 MenuResponseDto로! 제일 의심쩍은 놈이 까맣게 죽어있다. 바로 co.. 23.11.28 RestTemplate를 이용해 서버와 서버간의 통신을 배웠다. 아니 사실 저번에 배웠는데 당시 프로젝트에 적용하는 파트가 아니었기 때문에 조금 정리가 되지 않은 상태. 이제 어느정도 스프링에 적응한 상태에서 다시 들어보니 더 이해가 쉬웠다. RestTemplate을 통해 서버간의 통신을 했다. 다시 공부를 해보니 서버간의 통신은 RestTemplate의 하나의 기능이다. [RestTemplate] RestTemplate은 HTTP 통신을 위한 도구. RESTful API 웹서비스와의 상호작용을 위해 외부 도메인에서 데이터를 가져오거나 전송할 때 사용되는 스프링 프레임워크의 클래스. HTTP 메서드(GET, POST, PUT, DELETE 등)을 사용하여 원격 서버와 '동기식 방식'으로 JSON, XML.. 23.11.27 오전 담당 튜터님과 면담을 진행했다. 이제 커리큘럼의 절반정도 왔는데, 상황이 어떤지, 어떻게 나아가야 할지 얘기를 나눴다. 처음은 현재 팀프로젝트를 하며 어려웠던 팀원들과의 협업을 질문을 했다. [1. 팀원과의 협업 문제] 질문) 이번 팀프로젝트는 내가 많이 진행을 했다. 내가 느끼기에 다른 팀원들이 아직 이해도가 부족했다. 내 기능을 모두 구현하려면, 다른 팀원이 구현을 먼저 해줘야 하는데, 그게 늦었다. 그래서 같이 구현을 하다가 각자 해서 오는게 어떠냐? 라고 했다. 내가 먼저 기능 구현을 했고, 내가 구현한 기능을 프로젝트에 넣었다. 이런식으로 계속 진행이 되다가 내가 대부분의 기능을 구현하게 됐다. 답) 앞으로 여기 부트 캠프든, 현업을 가든 이런 협업에 어려움이 많이 생길 것. 오히려 지금 .. 23.11.24 뉴스피드 프로젝트 끝! 기본적인 기능은 지난 개인과제와 비슷했다. Spring Security를 이용하여 인증기능을 구현하고 뉴스피드를 작성하는 것. 지난 과제에서 실패했던 부분을 모두 내 손으로 직접 구현했다. 그래서 너무 만족스럽고 성취감이 느껴진다. 지난 과제의 패착과 이번 과제의 성취, 그리고 이번 과제의 부족한점에 대해 서술하겠다. 우선 이번 과제에 대한 소개는? 레파지토리의 READ ME를 읽으면 이해할 수 있도록 내가 또 문서작업을 해놨다. https://github.com/NBCamp-B09-Newsfeed/Backend GitHub - NBCamp-B09-Newsfeed/Backend Contribute to NBCamp-B09-Newsfeed/Backend development by c.. 이전 1 2 3 4 5 6 7 8 9 다음