본문 바로가기

공부

(113)
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든, 생성자를 만들..
약수의 갯수 구하기 for(int i=1;i
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..
23.11.23 예외처리를 위주로 구현을 했다. 클라이언트에서 요청이 나쁘게 들어올 때 상태코드와 어떤 예외가 발생했는지 클라이언트에 메세지로 전달하고 싶었다. ResponseDto를 이용해서 상태코드를 반환하고, 바디에 예외 메세지와, 상태코드를 반환하도록 코드를 변경했다. 따라서 모든 응답 DTO는 공통 DTO를 상속 받는다. 공통DTO(CommonResponseDto)는 메세지를 담을 String 필드와, 상태코드를 담을 int값을 갖으며 예외가 발생하면? 공통DTO의 바디에 상태 메세지를 반환하도록 했다. 이렇게 하니까 서버단에서가 아닌 클라이언트단에서도 어떻게 예외가 발생했는지 알 수 있어서 좋다. 이건 백앤드 개발자가 프론트 앤드 개발자와 협업시 좋은 요인이 될 수 있지 않을까? 생각한다.