-
<Spring Boot> 간단한 스프링부트를 이용한 회원가입, 로그인Spring Boot 2023. 9. 5. 22:43
spring boot를 이용한 회원가입, 로그인 코드에 대해 작성해보겠습니다.
spring boot 프로젝트를 생성 후 properties 부터 설정하겠습니다.
spring.thymeleaf.cache=false #아래는 db 설정 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://localhost:3306/testdb spring.datasource.username=root spring.datasource.password=0107 server.port=80 # 포트 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.show-sql=true logging.level.org.hibernate.type.desriptor.sql=trace spring.jpa.open-in-view=true logging.level.web=debug logging.level.org.hibernate.SQL = DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace spring.mvc.log-request-details=true spring.jpa.properties.hibernate.highlight_sql=true spring.jpa.properties.hibernate.use_sql_comments=true
나머지는 공식이라 생각하시면 되고 port 와 db 설정만 잡으시면 됩니다.
port 80번을 지정하면 따로 url 에 포트넘버를 안 넘겨주셔도 됩니다.
저는 mariaDB를 사용하기 때문에 mariaDB로 설정하였습니다.
로그인 로직 정리
package comfullstack2.board.entity; import java.sql.Date; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.transaction.Transactional; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; @Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter @ToString public class Member extends BaseEntity{ @Id private String email; private String password; private String name; private String userName; private String postalCode; private String addressBasic; private String addressRest; private String phone; private String mobile; private String birth; }
dto 를 이용하여 로직이 돌아갈 동안 db에 데이터를 dto 에 buider 어노테이션을 이용하여
get /set 을 통해 entitiy로 변환 후
entity 가 crud 작업을 할 수 있습니다.
entity 하나는 테이블 하나다 라고 생각하시면 굉장히 이해하기 편합니다.
entity를 이용해 db에 테이블을 생성하고, 테이블에 curd를 담당합니다.
package comfullstack2.board.dto; import java.sql.Date; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor @Builder public class MemberDTO { private String email; private String password; private String name; private String userName; private String postalCode; private String addressBasic; private String addressRest; private String phone; private String mobile; private String birth; }
그러고 난 후 controller 를 생성하였습니다.
controller 뿐 만 아니라 앞으로 만들 service, dto, repository 들은 그룹 패키지 하위에 생성하여야 하면
각 viwer 역할을 할 html 파일은 src/main/resoures 하위에 있는 templetes에 생성 해주셔야 합니다.
@Controller @RequiredArgsConstructor public class MemberController { private final MemberRepository memberRepository; private final MemberServiceImple memberServiceImple; @GetMapping("/home") public void goHome(){ } @GetMapping("/login") public String login() { return "login"; } }
해당 코드는 controller 어노테이션을 붙여줘서 controller 역할을 하게 합니다.
home 과 login 이라는 view 를 생성하여 get, post mapping 을 해줍니다
login view에 form 에 method 를 post 로 지정하고 버튼에 submit을 주어서 클릭을 하면 데이터가 날라가게 세팅했습니다.
위 코드에서 사용된 @~Mapping 내 맘대로 정리.
더보기@GetMapping - Spring이 자동으로 src/main/resouces의 templates에서 hello라는 이름의 View를 찾아서 반환해준다.
@PostMapping - html에 submit 이벤트 등 데이터를 전달 할 떄 사용되며 redirect 를 통해 해당 html view 를 찾아 반환 또는
@requestParam 을 통해 html에 request 선언된 항목에 데이터를 컨트롤러에 파람으로 넘겨줍니다.
import org.springframework.data.jpa.repository.JpaRepository; import comfullstack2.board.dto.MemberDTO; import comfullstack2.board.entity.Member; public interface MemberRepository extends JpaRepository<Member, String>{ void save(MemberDTO dto); Member findByUserName(String userName); }
스프링 부트에 JpaRepository 를 extends 하여 회원 가입 등 다양한 곳에 이용한 save 와 findby~~ 메서드를 선언합니다.
선언과 동시에 해당 메서드는 기능까지 구현 됩니다.
이제 서비스를 만들 건데 서비스는 두 번에 걸쳐 생성해줍니다.
MemberService 는 추상메서드를 선언해주는 interface로 생성하고MemberServiceImpl 이라는 클래스를 만들어 @Service 어노테이션을 달아 Service 클래스로 만들어줍니다
package comfullstack2.board.service; public interface MemberService { boolean checkinfo(String email, String password); }
package comfullstack2.board.service; import org.springframework.stereotype.Service; import comfullstack2.board.entity.Member; import comfullstack2.board.repository.MemberRepository; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class MemberServiceImple implements MemberService { private final MemberRepository memberRepository; @Override public boolean checkinfo(String userName, String password) { Member member= memberRepository.findByUserName(userName); if (member != null && member.getPassword().equals(password)) { return true; // 이메일과 비밀번호가 일치하는 회원이 있으면 true 반환 } return false; } }
service 인터페이스 에서 boolean 타입에 로그인 검증 메서드를 선언 후
serviceImpl 클래스에서 해당 메서드를 정의해줍니다.
여기서 repository 에서 생성한 findbyUserName 을 이용하기위해 final 형태로 repository를 불러오고
스프링 부트에 final 선언 시 필요한 requiredArsConstructor 어노테이션을 호출해줍니다.
여기까지 로그인에 사용할 서비스,repository 작업이 끝났습니다.
그럼 다시 controller 로 이동해줍니다.
@PostMapping("/login") public String loginlogic(String userName, String password, RedirectAttributes redirectAttributes) { boolean check =memberServiceImple.checkinfo(userName, password); if (check) { System.err.println("로그인 성공"); return "redirect:/home"; } else { System.err.println("로그인 실패"); return "redirect:/login"; } }
컨트롤러에 파라미터로 userName과 password 그리고 reture 으로 redirect 를 하기위해
RedirectAttributes 객체 파라미터로 줍니다 이렇게 하면 로그인 로직은 완성입니다 .
회원가입 로직 까지 작성 완료 후 실행결과를 함께 보여드리겠습니다.
회원가입로직
@GetMapping("/join") public void getJoin() { } @PostMapping("/join") public String register( }
아까 생성했던 controller 에 해당 코드를 작성해줍니다.
해당 코드는 아까 위에서 설명과 동일합니다.
만든 후 html에 name 이 들어있는 태그 안에 require 을 줍니다.
@PostMapping("/join") public String register( @RequestParam("userName") String userName, @RequestParam("password") String password, @RequestParam("confirm-password") String confirm, @RequestParam("name") String name, @RequestParam("phone-area") String phoneArea, @RequestParam("phone-number") String phoneNumber, @RequestParam("phone-ext") String phoneExt, @RequestParam("mobile-area") String mobileArea, @RequestParam("mobile-number") String mobileNumber, @RequestParam("mobile-ext") String mobileExt, @RequestParam("postal-code") String postalCode, @RequestParam("birth-year") String birthYear, @RequestParam("birth-month") String birthMonth, @RequestParam("birth-day") String birthDay, @RequestParam("address-basic") String addressBasic, @RequestParam("address-rest") String addressRest, @RequestParam("email") String email, RedirectAttributes redirectAttributes) { // 생년월일 정보를 조합하여 birth 문자열을 생성 String birth = birthYear + "-" + birthMonth + "-" + birthDay; if (password.equals(confirm)) { Member member = Member.builder() .userName(userName) .password(password) .name(name) .postalCode(postalCode) .addressBasic(addressBasic) .addressRest(addressRest) .phone(phoneArea + phoneNumber + phoneExt) .mobile(mobileArea + mobileNumber + mobileExt) .email(email) .birth(birth) .build(); memberRepository.save(member); return "redirect:/login"; } else { System.err.println("비밀번호 틀림"); return "redirect:/join"; }
@RequireParam
문법 )) @RequireParam("require name") type 파라미터
이렇게 해주면 view 에서 입력 받은 값을 파라미터로 받아 올 수있다.
이 어노테이션을 이용하기 위해서는 view 에 require 을 작성해야한다.
다음은 실행결과입니다.
회원가입
DB에 정상적으로 insert 되고
로그인 폼으로 넘어가는 것을 볼 수있다.
로그인
이렇게 home 으로 이동 되는 것을 확인 할 수 있습니다.
이렇게 회원가입, 로그인 포스팅을 끝내겠습니다.
'Spring Boot' 카테고리의 다른 글
< Spring Boot > RESTful (0) 2023.11.02 < Spring Boot > Security (0) 2023.10.16 < Spring Boot > ThymLeaf (0) 2023.08.30 <Spring Boot> queryAnnoation (0) 2023.08.25 <Spring Boot> queryMethod (0) 2023.08.25