Spring Boot DB연결(+mybatis설정) 및 회원가입 기능 구현 [STS4/gradle/mybatis/thymeleaf]
https://jungmin5600.tistory.com/38
Spring Boot 프로젝트 생성 [STS4/gradle/mybatis/thymeleaf]
내가 계획하고 있는 환경build type : gradle-groovyJDK : JDK-21Packaging : JARSpring Boot : 3.2.5Dependency : Spring Web Spring Boot DevTools Thymeleaf
jungmin5600.tistory.com
앞에 적었던 프로젝트를 이어서 진행하려고 한다.
진행과정 목차
- DB(MySQL)설정 및 Mybatis 환경설정
- UserMapper.java 작성 [ Interface ]
- UserMapper.XML 작성 [ Mybatis 관련 쿼리문 작성 ]
- UserDTO.java 생성
- UserDao.java 및 UserDaoImpl.java 작성 [ Interface 작성 및 구현 ]
- SignUpController.java 작성
- signUpForm.html 작성
- 프로젝트 실행 및 오류 해결 [ Spring Session 관련 ]
1. DB(MySQL)설정 및 Mybatis 환경설정
spring.Datasource.url = jdbc:mysql://localhost:3306/ (자신이 사용하려고 하는 데이터베이스 이름) 입력
2. UserMapper.java [ Interface ] 작성
com.practice.review 패키지 하위에 mapper 패키지를 생성한다.
3. UserMapper.XML 작성 [ Mybatis 관련 쿼리문 작성 ]
src/main/resources 하위에 mybatis 패키지를 생성하고
mybatis 하위에 mapper 패키지를 생성한다.
mapper에 UserMapper.xml을 생성한다.
데이터베이스에 유저테이블에 맞게 쿼리문을 작성한다.
회원가입을 하기 위한 기능이기 때문에 유저정보를 저장하는 쿼리를 작성한다.
namespace는 이전에 만든 UserMapper.java [ Interface ]의 위치를 입력한다.
<insert>로 묶어주고 id는 밑에서 UserDaoImpl에서 구현한 메서드를 사용하겠다는 의미이다.
parameterType은 메서드의 매개변수 타입을 말하며 밑에서 만들예정인 UserDto를 통해서 받겠다는 의미이다.
4. UserDTO.java 생성
UserDto 클래스를 작성한다.
데이터베이스 유저테이블의 컬럼과 맞게 속성을 만들어준다.
기본생성자와 전체를 받는 생성자를 만들어주고 getter와 Setter를 만들어준다.
UserDto는 회원가입에 필요한 회원정보를 담는 데이터 전송 객체(Data Transfer Object)이다.
UserController에서 클라이언트로부터 회원가입 정보를 받기 위한 객체이면서, Mybatis 매퍼의 매개변수로 사용되어서 데이터베이스에 저장할 수 있게 해준다.
5. UserDao.java 및 UserDaoImpl.java 작성 [ Interface 작성 및 구현 ]
UserDao [ Interface ]와 UserDao를 구현한 UserDaoImpl을 만들어준다.
매개변수는 UserDto로 받는 insertUser 메서드를 구현했다.
@Autowired는 sqlSession객체를 자동으로 주입해주는 역할을 한다.(SQL실행과 트랜잭션 관리)
@Repository는 현재의 클래스가 데이터 접근 계층(DAO)임을 나타내고 Spring이 관리하는 빈으로 등록하는 역할을 한다.
namespace는 MyBatis 매퍼 XML 파일과 이어주는 역할을 한다. (현재의 파일은 UserMapper에 관련된 것이다. 라는 뜻)
즉, com.practice.review.mapper.UserMapper에 있는 insertUser를 사용하겠다 라는 의미라고 생각한다....
처음 스프링을 할 때 DAO와 Service에 대해서 해깔렸는데...
DAO는 주로 데이터베이스의 CRUD(생성, 읽기, 수정, 삭제) 작업을 수행
Service는 비지니스 로직(이게 무슨 뜻인지 몰랐는데..) 여러 DAO를 조합하거나 추가적인 로직 (데이터 검증, 암호화 등)을 구현할 때 사용, 트랜잭션 관리와 같은 복작한 작업 수행 즉. 복잡한 로직을 수행할 때 사용하는 것이라고 볼 수 있다.
6. SignUpController.java 작성
회원가입 화면을 보여주기 위한 HTTP GET 요청을 처리하는 문장이다.
(http://localhost:8080/signUp 를 통해 접근가능하다.)
위와 같이 클라이언트가 요청했을 때 signUpForm을 반환해서 클라이언트에게 화면을 보여주는 역할을 한다.
7. signUpForm.html 작성
SignUpForm.html을 작성한다. thymeleaf문을 사용했다.
'th:action="@{/signUp/save}"' method="post" 는 현재 input에 들어있는 데이터들을 'signUp/save' URL에 Post 방식으로 전달하겠다는 의미이다.
name="email" 등은 서버에서 현재 필드를 'email'로 식별한다는 의미이다.
8. 프로젝트 실행 및 오류 해결 [ Spring Session 관련 ]
SignUp을 클릭하면 SignUpForm을 보여줘야하는데 오류가 뜬다.
이 오류로 많이 당황했었는데 버전문제인지 모르겠지만 자신이 사용하고 있는 데이터베이스에 SPRING_SESSION 테이블을 만들어주면 문제는 해결이 된다.
테이블을 생성 뒤 새로고침 후 다시 클릭하면 signUpForm을 보여준다.
회원가입 정보를 클라이언트에게 받아서 저장하는 메서드를 추가해준다.
클라이언트가 입력한 유저 정보는 userDto에 담겨서 넘어오고 userDao.insertUser(userDto)를 통해서 저장해준다.
@Valid는 userDto 객체의 유효성을 검사한다. (이걸 붙여주지 않으면 오류가 나서...)
@ModelAttribute는 클라이언트가 보낸 데이터를 UserDto 객체에 매핑한다고 알려주는 어노테이션이다.
Model m 은 뷰에 데이터를 전달할 때 사용하는데.. 습관적으로 붙인 것 같다(이 페이지에서는 클라이언트에게 전달한 데이터가 없어서 지워도 무방할것 같다.)
회원정보가 잘 저장되면 mainHome페이지를 보여주게 했다.
데이터베이스에 잘 저장된게 보인다.