포트폴리오 8일차

김상복·2022년 6월 1일
0

포트폴리오

목록 보기
8/8

8일차 목표

회원가입 ------ 완료
회원가입 한 아이디로 로그인 가능 ----- 완료
로그인 한 회원의 정보 확인
로그인 회원 글 리스트 확인 가능 ----- 진행 중
해당 글 조회 가능
해당 글 수정 및 삭제 가능
로그아웃

생각보다 멈춰있지만 차근차근 나아가고 있다
어제 만들었던 회원가입 폼은 완전히 완성되었고

오늘은 글 리스트 확인 기능과 글 생성 및 조회를 진행해볼 예정이다


로그인 후 리스트 띄우기

어제 foreach에 처음에는 그냥 VO 를 넣어서 사용할려고 했으나 오류가 떠서 확인해보니

items에는 Collction 타입의 데이터만이 들어갈 수 있다는 것을 알았다

그렇기에 mapper 클래스와 인터페이스 Controller를 수정했다

[mapper]

	<!-- BoardCheck -->
	<select id="boardCheck" resultType="com.bok.domain.BoardVO">
		select * from test_board where userNumber=#{userNumber}
	</select>
    
    

[interface]

List<BoardVO> boardCheck(int userNumber);

이렇게 mapper는 그대로 이지만 service 인터페이스의 반환형을 List로 받고 거기에 제네릭으로 List 안에 들어갈 데이터는 반드시 BoardVO라고 지정해줌으로써 완벽하게 리스트가 출력되는 것을 알 수 있다

글 생성

글 생성 폼을 만들기는 굉장히 쉽다

하지만 문제가 있다면 그 문제는 바로 어떻게 userNumber를 페이지에 로그인 된 동안 저장해놓고 꺼내다 쓸 것인가이다. 물론 Model에 저장해서 계속 RequestParam, Model을 하면 데이터를 가져올 수도 있지만 이런 방법 보다 조금 더 괜찮은 방법이 없는지 생각하던 도중 예전에 공부했던 세션과 쿠키에 대해서 생각하게 되었다

[쿠키설명]
https://velog.io/@geesuee/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%83%81%ED%83%9C%EC%9C%A0%EC%A7%80-%EA%B8%B0%EC%88%A0%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98

https://hahahoho5915.tistory.com/32

이 두가지를 보면 완전하게 알 수 있다

세션에 userNumber를 저장해두고 난 뒤 해당 데이터를 가져와서 글 생성 후 list로 이동할 것이다

[Controller]

	@PostMapping("/register")
    public String postregister(BoardVO vo, @RequestParam("userNumber") int userNumber,RedirectAttributes rttr) {

        System.out.println("PostRegister Start");

        rttr.addAttribute("userNumber", userNumber);
        service.register(vo);

        return "redirect:/board/list";
    }

    @GetMapping("/list")
    public void getlist(@RequestParam("userNumber") int userNumber,Model model) {

        List<BoardVO> list= service.list(userNumber);

        model.addAttribute("list",list);

    }

Controller에서 주목할 점은 userNumber를 어디서 가져왔는가 그리고

RedirectAttributes 이다

userNumber는 register 페이지에서 따로 전송하고 그 전에 로그인이 될 때 Session에 저장 되도록 UserController에 설정해 두었다

해당 데이터를 hidden 태그로 받아서 사용할 것이다

RedirectAttributes는 redirect시 데이터를 전달할 수 있게 해주는 객체이다

자세한 것은 밑의 url 블로그를 참조하자

[RedirectAttributes]
https://web-obj.tistory.com/455

그렇다면 redirect란 뭘까?

원래 Controller에서보면 String의 return 에 오는 url로 이동하게 되는데 이 때 view 페이지만을 다시 보여주는 것이지 다시 url을 부르는 개념이 아니다.

하지만 redirect를 하게 되면 다시 한번 그 url을 부르게 되면서 Controller를 부르게된다

위의 코드를 다시한 번 보자

userNumber를 가져와서 mapper를 사용하게 된다

[mapper]

	<!-- 글 생성 -->
	<insert id="register">
		insert into test_board values(boardNumber.nextval, #{userNumber}, #{title}, #{content}, sysdate)
	</insert>
	
	<!-- BoardCheck -->
	<select id="list" resultType="com.bok.domain.BoardVO">
		select * from test_board where userNumber=#{userNumber} order by boardNumber desc
	</select>

register mapper를 사용해서 insert 하고 난 뒤 redirect에 따라서 getlist 메소드를 실행하게 되고 RedirectAttributes의 parameter를 가져와서

      List<BoardVO> list= service.list(userNumber);

를 실행시켜서 List 페이지를 가져오게 된다

하지만 여기에 하나 문제가 있다

바로 url에 파라미터 값이 나온 다는 것이다

이것을 해결해보자

profile
초보 개발자

0개의 댓글