IDE: IntetlliJ Ultimate
Spring Boot: 3.3.0
JDK: 17
💾 AuthController.java
> 강의
@PostMapping("/auth/signup")
public String signup(@Valid SignupDto signupDto, BindingResult bindingResult) {
User user = signupDto.toEntity();
User userEntity = authService.join(user);
log.info("userEntity: {}", userEntity.toString());
return "auth/signin";
}
> 변경
@PostMapping("/auth/signup")
public String signup(SignupReqDto signupReqDto) { // key=value (x-www-form-urlencoded)
User join = authService.join(signupReqDto);
log.info("join: {}", join.toString());
return "auth/signin";
}
강의에서는 dto -> entity 변환하는 로직을 Controller에 작성하고 있다.
이 로직을 서비스 계층에서 처리하도록 변경했다.
컨트롤러 계층에서는 사용자로부터 입력받아 서비스 계층에 전달하는 역할을 하기 때문에!
로직은 서비스 계층에서 작업하는 것이, 추후에 유지보수하기에도 좋다고 본다.
💾 User.java
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 번호 증가 전략이 DB를 따라감
private Long id;
.
.
.
private LocalDateTime createdDate;
@PrePersist
public void createdDate() {
this.createdDate = LocalDateTime.now();
}
}
- `@Bulder` 애노테이션 추가
💾 SignupReqDto.java
package org.example.photogram_re.web.dto.auth;
import lombok.Data;
import org.example.photogram_re.domain.user.User;
@Data // Getter, Setter
public class SignupReqDto {
private String username;
private String password;
private String email;
private String name;
public User toEntity() {
return User.builder()
.username(username)
.password(password)
.email(email)
.name(name)
.build();
}
}
- `toEntity()` 메서드
- dto를 entity로 변환
예전에 dto를 entity로 변환할 때는 setter 방식을 이용했었는데, 확실히 builder() 패턴이 작성도 쉽고 가독성이 좋은 것 같다.
💾 AuthService.java
package org.example.photogram_re.service;
import lombok.RequiredArgsConstructor;
import org.example.photogram_re.domain.user.User;
import org.example.photogram_re.domain.user.UserRepository;
import org.example.photogram_re.web.dto.auth.SignupReqDto;
import org.springframework.stereotype.Service;
@RequiredArgsConstructor
@Service // 1. IoC, 2. 트랜잭션 관리
public class AuthService {
private final UserRepository userRepository;
public User join(SignupReqDto signupReqDto) {
return userRepository.save(signupReqDto.toEntity());
}
}
`userRepository.java`를 객체에 담아 return 해도 되나, 로직이 비교적 단순하여 바로 return 했다.
💾 UserRepository.java
package org.example.photogram_re.domain.user;
import org.springframework.data.jpa.repository.JpaRepository;
// 애노테이션이 없어도 JpaRepository를 상속하면 IoC 등록이 자동으로 됨
public interface UserRepository extends JpaRepository<User, Long> {
}
여기까지 작성을 하면, 회원가입은 완료.
이 이후에는 비밀번호 해시와 동일 username으로 가입 불가 등의 기능이 추가될 예정이다.
이지업클래스 [메타코딩] 스프링부트 SNS프로젝트 - 포토그램 만들기 강의 실습
300x250
'Framekwork > photogram' 카테고리의 다른 글
[스프링 부트 포토그램] 21강 인증 회원가입 - 전처리 후처리 개념잡기 (0) | 2024.09.04 |
---|---|
[스프링 부트 포토그램] 20강 인증 회원가입 - 비밀번호 해시 (BCryptPasswordEncoder) (0) | 2024.09.03 |
[스프링 부트 포토그램] 18강 인증 회원가입 - User 모델 만들기 (0) | 2024.09.02 |
[스프링 부트 포토그램] 17강 인증 회원가입 - CSFR 토큰 해제 (0) | 2024.08.26 |
[스프링 부트 포토그램] 16강 인증 회원가입 - SecurityConfig 생성 (0) | 2024.08.22 |