TIL 2021.03.17

Kyu·2021년 3월 17일
0

TIL

목록 보기
66/322

회원과 질문간의 관계 매핑

  • 유저객체처럼 회원데이터가 최상위에 놓이는 경우가 대부분이기때문에 일반적으로 유저에서는 필요한경우가아니라면 다른 객체와 관계를 맺지않는게 좋다.
  • get을 이용해서 데이터를 꺼내오는 게 보인다면 스스로에게 어떻게 객체를 이용해서 로직을 구현하는게 더 낫지않을까 의문해보는 게 좋다.

퀘스쳔 객체를 생성할 때 userId를 getter로 가져와서 사용했다.

 Question newQuestion = new Question(sessionedUser.getUserId(), title, contents);

이런 경우에 getter를 통하지않고 생성되어진 유저 객체를 통해서 가져올수 없을까 구현해보는게 더 좋다고한다.

이유는? 잘 모르겠다. 이전 3월 12일 TIL에서 자바지기님이 Getter에 대한 캡슐화의 예시를 잘 보여주셨는데 어쨋든 Getter를 이용하는건 좋지 않은가보다.

Getter 쓸일 있으면 다른걸로 바꿀수없는지 앞으로 고민해봐야겠다.

질문 상세보기 기능



handlbars 문법을 쓸때 getter 메서드는 앞에 attributeName을 안적어도되고 필드를 가져올때는 적어야하나보다.

질문 수정/삭제 기능 구현

String 리턴할때 변수값에 따라서 리턴값을 달리 주려면

return String.format("redirect:/questions/%d", id);

마치 printf() 사용하듯이 이런 식으로 해주면 된다.


근데 이 이미지에서 파란 부분은 question을 지우면 작동하지않고 빨간 부분은 question을 지우든 안지우든 작동한다. 어떤 기준에서 그렇게 되는지 모르겠다 아~~

수정/삭제 기능에 대한 보안 처리

//QuestionController

        if (selectedQuestion.hasSameUserAs(sessionedUser)) {
            model.addAttribute("question", selectedQuestion);
        }
//Question

    public boolean hasSameUserAs(User sessionedUser) {
        return this.userId == sessionedUser;
    }

처음에는 같은 주소값을 공유하는 객체라고 생각해서 이렇게 만들었는데 자바지기님이 이렇게하면 무조건 false 나온다고 한다. 이 부분 영상 보기

HttpSession

위에서 자바지기님이 무조건 false라고 하신 이유에 대해서 계속 알아보려다가 내가 HttpSession에 대한 이해가 없다는 것을 깨닫고 HttpSession에 대해서 공부했다.

HttpSession는 page request에서 사용자를 식별하거나, 웹 사이트를 방문하면서 해당 사용자에 대한 정보를 유지하는 방법을 제공한다.

HttpSession의 setAttribute("Key", 객체) 메서드는 "Key"를 사용해서 객체를 세션에 묶어(바인딩)준다. 들어오는 객체의 타입은 알수가 없기 때문에 Object형으로 업캐스팅되어 받는다.

getAttribute("Key")는 바인딩된 객체를 리턴하고 없으면 null을 리턴한다. setAttribute()할때 객체가 업캐스팅 되었기 때문에 가져올때는 다운캐스팅도 해야한다.

참고
[예제] 세션(HttpSession) 기반 로그인 처리하기

자바지기님이 return this.userId == sessionedUser; 이렇게하면 무조건 false 나온다고 한다. 이 부분 영상 보기

라고 하신 이유는

먼저 로그인할 때 User 타입의 객체에 유저를 넣어준다. 이떄 그 유저를 계속 돌려가며 사용한다면 같기 때문에 true로 나올 수 있다.

근데 Question 객체를 생성할 때, 세션에서 불러오면서 Object로 업캐스팅 됐던 것을 다시 User 타입으로 다운캐스팅하고 이어서 똑같은 User 타입이지만 또 다른 객체에 담기 때문에 둘은 절대 같을 수가 없다. 그래서 false이다.

equals(), hashCode()

둘은 왜 같이 오버라이드 해야하는거지? equals만 해줘도 되지 않나? 이부분 영상 링크

어제 til 피드백에 대한 생각

일단 중간점검차 배운것까지 댓글을 달았었습니다. ㅎㅎ



여기 글의 이미지를 보아 메세지컨버터도 동일한 위치의 개념인거 같아보이는데요. 메세지컨버터는 뷰리졸버와 비교하면서 공부해야하는 것 같은데,,, 혹시 추천하는 글이 있으시다면 한번 봐도 될까요?


여튼 중요한건 web.xml이 왜 없고,,,,그러니까 지금까지 배운걸 보면 모두 jsp를 이용하는거 같은데...

그리고 제가 잘못 작성한거 같습니다. 모두 jsp를 이용한다는 말은 이때까지 배운 servlet, dispatcherservlet, viewresolver 에 대한 자료들을 살펴보니까 전부 WEB-INF 내에 있는 web.xml을 언급하더라구요..
그래서 web.xml 을 쓰는 건 JSP 를 이용한다고 생각했는데 이것도 혹시 틀렸을까요?

그리고 지금 미션 하면서 web.xml이 없어서, 왜인지는 잘 모르겠으나 지금은 JPA를 이용해서 만들고있기 때문에 그런가보다 라고 추측했습니다.

이 말은 맞나요?

지금까지 배운걸보면 모두 JPA 를 사용하는거 같은데....

profile
TIL 남기는 공간입니다

0개의 댓글