간단하게 사용자 이름(닉네임)과 비밀번호 정보를 가지고 회원가입 기능을 구현해보겠습니다. 저번에 포스팅하다가 끊긴 게시판 만들기와 같은 프로젝트입니다. 프론트엔드는 이미 따로 구성해놓으셨다는 가정하에 진행하겠습니다. 저는 디자인을 잘 몰라서.. 프론트엔드 부분을 대충 구성해놓았기에 공유해드리기도 민망해서 그렇습니다.
제일 먼저 spring security를 사용하려면 dependency를 추가해줘야겠죠. build.gradle에 다음과 같은 의존성을 추가해줍니다. implementation 'org.springframework.boot:spring-boot-starter-security'
자 기본 설정(?)은 완료가 되었으니 실질적인 코드 작성을 해보겠습니다.
일단 이번에도 JPA를 가지고 만들게요.
User 클래스
UserDto
일단 UserDto랑 그냥 User 클래스는 조금 다릅니다. User 클래스는 실제 DB 테이블과 매칭되도록 작성한 클래스인 반면 데이터를 주고받기 위해 생성한 자바빈 객체입니다.
toEntity()는 전달받은 객체를 Entity로 간편하게 바꿔주는 메서드입니다. JPA를 이용해서 객체를 저장할때 Entity의 형태로 저장해줘야 되므로 변환용 메서드를 만들어줬습니다. 또한 제가 spring security를 사용한 부분이기도 합니다. toEntity의 password를 보시면 Bcrypt방식으로 인코딩을 하라고 작성해줬습니다. 이 기능을 spring security에서 제공해준답니다.
UserRepository 인터페이스
JpaRepository를 상속받는 interface를 만들어줍니다. 제너릭 안에 Entity와 ID의 타입을 적어줍니다.
UserService
@Transactional 위의 코드들은 생성자 주입을 해주는 부분입니다. @Transactional이 붙은 메서드는 프록시(Proxy) 객체를 return합니다. 또 그 프록시 객체는 정상 여부에 따라서 롤백과 커밋 기능을 수행합니다. 즉 예외가 발생되면 알아서 rollback을 해주기에 편리하니까 사용해봤습니다.
UserController
저 같은 경우에는 임시로 /register url로 접근을 하면 회원가입 서비스가 돌아가도록 구성해놨습니다. 또한 단순 db 저장까지가 이번 포스팅의 목표이므로 루트 페이지로 강제 이동시키고 끝낼게요.
자 여기까지 작성해주시면 기본적인 회원가입 서비스 기능 구현은 끝났습니다. 제대로 돌아가는지 직접 브라우저에서 접속해보시면 아마도 본인이 만든 적이 없는 페이지가 막 뜰겁니다.
형태는 사람마다 다르던데 저는 localhost:8080/login 이라면서 다른 url로 이동해도 계속 이 페이지가 뜨더라구요. spring security가 자체적으로 인증되지 않은 사용자의 접근을 막아두었기 때문에 이러한 현상이 발생합니다. 이것을 해결하는 방법에 대해서는 다음 포스팅에서 다루겠습니다.
참고
'web > spring&spring boot' 카테고리의 다른 글
[spring boot] 로그인 기능 구현하기 (0) | 2021.04.25 |
---|---|
[spring boot] 회원가입 기능 구현하기(2) - SecurityConfig 작성 (0) | 2021.04.23 |
[Gradle] compile 대신 implementation을 쓰는 이유 (0) | 2021.04.15 |
[spring boot] 스프링 부트 h2 데이터베이스 영구 저장 (0) | 2021.04.01 |
[스프링부트] 게시판 - 게시글 등록 구현하기(1) (0) | 2021.03.28 |