본문 바로가기

반응형

Server Programming/Spring Boot Full-Stack Programming

(45)
[스프링 풀스택 클론 코딩 - 계정 설정] (2-4) 프로필 이미지 변경 npm install cropper npm install jquery-cropper $("#profile-image-file").change(function(e) { if (e.target.files.length === 1) { const reader = new FileReader(); reader.onload = e => { if (e.target.result) { let img = document.createElement("img"); img.id = 'new-profile'; img.src = e.target.result; img.width = 250; $newProfileImage.html(img); $newProfileImage.show(); $currentProfileImage.hide(); ..
[스프링 풀스택 클론 코딩] 엔티티 상태에 따른 DB 반영 영속성 컨텍스트에서 관리하는 객체가 되면, DB에 적용이 된다. 엔터티의 상태 1. Transient: 객체를 생성하고, 값을 주어도 JPA나 hibernate가 그 객체에 관해 아무것도 모르는 상태. 즉, 데이터베이스와 매핑된 것이 아무것도 없다. 2. Persistent: 저장을 하고나서, JPA가 아는 상태(관리하는 상태)가 된다. 그러나 .save()를 했다고 해서, 이 순간 바로 DB에 이 객체에 대한 데이터가 들어가는 것은 아니다. JPA가 persistent 상태로 관리하고 있다가, 후에 데이터를 저장한다.(1차 캐시, Dirty Checking(변경사항 감지), Write Behind(최대한 늦게, 필요한 시점에 DB에 적용) 3. Detached: JPA가 더이상 관리하지 않는 상태. J..
[스프링 풀스택 클론 코딩 - 계정 설정] (2-2) 프로필 수정 처리 SettingsController package com.demo.settings; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import..
[스프링 풀스택 클론 코딩 - 계정 설정] (2-1) 프로필 수정 폼 settings/profile
[스프링 풀스택 클론 코딩] Open EntityManager (또는 Session) In View 필터 JPA EntityManager (영속성 컨텍스트) : 뷰를 랜더링 할 때까지 영속성 컨텍스트를 유지하기 때문에, 회원가입을 하고, 메일 인증까지 완료했음에도, 프로필에서 가입 완료라고 인지를 못하는 버그 컨트롤러에서 데이터를 변경했지만, DB에 반영이 되지 않은 상태 -> 트랜재션 범위 밖이기 때문에 -> 리파지토리를 직접 사용했기 때문에, 서비스 계층에서 인지를 하지 못한다. 따라서 DB에 반영이 되지 않는다. 리파지토리를 직접 사용하는 게 아니라, 서비스 계층의 트랜잭션안에서 처리하도록 수정한다. ->따라서 데이터 조회를 리파지토리 혹은 서비스를 사용하도록 변경 인증메일 처리 AccountController의 checkEmailToken 메서드 : Validation이후 -> account 클래스의..
[스프링 풀스택 클론 코딩 - 회원가입] (1-20) 가입 일자 데이터의 변경이 DB에 반영되지 않는 버그 가입 일자 데이터의 변경이 DB에 반영되지 않는 버그 : 영속성 컨텍스트 -> 서비스 계층으로의 위임 AccountController의 checkEmailToken 메서드의 변경 :AccountService는 @Transactional을 클래스 전체로 옮기고, 조회만 하는 메서드의 경우 @Transactional (readOnly = true) 처리 또한, completeSignUp 메서드의 생성자를 새로 정의해서, -> 컨트롤러에서 하던 내용들을 기본생성자를 통해 처리하고, 로그인 처리까지 서비스에서 맡는다. 변경 전 //이메일 인증 확인 -> 이메일, 토큰 값 둘다 일치해야함 -> 화면에 전달할 모델도 파라미터로 전송 @GetMapping("/check-email-token") public Strin..
[스프링 풀스택 클론 코딩 - 회원가입] (1-19) 로그인 기억하기 세션정보는 기본적으로 30분으로, 30분이 지나면 로그인 정보는 사라진다. server.servlet.session.timeout=30m -> application.properties에서 설정으로 바꿔줄 수 있다. 세션이 종료되어도 로그인 유지가 가능하게 하려면 암호화해서 담아둬야한다. -> rememberme.cookie 내 유저의 패스워드로 인증을 한다. 쿠키를 탈취당하지 않도록 해야한다. -> 쿠키를 탈취당하면 해킹당한 것과 같다. 로그아웃을 한다면 쿠키와 세션을 날리도록 설정 -> 해쉬기반의 쿠키를 사용하는 것이 아닌, 쿠키안에 랜덤한 문자열을 만들어 같이 저장하고 매번 인증할 때 바뀌도록 하지만, 이경우에도 탈취당했을 경우 해커만 탈취한 쿠키로 인증할 수 있는 문제 발생 -> Username, ..
[스프링 풀스택 클론 코딩 - 회원가입] (1-18) 로그인 로그아웃 로그인 처리는 스프링 시큐리티를 이용 login Insert title here 데모 로그인 이메일(또는 닉네임)과 패스워드가 정확하지 않습니다. 또는 확인되지 않은 이메일을 사용했습니다. 이메일을 확인해 주세요. 확인 후 다시 입력하시거나, 패스워드 찾기를 이용하세요. 이메일 또는 닉네임 가입할 때 사용한 이메일 또는 닉네임을 입력하세요. 이메일을 입력하세요. 패스워드 패스워드가 기억나지 않는다면, 패스워드 없이 로그인하기 패스워드를 입력하세요. 로그인 스터디올래에 처음 오신거라면 계정을 먼저 만드세요. SecurityConfig package com.demo.config; import org.springframework.boot.autoconfigure.security.servlet.PathReque..

반응형