[시작]
이번에는 Spring을 사용한 db연결방법에 대하여 설명해 드리겠습니다. 내부 변수부터 시작해 h2 database를 사용하여 repository를 구현하는 방법으로 순차적으로 글을 올려볼까 합니다. 추가로 스프링 프로젝트 생성은 아래 프로젝트 생성에 대하여 설명한 링크를 참고해 주시면 됩니다.
들어가기 전에 전체적인 프로젝트의 구조를 보면 [Controller - Service - Repository - DB]로 구성되어 있습니다.
- 컨트롤러 : MVC패턴에서 컨트롤러 부분
- 서비스 : 비즈니스 로직 구현
- 레포지토리 : DB 접근에 관련한 코드 구현
들어가기 전에 아래 설명에서는 전체적인 흐름 이해를 위하여 간단하게 구조나 부분 코드만 보여주기 때문에 전체 코드를 보시고 싶으시면 아래 github링크를 확인해 주세요.
[상세 설명]
본 설명에서는 각자 프로젝트를 설정한 이름과 경로가 다름으로 기본 경로를 baseDIR로 표시하겠습니다.
UserInfo 구현
우선 간단히 가입하는 예제를 구현하기 위해 id, name, email을 사용하는 class를 구현해보도록 하겠습니다.
id는 db에서 자동으로 증가시키도록 구현하고 email의 경우는 중복 사용이 불가능하도록 구현할 예정입니다.
인터페이스 구현 이유
인터페이스는 모든 기능을 추상화로 정의하고 구현은 하지 않은것 입니다. 이러한 인터페이스를 구현함으로 implements를 사용하여 기능을 확장하거나 변경을 할 수 있습니다.
interface & repository
회원가입과 각 타입별 조회 기능이 있는 repository interface로 추후 repository구현 시 implements 해서 사용합니다.
조회 기능은 Null일 경우를 대비하여 Optional을 사용하였습니다.
implements를 사용하여 전에 구현해 놓은 UserInfoRepository안에 있는 메서드들을 구현합니다.
우선 HashMap을 사용하여 임시로 db를 구현하겠습니다.
Service
repository를 사용하여 회원가입, 조회의 기능을 구현합니다. 이렇게 interface로 repository를 구현체로 구현하면 나중에 SpringConfig에서만 repository를 변경해 주면 쉽게 db를 변경 할 수 있습니다.
Controller
Service에서 구현한 기능들을 controller에서 mapping으로 받은 각각의 경우에 알맞게 사용해 주면 됩니다. 여기서 contorller를 생성시 @Autowired어노테이션을(의존성 주입, DI -> Dependency Injections) 사용하면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줍니다.
Controller의 경우 @Controller를 사용하면 자동으로 스프링 빈으로 등록됩니다.
[스프링 빈 등록]
UserInfoService, MemoryUserInfoRepository를 Spring Bean에 등록
각각 @Service, @Repository 어노테이션을 통해서 Bean에 등록이 가능하지만 본 프로젝트에서는 repository를 여러번 변경할 예정이라서 자바 코드로 직접 등록하여 관리해 줄 예정입니다.
[실행]
현재는 데이터를 HashMap을 통해서 간단히 저장하여서 Spring을 내리면 모든 데이터가 없어집니다. 실제로는 이렇게 구현하지 않지만 테스트를 위해 우선 HashMap사용하였습니다. 이후에 db를 연결하고 build를 할 때 테스트 코드로 직접 예외를 발생시키고 처리하며 모든 코드가 잘 동작하는지 확인해 보면서 테스트 코드 작성에 대해서도 올리겠습니다.
[출처]
제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻💻
감사합니다~😄
'Backend > spring' 카테고리의 다른 글
[ 스프링 ] 다양한 db 연결방법 ( 4편 AOP ) (0) | 2021.11.04 |
---|---|
[ 스프링 ] 다양한 db연결방법 ( 3편 test code, JUnit, AssertJ ) (0) | 2021.11.03 |
[ 스프링 ] 다양한 db연결방법 ( 2편 Jdbc , JdbcTemplate , Jpa , Spring Data Jpa ) (0) | 2021.10.14 |
[ 스프링 ] 스프링 부트 시작 (0) | 2021.10.11 |