TIL(03-11)

roach·2021년 3월 11일
0

TIL

목록 보기
4/8

AWS

AWS 인스턴스를 뛰우면서 예전에 배우던 것들이 기억났다. 그런데 참 웃기게도 그때는 이해하지 못했던 것들이 지금은 이해가 잘간다. 호눅스가 가르쳐줘서 그런가...? 두번 배우는것도 큰것 같긴하다. 되게 재밌었고, git clone 하고, build 하고 이런건 충분이 shell 로 자동화가 될것 같이 보였다. 나중에 aws 를 팀프로젝트때 쓰게되면 server instance 에 shell 로 자동화 시켜야겠다!

배운점에 대한 글은 따로 TIL 에 적지는 않겠다.
궁금하면 인프런 호눅스 AWS 강의를 사면 된다.

좋은 예외 처리?

Dion 이 내 코드리뷰를 해주면서 예외처리에 대한 부분을 언급해 주었다.
사실 항상 코드를 낼때, 이정도면 됬어 리뷰받고 고치자 라는 마인드가 조금은 있었는데,
이런 마인드를 확깨우쳐 준것 같다. 사실 개발자란게 네이밍 이런거에 1시간 고민한다는게 그만큼 신중을가하기에 그정도 시간이 걸리는데 내가 너무 대충대충 하는게 아닐까? 라는 생각이 들었다. 그래서 앞으로는 좀 신중하게 개발자답게 하자! 라는 생각을 했다.

여튼 본론은 유저가 남의 게시물을 삭제하려고 할때, 잘못된 접근이지 않는가? 그럴때의 예외처리 해주는 문제가 관건이였는데, 일단 나는 두가지 상황으로 봤다.

  1. 로그인한 유저가 남의 게시물을 삭제하려 한다.

    • 이 경우 클라이언트에게 보여주면 좋은 메세지는 무엇일까? 에러 페이지로 보낸다? 아니 이건 좋지 않을 수 있다. 실수로 누른건데, 계속 에러페이지로 보내봐라. 나라면 그 싸이트 안쓴다. 그래서 나는 일단 글 목록 페이지를 보냈다. 사실 팝업창이 뜨면서 삭제 권한이 없습니다. 라는 표현이 적절한것 같은데, 프론트를 잘하지 않기에 일단은 글 목록 페이지로 보냈다. (내 수준에서의 가장 합리적인 처리이지 않을 까? 싶다)
  2. 로그인 하지 않은 유저가 남의 게시물을 삭제하려 한다.

    • 이 경우 클라이언트에게 보여주면 좋은 메세지는 무엇일까? 똑같이 인덱스 페이지로 보낸다? 아니 그것보다는 로그인 창으로 보내줘서 당신이 로그인을 한뒤에 이 게시물이 당신것이라면 삭제 가능해 그니까 로그인 부터 해줘 라는 식으로 올바른 행동을 할 수 있도록 해주는 것이 좋다고 생각했다.

그리고 이제 올바르지 않은 url 을 입력해서 도달하려고 했을때는, 해당 url 에 자원이 없는 것이다. 그러므로 404 Status Code 로 404 Error Page 로 보내주도록 했다.

이렇게 깊게(?) 생각하고 짜니까 아 내가 프로그램을 정성들여 만들고 있구나? 라는 생각이 들었다. 그리고 이런 주제로 조원들과 토의하면서 더 배워나갈 수 있었다.

쿼리

CrudRepository<T, ID> 쿼리에 관한 고찰 리뷰 답변 내용

Spring Data JPA 로 현재 바꿨는데

이런 부분에서 Query 가 Comment 의 개수만큼 발생하네요.

commentRepostiory.deleteAllByPost(Post post) 이런식으로 진행하는데 ..
뭔가 메소드 네임대로 하는것 같아 보이진 않네요

일단 Dion 말대로 이런부분은 공부하되 학습이 목표이니 Spring Data JPA 를 이용하도록 하겠습니다

Hibernate: delete from comment where comment_id=?
Hibernate: delete from comment where comment_id=?
Hibernate: delete from comment where comment_id=?
Hibernate: delete from post where post_id=?

아래 처럼 쏘는것이 더 효율적이라고 생각하는데, 위에 처럼 한개한개 쏘네요.

Hibernate: delete from comment where post_id=?
Hibernate: delete from post where post_id=?

일단 이런 for-loop 형태로 delete query 를 사용하니 내가 앞으로 쓸때에는 다른 방식을 알아보자 라는 생각이 들었습니다.

이 부분은 돌려보고 답변한 내용인데 참고하면 좋을 것 같아서 그래도 복사 붙여넣기 하였다~~!
뭐 여러가지 implement JPARepository? 등 혹은 Database Schema 짤때 CASCADE 에 대한 옵션을 붙여주거나 해결방법은 여러가지지만, CrudRepository<T, ID> 에서 했을때는 이런식으로 작동했다. 혹시 더 효율적으로 CrudRepository<T, ID> 를 쓸 수 있다면 누가 알려줬음 좋겠다!

profile
모든 기술에는 고민을

0개의 댓글