Memo 프로젝트에 다시 들어가서 com.sparta.memo 안에 service 패키지를 만든다.
그 패키지 안에 Memoservice class를 만든다.
MemoController 클래스로 이동 -> createMemo 메서드로 이동
메서드 내용에 해당 코드를 추가한다. 그 후 Memoservice클래스의 createMemo 메서드를 만들기 위해 다시 Memoservice 클래스로 이동하고 아래처럼 메서드를 만들어준다.
Controller의 반환 타입이 MemoResponseDto이고 그 return 값으로 service의 createMemo의 메서드 반환값을 반환하니 service 부분의 createMemo 메서드도 MemoResponseDto를 반환해줘야 한다.
그리고 기존의 Controller의 createMemo의 기능부분을 모두 잘라 Service 담당 메서드에 붙여넣어 준다.
Service에서도 jdbcTemplate를 사용해야 하므로 jdbcTemplate를 사용하게 해주는 부분을 클래스 내부에 작성 해준다.
그리고 Memoservice가 JdbcTemplate를 매개변수로 생성자를 받기 때문에 이 Service를 호출하는 곳에서 생성자를 넣어줘야 한다.
Service를 호출하는 Controller에 가서 생성자를 넣어주자
이렇게 하면 이제 Controller에서는 Service에 데이터만 전달해주고 실질적은 기능은 Service 클래스에서 담당하게 된다.
이런 방식으로 다른 나머지 기능들도 모두 분리해준다.
갑작스런 오류발생!
Service와 Controller이 잘 분리되어 있는지 확인하기 위해 Spring을 실행했으나 정말 갑작스럽게 이상한 오류가 발생했다.
코드상의 문제였다면 서버 자체는 잘 동작하고 http 통신으로 주고받는 과정에서 문제가 생길텐데 이건 그냥 서버 실행 자체가 안된다.
이전에는 잘 실행되었는데 뭐가 문제인지 모르겠다.
Repository 분리
간단히 요약하면 DB에서 작업하는 코드를 분리한다고 생각하면 된다.
repository 패키지를 생성하고 MemoRepository 클래스를 생성한다.
이제 Memoservice로 이동해서 코드를 살펴보자
우리는 DB에 저장하는 부분을 분리할것이다.
MemoRepository로 돌아와서 Jdbc 생성자를 만들어준다.
MemoRepository를 호출하는 Service 영역에 다시 가서 DB에 저장하는 함수인 save를 호출하고 저장할 memo 객체를 인자로 전달해준다. 그리고 그 결과값을 반환받게 한다.
MemoRepository에서 save 함수를 만든다.
그리고 현재 Service 에서 하고있는 DB 저장을 하는 코드를 잘라서 save 함수에 넣어준다.
붙여넣어 준 후 return memo를 통해 변경 및 저장된 memo객체를 반환해준다.
이런 방식으로 다른 기능들도 분리를 해준다.
'Spring 입문주차 > 2주차' 카테고리의 다른 글
6. JPA란 무엇일까? (0) | 2024.08.20 |
---|---|
5. IoC Container와 Bean (0) | 2024.08.19 |
4. 메모장 프로젝트의 IoC & DI (0) | 2024.08.19 |
3. IoC(제어의 역전), DI(의존성 주입) 이해하기 (0) | 2024.08.19 |
1. 3 Layer Architecture (0) | 2024.08.16 |