TACO 프로젝트 회고록(2023-05-25)

윤현우·2023년 5월 26일
0

TACO 프로젝트 회고록

목록 보기
21/31
post-thumbnail

오늘은 게시글 CRUD 부분에 대한 수정을 하였다.

이전의 회고록 마지막 부분에 써놨던, 해당 게시글이 로그인한 유저의 게시글인지 확인하는 방법에 대하여 고민하고 코드를 작성해보았다.

해당 고민은 자신의 게시글일 경우 수정 및 삭제를 할 수 있도록 해야하므로 수정 및 삭제 버튼을 활성화/ 비활성화 시킬 방법을 모색한 것이다.

로그인 부분을 혼자 공부하기도 했고, 기능구현도 처음이다 보니 이게 정확한 방법, 제대로된 방법은 아닐 것이다.

하지만, 나만의 생각으로 고민하고, 기능을 구현하는 것은 분명 나중에 도움이 될것이라고 생각된다.


로그인한 유저의 게시글인지 확인하려면 필요한 것은 로그인한 유저의 세션에 저장된 userIndex와 게시글의 userIndex가 같은지 확인하면 된다.

만약 두 userIndex가 같다면 자신의 글인 것이니까.

postController를 보면 해당 게시글을 찾아 View단으로 뿌리는 로직이다.

	// 게시글 상세보기
    @GetMapping("/post/{postId}")
    public ResponseEntity<Integer> read(HttpSession session, @PathVariable(name = "postId") Long postId) {
        
        Optional<PostEntity> post = postService.read(postId);
        model.addAttribute("post", post);
        
        return new ResponseEntity<>(post, HttpStatus.OK);
        // return "post_detail";
    }

해당 url로 데이터를 보내려면 우선 게시글 정보는 필수로 view단에 넘겨야 한다.

그래서 나는 생각했다.

이름이 다른 model을 생성해서 하나는 게시글 정보를, 다른 하나는 로그인 세션userIndex가 게시글 userIndex와 같은지 체크하는 정보를.

그래서 혹시 model 값을 js로 가져와 index가 같으면 버튼 display를 활성화 시키고 index가 다르면 display를 비활성화 시킬수 있나 라는 생각을 하게 되었고, 구글링을 해보았다.

https://mollangpiu.tistory.com/331

해당 게시물을 보면 타임리프로 받아온 데이터를 js에서도 사용할 수 있는 것을 확인하였고, 바로 로직을 구현해 보았다.


	// 게시글 상세보기
    @GetMapping("/post/{postId}")
    public ResponseEntity<Integer> read(HttpSession session, @PathVariable(name = "postId") Long postId, Model model) {
        Long userIndex = (Long) session.getAttribute("userIndex");
        
        Optional<PostEntity> post = postService.read(postId);
        model.addAttribute("post", post);
        
        
        // 세션을 가져와서 만약 게시글 userIndex와 같다면, 1을 출력해 수정 및 삭제 버튼 활성화
        Integer checkedUserIndex = 0;
        if(userIndex != null){
            if(userIndex == post.get().getUserIndex()){
                model.addAttribute("correct", "1");
                checkedUserIndex = 1;
            } else if(userIndex != post.get().getUserIndex()){
                model.addAttribute("incorrect", "0");
                checkedUserIndex = 2;
            }
        }
        
        return new ResponseEntity<>(checkedUserIndex, HttpStatus.OK);
        // return "post_detail";
    }

해당 로직을 보면, 우선 세션을 통해 로그인한 유저의 index를 가져온다.

그리고, 게시글의 userIndex를 가지고 올 수 있도록 먼저 게시글을 찾아온다.

그 후, 사용자 userIndex와 게시글 userIndex가 같으면 1, 다르면 2, 로그인이 되어있지 않은 상태에서 게시글을 보게되면 0을 출력하게 만들었다.

나의 생각은 이렇다.

model로 받은 게시글 데이터는 바로 보여주고, 자신의 게시글인지 체크하는 model은 js로 받아 0,2를 받아오면 수정 및 삭제 버튼 비활성화, 1을 받아오면 수정 및 삭제 버튼 활성화

이렇게 만들어보았다.

이 이후의 수정 페이지 들어가는 로직, 수정 로직, 삭제 로직은 방금 설명한 상세 게시글 들어갈 때 이미 자신의 게시글인지 확인할 수 있기 때문에 자신의 게시글인지 체크할 이유는 없을 것 같다.


혼자 공부하면서 이렇게 내가 혼자 생각해서 만드는 로직이 참 재미있는 것 같다.

뭔가 내가 직접 만들었다는 생각이 드니 기분이 좋아진다.

이런 경험도 성장하는데 일부분을 차지하는 것 일지는 모르겠지만, 이렇게 계속 꾸준히 공부하고, 생각하면 언젠간 도움이 될거라 생각한다.

profile
개발자가 되는 그날까지

0개의 댓글