[SpringBoot]4-2. SpringDataJPA를 활용하여 회원가입 예제- Controller,Service,Repository의 역할및 구현
안녕하세요
저번 포스팅에서 회원가입에 대한 포스팅을 이어서 하도록 하겠습니다.
회원가입 View제작에 관한 글은 저번 포스팅인 아래 글을 참고해주세요:)
4. Controller와 Service, Repository제작
다음은 회원가입 뷰에서 작성했던 정보들을 받아서 DB에 저장하는 로직을 짭니다.
(저는 h2 DB를 써서 만들었습니다. DB 연동방법에 대해 궁금하신 분은 아래 주소를 참고해주세요ㅎㅎ)
먼저 일반적으로 서버 로직의 전체적인 과정을 그림으로 나타내보면 다음과 같습니다.
그림에 대한 설명을 하면 다음과 같습니다.
1. View에서 전송한 정보를 Controller에서 수신. 받은 정보를 Service에게 넘김.
2. Service에서 핵심 비즈니스 로직을 수행 후 DB접근이 필요하면 Repository에게 요청.
3. Repository는 DB와 접근하기 위해 필요한 친구인데 서비스로부터 DB에 insert 요청이 오면 VO객체들을 영속성 컨테이너라는 곳에 넣어놓았다가 로직이 끝나면 한번에 DB로 커밋하게 됩니다.
(이에 관해서는 Transaction개념이 필요한데 지금 다루면 너무 길어져서 나중에 다루는 것으로 하고 지금은 그냥 Repository가 DB와 통신해주는 친구구나 정도로 알고 넘어가셔도 무방합니다. 영속성 컨테이너에 대한 자세한 설명도 지금은 넘어가도록 하겠습니다.)
4.1 Controller 제작
먼저 서버에서 받은 회원가입 정보를 받을 Controller를 제작합니다.
컨트롤러에서는 프론트(웹)에서 온 요청에서 데이터를 받아서 서비스로 넘겨주는 역할을 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Controller
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value = "/joinUs.do",method = RequestMethod.POST)
public String joinUs(UserVO vo){
userService.joinUser(vo);
return "index";
}
}
|
cs |
컨트롤러에서는 다음과 같이 작업합니다.
1) 클래스 명 위에 @Controller를 명시해주기
-해당 어노테이션을 달아놓으면 스프링이 시작될 때 컴포넌트 스캔이라는 것을 해서 해당 클래스를 Bean으로 만들어 컨트롤러로써 기능할 수 있도록 해줍니다.
2) userService 주입하기
-@Autowired어노테이션으로 아래에서 만들 UserService를 주입시켜줍니다.
[참고]
@Autowired를 달아놓으면 Bean으로 등록된 클래스들을 스프링을 시작할 때 (서버를 켤 때)자동으로 주입해줍니다.
3) 웹에서 받은 Entity를 서비스로 넘겨주기
4.2. Service 제작
서비스에서는 비즈니스 로직을 수행합니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
@Service
public class UserService {
@Autowired
UserRepository userRepository;
public void joinUser(UserVO vo){
vo.setRole("USER");
userRepository.save(vo);
}
}
|
cs |
서비스에서는 다음과 같이 작업하였습니다.
1) 클래스 명 위에 @Service 명시해주기
-마찬가지로 service를 명시해 놓으면 해당 클래스를 스프링이 시작할 때 Bean으로 등록시켜 줍니다.
2) UserRepository 주입하기
-@Autowired어노테이션으로 DB와 통신에 필요한 Repository를 주입해줍니다.
3) 비즈니스로직 수행 후 Repository로 넘겨주기
-비즈니스 로직이라고 해도 여기서는 간단히 유저 권한만 설정해서 리포지토리로 넘겨줍니다.
(Repository에서는 엔티티 조회, 저장, 삭제 등의 작업이 가능하며 여기서는 save메소드를 통해 저장해줬습니다)
4.3. Repository 제작
Repository에서는 DB 통신이 필요할 때 사용합니다.
먼저 Repository라는 녀석에 대해 알아보도록 하겠습니다.
1) Repository의 개념
먼저 Repository에 관한 가볍게 짚어보면
Repository는 기본적으로 JpaRepository를 상속받은 인터페이스이지만
여기에 작성한 함수들은 놀랍게도 스프링이 구현체를 자동으로 만들어줍니다!
1
2
3
|
public interface UserRepository extends JpaRepository<UserVO,Long> {
}
|
cs |
만드는 방법은 위와 같이 Repsitory인터페이스에 JpaRepsiroty<도메인 객체,Id>를 상속받으면 됩니다.
여기서 적어준 UserVO의 저장, 삭제는 JpaRepository에서 제공해주기 때문에 따로 코드를 작성하지 않아도 바로 사용 가능하고 조회만 원하는 대로 코드를 작성해주면 됩니다.
2) 데이터 조회하기
따라서 만약 우리가 Repository를 이용한 테이블 조회가 필요할 때
여기에 우리는 원하는 함수를 규칙에 맞게 적어주기만 하면 됩니다.
Repository는 특이하게 함수명으로 기능을 제작합니다.
(그래서 함수명에 관해서는 오타등이 나면 안됩니다!)
그 규칙에 대해 간단히 몇가지만 짚어보겠습니다.
* 일반 객체 조회는 findBy로 시작
* By뒤에 조회하는 기준이 되는 변수명을 적어줍니다(첫글자는 대문자로)
* 적어준 조회 기준들의 데이터를 매개 변수로 차례로 적어줍니다.
말만해서는 이해가 어려울 수 있으니
예를 들어 userId가 일치하는 UserVO를 조회하기를 원할 때 다음과 같이 작성합니다.
1
|
UserVO findByUserId(String userId);
|
cs |
이렇게 하면 DB에서는 매개변수로 넘겨준 userId에 일치하는 유저 행을 찾아서 UserVO객체로 리턴하게 됩니다.
3) 데이터 저장, 삭제
리포지토리에서는 데이터 저장, 삭제는 바로 사용 가능합니다.
reposiroty에 저장은 userRepository.save(저장할 userVO 넣어주기) 이런식으로,
삭제는 userRepository.delete(삭제할 userVO) 를 해주는 방식으로 가능합니다.
어떻게 쓰는 지는 위의 4.2 Service제작에서 사용한 save를 참고하시면 됩니다.
1
2
3
|
@Repository
public interface UserRepository extends JpaRepository<UserVO,Long> {
}
|
cs |
아무튼 받은 회원가입 정보를 저장해 주기 위해 위와같이 Repository를 만들어주면 됩니다.
지금 필요한 것은 저장이기에 저정도만 해도 save메소드를 쓸 수 있습니다.
여기까지 작성하시고 돌려보도록 하겠습니다.
계정 정보를 다음과 같이 입력하여 정보를 받아옵니다.
이렇게 가입하고 DB를 조회해보면
회원가입 후 작성한 데이터들이 DB에 잘 들어가시는 것을 보실 수 있습니다ㅎㅎ
혹시 잘못된 내용이나 이해가 잘 안가시는 부분이 있으시다면 알려주세요!
이번 포스팅은 여기서 마치도록 하겠습니다.
감사합니다:)
▶다음 글
[SpringBoot]5. 게시판 로그인 기능 제작 및 예제(Form데이터 Controller에서 받아서 처리하기)
https://chung-develop.tistory.com/27
▶이전 글
[SpringBoot]4-1. SpringDataJPA를 활용한 회원가입 예제- View제작하기(feat.게시판을 만들어보자!)
https://chung-develop.tistory.com/22
'Backend > 게시판만들기' 카테고리의 다른 글
[Spring실습] 5분만에 알아보는 프로젝트 설계 예제 및 회원 도메인과 리포지토리 만들기-1 (0) | 2020.11.24 |
---|---|
[SpringBoot]게시판 로그인 기능 제작 및 예제(Form데이터 Controller에서 받아서 처리하기) (2) | 2020.08.16 |
[SpringBoot]SpringDataJPA를 활용한 회원가입 예제- View제작하기 (0) | 2020.08.08 |
[SpringBoot] 개발용으로 가볍고 편리한 H2 데이터베이스 설치 및 SpringBoot에 연동하기 (0) | 2020.08.06 |
[SpringBoot]DB구축을 위한 MySQL 및 Workbench 설치&SpringBoot 연동 (0) | 2020.08.05 |