안녕하세요, Brad입니다. 오늘도 많은 것들에 대해 배우고 깨달을 수 있었던 시간들이었네요. 가장 인상깊었던 부분은 qna step4의 미션이기도한 질문, 답변 삭제 기능 구현입니다. 그럼 그 부분에 대해 정리하는 것으로 시작해볼게요!
삭제하는 것까지는 사실 이전 step3에서도 이미 구현했던 부분인데요. 다른 점이 있다면 실제 DB에서 삭제하지 않고 boolean
타입의 상태값을 두어 그 부분만 삭제 처리한 것처럼 보이게 한다는 것입니다. 처음에는 자연스럽게 UPDATE
쿼리문을 생각했었습니다. 그 이전 DB에서 수정할 때마다 UPDATE
문을 썼었기 때문에 아무런 의심없이 Spring에서 UPDATE
문을 적용할 수 있는 방법을 검색해나갔습니다. 그리고 몇몇 사이트에서 SQL문을 써서 삭제시 UPDATE
문이 실행될 수 있도록 하는 방법을 찾을 수 있었습니다. 어떻게 동작하는지 잘 이해는 가지 않았지만 여느때처럼 Spring의 마법이라고 가볍게 생각했던 것 같습니다. 그러던 중 Pobi가 지나가면서 'SQL를 작성하지 않기 위해 JPA를 쓰는데 굳이 SQL를 써야하는가'에 대해 말했습니다. 처음엔 당연하게 이렇게 하는게 맞는거라 생각했기 때문에 다른 방법이 곧잘 떠오르지 않았고 무슨 말인지 쉽게 이해하기 힘들었습니다. 그리곤 Pobi가 따라하라는대로 하다보니 무슨 말인지 알게되었습니다.
결국은 lv2에서 객체간 메시지를 전달하여 처리하는 것이었습니다. 이전에 Foreign Key를 통해서 각 객체간 관계를 매핑해두었습니다. 그렇기 때문에 연결된 객체간 데이터에 접근하는 것은 어렵지 않은 일이었습니다. 그렇기 때문에 각 객체간 메시지를 통해서도 UPDATE
문과 같이 처리할 수 있는 것이죠. 그 과정을 간략하게 설명하면 다음과 같습니다.
Question
과Answer
내 boolean상태값을 가지는 deleted 변수를 만든다.Question
또는Answer
삭제 순간 해당 객체 내 이를 처리하는 메서드를 호출하고 이 안에서 deleted변수의 상태값을 변경시킨다(물론 주어진 조건('답변에 다른 사용자의 글이 있으면 질문을 삭제할 수 없다' 등)에 만족할 경우 )- deleted변수의 상태값이 false인 객체들을 보낼 수 있도록 가공한 메서드를 html에서 호출한다
이렇게 구현하다보면 헷갈리는 부분이 좀 있습니다. 질문이나 답변에서 답변에 다른 유저의 글이 있을 때, 그리고 답변이 없을 때 등등 여러 경우가 있죠. 이 경우 TDD를 활용하면 좀 더 쉽게 접근할 수 있습니다. 필요한 메서드가 생각나면 우선 테스트에서 해당 메서드를 통해 원하는 값들을 채워넣고 이후에 메서드를 우리가 원하는 값들이 나올 수 있도록 정의하는 것이죠!
이를 통해 step4를 구현했는데요. 내일은 아마 step4에 대한 피드백을 반영해야할 것 같네요. 추가적으로 오늘 수업시간은 Q&A 꼭 채워졌는데요. 그 부분도 내일 정리해서 올리려합니다.
'TIL' 카테고리의 다른 글
Today's Dev Notes(2018-12-02) (0) | 2018.12.02 |
---|---|
Today's Dev Notes(2018-11-29) (0) | 2018.11.30 |
Today's Dev Notes(2018-11-25) (0) | 2018.11.25 |
Today's Dev Notes(2018-11-22) (0) | 2018.11.22 |
Today's Dev Notes(2018-11-21) (0) | 2018.11.22 |