분류 전체보기 87

독립적인 테스트 환경 구성하기

서비스계층의 상품의 등록 수정 삭제 API 테스트중 개별적인 메서드 테스트는 모두 통과했지만, 테스트 클래스 단위로 테스트를 실행하니 오류가 발생했다. 테스트 코드에서는 모두 PK를 1L으로 지정하고 단독적으로 수행할땐 문제없었지만 클래스단위로 순차적으로 테스트가 진행하니 Auto_Increment로 인해 PK값이 맞지않아 테스트가 반복적으로 실패했다. 이런 상황때문에 당연하게 TeadDown 메서드로 DeleteAllInBatch()를 적용했지만, 메서드 실행 후 테이블은 드랍되도 Auto_Increment로인해 올라가던 숫자는 그대로 이어졌다. 원하던건 항상 리파지토리가 텅비어지고 새로 생성되는 엔티티의 PK는 1이길원했지만 텅빈 리파지토리에 PK값이 2...3...값을 가지는 엔티티가 생성됬다....

Error 2023.09.13

[3주차] 고객 지원 게시판 개발 완료 후 회고..

우여 곡절끝에 댓글 기능까지 추가해 게시판의 모습을 갖추게 되었다. 댓글 기능을 추가하며 느낀점은 댓글 또한 댓 '글' 이라는점..다만 댓글을 화면에서 처리할 때 AJAX를 이용해 비동기방식으로 댓글이 바로 화면에 나타나야됬기 때문에 익숙치못한 자바스크립트에서 많은 오류를 만났다. 가장 어려웠던 부분은 댓글 수정이였다. fetch API를 사용하여 댓글 화면을 가져오면서 어떻게 DOM을 조작할지 막막했다. 실제로 화면상에서 댓글이 불려지고 불려진 댓글에서 수정버튼을 눌러도 addEventListener가 반응하지않아 지금 뭔가 많이 잘못되가고있는건가 불안해졌지만 document.addEventListener와 e.target을 이용해 안정적으로 API 호출이 가능해졌다. 2주차까지 고민하던것들... 1...

[2주차] 고민중인것들...

1. 등록 , 수정 화면을을 합쳐서 사용할지 Or 나눠서 사용할지에 대해서 처음 프로젝트 설계를 할 때에 들던 생각은 생성과 수정은 비슷한 메커니즘을 가진다는 생각에 합쳐서 사용하기로 결정했다. 회원 등록 및 수정 기능을 개발하면서 처음 부딛힌 난관은 '1개의 뷰 템플릿이 어떤 분기점에서 생성 페이지가되고 수정 페이지가 되느냐' 였다. 그 해답으로 1. 회원의 ID가 넘어올 경우 -> 회원의 ID를 조회한 뒤 수정 처리 2. 회원의 ID가 넘어오지 않을 경우 -> ID가 null이니 자연스럽게 비어있는 memberDto를 넘겨 등록 처리 로 개발을 진행했지만... 회원 정보 수정시에 수정하면 안되는 필드값들을 readOnly 처리를 해야되서 타임 리프의 th:if를 사용해 두개의 input tag를 만들..

게시판의 공지사항을 상단에 항상 고정해놓기

고객 지원 게시판 제작을하며 팀원과 공지사항은 상단에 항상 고정되있는 방식으로 설계를 진행했다. 원래 고객 지원 게시판 개발은 다른 팀원이 맡아 개발하고 있었지만 같이 고생하는 팀원이나, 팀장인 본인이나 아직 웹개발에 서툰 부분도 많고 아무래도 혼자 진행하기에 벅찬 분량이기도해서 페이징 처리는 내가 맡기로 했다. 일단 최종 결과로 나오게 된 게시판 형태인데 처음에 설계했던 방식 그대로 구현되어 참 다행이다라고 느꼈다 진행하면서 페이징 처리 기능을 구현하면서 어려움이 있었는데... 일반적으로 학원에서 배운대로 페이징 처리를 진행했더니 공지사항 게시물이 맨 마지막페이지에 몰려버렸다.... View Controller에서 한개의 page collection에 공지사항과 일반 게시물을 같이 담아 보냈더니 위와같..

fetch API 사용 과 DTO의 기본생성자 Issue

회원의 정보를 수정하는 기능을 웹 브라우저에서 직접 테스트하다 문제를 발견했다. 첫번째 문제로 - 버튼을 눌렀을때 memberUpdate api로 mapping 되지 않고 주소창에 정보를 변경한 데이터들이 쿼리스트링으로 입력되있었다 곰곰히 생각해보다 개발자도구로 확인해봤더니 HTTP 요청이 get 요청으로 가고있었다. 분명 javascript의 fetchAPI를 사용해 버튼을 눌렀을때 PUT 요청으로 가도록 설정을 해놔서 뭐가 문제인가 싶었는데 form 태그가 문제였다. 원래는 form태그를 사용하지않고 html 을 작성했는데 input 태그의 required 속성을 활성화 하기위해 오전에 form태그를 붙인게 문제였다, form 태그에는 기본적으로 action 값이 get요청으로 활성화되어있고 form..

Error 2023.08.31

JPA 양방향 참조관계 무한 루프 [Infinite recursion]

게시물 리스트 조회 API테스트중 말로만 듣던 양방향 참조 무한루프에 빠졌다.... 해결 방안으로 DTO 사용과 Jackson Annotaion 활용 두 가지가 있었는데 Jackson Annotaion 활용 방안으로 - @JsonManagedReference와 @JsonBackReference 가 존재한다. 어노테이션을 활용하는 방안보다 DTO로 응답하는것이 더 코드가 깔끔하고 최선의 방법이라 생각해 DTO를 활용하는것으로 고민을 했는데 ?? 난 이미 컨트롤러에서 DTO로 응답하고 있었는데.... @GetMapping("/api/todolist") public ResponseEntity getTodoList(){ List todoList = todoBoardService.getTodoList().stre..

Error 2023.08.12