들어가기 전 build.gradle 체크 (+회원 수정 더티체킹)

coding S's avatar
Apr 19, 2024
들어가기 전 build.gradle 체크 (+회원 수정 더티체킹)

[ build.gradle 체크 ]

notion image
dependencies { implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.0' implementation 'org.springframework.boot:spring-boot-starter-aop' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation group: 'com.auth0', name: 'java-jwt', version: '4.3.0' implementation group: 'org.qlrm', name: 'qlrm', version: '4.0.1' implementation group: 'org.mindrot', name: 'jbcrypt', version: '0.4' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-mustache' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
💡
* validation 없으면 유효성 검사 불가 lang3 패키지는 엄청나게 많은 함수를 가지고 있음 문자열을 가지고 놀 수 있는 함수들이 많음
 

[ 수정해주기 ]

notion image
💡
200에 대한 결과 값을 줄 때, 비밀번호도 함께 줄 필요 없다
 

[ SessionUser 클래스 생성 ]

package shop.mtcoding.blog.user; import lombok.Data; import java.sql.Timestamp; @Data public class SessionUser { private Integer id; private String username; private String email; private Timestamp createdAt; public SessionUser(User user) { this.id = user.getId(); this.username = user.getUsername(); this.email = user.getEmail(); this.craetedAt = user.getCreatedAt(); } }
💡
엔티티를 들고 오게 되면 일관성이 맞지 않기 때문에 SessionUser 클래스를 만들어줌
 

[ Service ]

public SessionUser 로그인(UserRequest.LoginDTO reqDTO){ User user = userJPARepository.findByUsernameAndPassword(reqDTO.getUsername(), reqDTO.getPassword()) .orElseThrow(() -> new Exception401("인증되지 않았습니다")); return new SessionUser(user); }
💡
이제 모든게 다 엔티티를 응답하지 않게 됨
 

[ 컨트롤러 ]

@PostMapping("/login") public ResponseEntity<?> login(@RequestBody UserRequest.LoginDTO reqDTO) { SessionUser sessionUser = userService.로그인(reqDTO); session.setAttribute("sessionUser", sessionUser); return ResponseEntity.ok(new ApiUtil(null)); }
 

[ 회원 수정도... ]

@Transactional public SessionUser 회원수정(int id, UserRequest.UpdateDTO reqDTO){ User user = userJPARepository.findById(id) .orElseThrow(() -> new Exception404("회원정보를 찾을 수 없습니다")); user.setPassword(reqDTO.getPassword()); user.setEmail(reqDTO.getEmail()); return new SessionUser(user); } // 더티체킹
 
Share article

codingb