스파르타 내일배움캠프(70)
-
[최종 프로젝트] 마무리
저번주에 최종 프로젝트가 마무리되었습니다. 게임 매칭 서비스를 제작하면서 많은 어려움이 있었습니다. 1. 시작할 때 CI/CD가 뭔지 왜 필요한 지 몰랐습니다. 2. 서버 아키텍처에 대한 개념이 거의 없어 서비스에 대한 큰 그림을 그리지 못했습니다. 3. Transactional에 대해 정확히 알지 못해 오류를 해결하는데 힘들었습니다. 4. 작성한 코드 가독성이 높지 않았습니다. 5. 유지보수를 생각하면서 코드를 짜지 않았습니다. 1,2번은 마지막 배포단계에서 겨우 느끼게 되었습니다. 이제는 서버의 구성이 어떻게 되는지 개략적으로 느낄 수 있습니다. 또 프론트를 연결해 테스트할때부터 처음보는 에러와 문제들이 발생했습니다. 이때 내가 짠 코드도 길어지고, 클래스가 많아지니 헷갈리기 시작했습니다. 이때서야 ..
2023.03.24 -
[최종 프로젝트] Deserialize Json
프론트에서 서버로 매너점수를 평가하는 기능에서 Json을 역직렬화하지 못하는 문제가 발생하였습니다. 에러 메세지는 아래와 같이 나왔습니다. JSON parse error: Cannot deserialize value of type `java.util.ArrayList` from Object value (token `JsonToken.START_OBJECT`) evaluationForm 클래스에 있는 request: List 이 List여서 서버에서 deserialize 할 수 없다고 생각하였습니다. 다른 필드인 matchingId: Long 은 잘 받고 있어서 그렇게 생각하게 되었습니다. 따라서 직접 deserialize하는 방법을 찾게 되었습니다. 처음에는 deserialize 클래스와 Mapper 클..
2023.03.16 -
[최종 프로젝트] 매칭 멤버 조회 DTO 리펙토링
서비스에 2인/5인 매칭 유형이 있습니다. 각각에 대한 DTO를 만들어서 서버에서 멤버 정보를 내보냈는데, 하나로만 사용하자는 피드백이 있었습니다. 당시 백엔드에서 List로 정보를 주다가 프론트에 띄우는 방법을 찾지 못해 상당히 원시적인 방식으로 해결했었습니다. /** * 2인 매칭 DTO */ @Getter public class MatchingLog2Dto { private String nickname; private Long id; private Long matchingId; public MatchingLog2Dto(Member member, Long matchingId) { this.nickname = member.getProfile().getNickname(); this.id = member...
2023.03.07 -
[최종 프로젝트] ajax를 통한 MultiPartFile 업로드
주말간 멤버와 매칭 파트, 메뉴바 프론트 파일을 만들었습니다.(JS 제외) 이후에 각자 파트별로 프론트 파일을 가져가 백엔드와 연결하는 작업을 이번주부터 시작하고 있습니다. 타임리프가 아닌 JS의 ajax를 통해 연결하는 것이 생소하여 처음부터 난항을 겪었습니다. 특히, 유저가 내가 쓴 게시물을 보는 페이지를 구현할 때 조금 헤맸지만 아래의 코드같이 해결했습니다. $(document).ready(function () { ... $.ajax({ type:"GET", url:"http://localhost:8080/api/profile/boards", headers:{ "Content-Type": "application/json", "Authorization":localStorage.getItem("acce..
2023.02.22 -
[최종프로젝트] 테스트 코드 작성
멤버를 구현한 뒤로 junit으로 테스트 코드를 작성하였습니다. 테스트를 하다보니 제가 아는 테스트 외에 다른 테스트가 있다는 것을 알게 되었습니다. 저는 아래와 같이 @SpringbootTest를 붙여 테스트에 필요한 의존성을 Springboot Container를 이용하여 주입시켰습니다. @SpringBootTest class MemberServiceImplTest { @Autowired private MemberService memberService; @Autowired private BoardService boardService; @Autowired private MemberRepository memberRepository; @Autowired private FileStore fileStore; ..
2023.02.18 -
[최종 프로젝트] 멤버 구현 완료
제가 맡은 멤버 백엔드의 기능을 완성하였습니다. 금일부터 계속 프론트 엔드 작업을 하고 있었는데(사실 결과물을 Thymleaf로 출력하는 것과 다를게 없었습니다.) 회원가입과 로그인을 하지 않으면 기능이 잘 동작하는 지 확인할 수가 없었습니다. 하지만 과정에서 브라우저가 어떻게 토큰을 가지고 있고 처리하는 지 하나도 모른다는 생각이 들었습니다. 크롬은 토큰을 어디에 저장할지 찾아보니 1. 쿠키 2. 로컬 스토리지 / 세션 스토리지 에 저장되는 것 같습니다. 이것을 구현하기 전에 우선 회원가입이 되는 지 확인이 필요했습니다. 하지만 HTML form 태그에서 데이터 값이 서버로 잘 넘어오나 에러가 발생하였습니다. e = rawPassword is null 이러한 에러 로그가 서버에서 잡혔습니다. 확인해보니..
2023.02.14