본문 바로가기

스프링과 JPA 기반 웹 어플리케이션 개발85

21. Open EntityManager (또는 Session) In View 필터 JPA EntityManager(영속성 컨텍스트)를 요청을 처리하는 전체 프로세스에 바인딩 시켜주는 필터. 뷰를 랜더링 할때까지 영속성 컨텍스트를 유지하기 때문에 필요한 데이터를 랜더링 하는 시점에 추가로 읽어올 수 있다.(지연 로딩, Lazy Loading) 엔티티 객체 변경은 반드시 트랜잭션 안에서 할 것 그래야 트랜잭션 종료 직전 또는 필요한 시점에 변경 사항을 DB에 반영 현재 버그 회원가입후 이메일인증을 한 후에도 DB에 반영이 되지 않는다. 컨트롤러에서 데이터를 변경했다. 왜 DB에 반영되지 않았을까? 트랜잭션 범위 밖에서 일어난 일이기 때문에! 스터디올래의 선택 데이터 변경은 서비스 계층으로 위임해서 트랜잭션안에서 처리한다. 데이터 조회는 Repository 또는 서비스를 사용한다. Acco.. 2020. 4. 21.
20. 프로필 뷰 정보의 유/무 여부에 따라 보여줄 메시지가 다르다. 현재 유저가 프로필을 수정할 수 있는 권한이 있는지 판단해야 한다. AccountController에 프로필 뷰 요청하는 핸들러 구현 package me.weekbelt.studyolle.account; @RequiredArgsConstructor @Controller public class AccountController { // 기존 코드 ....... @GetMapping("/profile/{nickname}") public String viewProfile(@PathVariable String nickname, Model model, @CurrentUser Account account){ Account byNickname = accountRepo.. 2020. 4. 21.
19. 로그인 기억하기(RememberMe) 세션이 만료 되더라도 로그인을 유지하고 싶을 때 사용하는 방법 쿠키에 인증 정보를 남겨두고 세션이 만료 됐을 때에는 쿠키에 남아있는 정보로 인증한다. 해시 기반의 쿠키(SpringSecurity제공) Username Password 만료 기간 Key(애플리케이션 마다 다른 값을 줘야 한다.) 치명적인 단점, 쿠키를 다른 사람이 가져가면... 그 계정은 탈취당한 것과 같다. 조금 더 안전한 방법은? 쿠키안에 랜덤한 문자열(토큰)을 만들어 같이 저장하고 매번 인증할 때마다 바꾼다. Username, 토큰 문제는 이방법도 취약하다. 쿠키를 탈취 다하면, 해커가 쿠키로 인증을 할 수 있고, 희생자는 쿠키로 인증하지 못한다. 조금 더 개선한 방법(SpringSecurity제공) https://www.program.. 2020. 4. 21.
18. 로그인 / 로그아웃 테스트 테스트 요점 정리 폼 서브밋 요청(post)은 반드시 .with(csrf())를 추가할 것. .andExpect(authenticated()) 또는 .andExprect(unauthenticated())로 인증 여부를 확인할 수 있다. 리다이렉트 응답은 .andExpect(status().is3xxRedirection())로 확인할 수 있다. 리다이렉트 URL은 .andExpect(redirectUrl())로 확인할 수 있다. JUnit5의 @BeforeEach와 @AfterEach. 임의로 로그인 된 사용자가 필요한 경우에는 @WithMockUser. 테스트 코드 package me.weekbelt.studyolle.main; @SpringBootTest @AutoConfigureMockMvc clas.. 2020. 4. 20.