저번 게시글에서 간단한 회원정보를 입력받고, 데이터베이스와 연동을 통해 저장을 하는 것까지 해보았는데 지금까지 공부한 내용을 토대로 조금 더 자세한 CRUD를 구현해보려고 한다. 여기서 CRUD란 Create, Read, Update, Delete의 약자로써 기본적인 정보처리를 하는 API를 개발 해볼려고한다. 그중 이번에 다루어볼 부분은 Create로써 회원정보를 입력받고 DB에 저장받는 부분을 구현해보도록 하겠다.
코드를 관리하고 유지보수하는것은 정말 중요한 부분이기 때문에 패키지의 구조를 잘 만들고 효율적으로 관리하는 것이 중요함을 공부하면서 기본이 되면서도 중요한 내용임을 계속해서 배우고 있다. 저번보다 더 자세하고 효율적인 패키지 구조를 통해 Create부분을 구현해보도록 하자.
Create를 하기 위해서 만든 패키지는 7개로, Controller, Dto, Entity, Exception, Repository, Service, type 으로 코드를 보면서 각각의 패키지에서 수행하는 작업이 무엇인지 살펴보겠다.
Entity/Developer.class
@Getter
@Setter
@Builder : 빌더패턴을 간편하게 사용하기 위해 선언하는 어노테이션
@NoArgsConstructor : 기본 생성자를 생성, final, @NotNull 변수가 있게 되면 컴파일 에러 발생(초기값 세팅이 필요하기때문)
@AllArgsConstructor : 해당 클래스의 모든 변수를 생성자로 만들어준다.
@Entity
@EntityListeners
Entity에서 눈여겨볼 곳은 type/... 에 Enum 클래스들을 만들어 정보를 받는 부분 Entity에 구현되어 데이터베이스에 저장한다.
그 외에 필요한 정보들을 작성해주었다. 필드 내의 entity들은 각각의 활용성에 맞게 어노테이션을 붙여주도록 하자.
Controller/DMakercotroller.class
@RestController : Controller에 @ResponseBody가 추가된 형태, 이후 Bean에 등록
@Slf4j : 로깅 프레임워크에 대한 추상화 인터페이스
@RequiredArgsConstructor : 필드의 생성자들을 자동으로 생성해주는 lombok 어노테이션
@ToString : toString() 메소드를 자동으로 생성해주는 lombok 어노테이션
@Valid를 선언하여 CreateDevelopr의 밸리데이션을 사용할 수 있게끔 해주었다, 위에서 선언한 Slf4j, ToString을 통해 로깅을 간편하게 처리하였고 받은 요청 값을 Service에 넘겨준다.
Dto/CreateDeveloper.Class
공부하면서 배운 것은 Service가 Entity에서 바로 정보를 처리하기보단 따로 클래스를 만들어 관리하는 것이 관리 및 유지보수에 용이하 다하며 안정성 측면에서도 좋다고 하였다. 즉, DB 에서 데이터를 교환하기 위해 사용되는 객체인 것이다. 이번에는 회원정보를 저장하기 위해 사용되는 Dto를 만들어보았다.
CreateDeveloper 내에서 상수 클래스를 각각 Request, Response를 만들어 데이터를 주고받게끔 구현해주었다.
Request의 경우 Validation을 설정해두었다. Response는 메소드를 하나 만들어 생성한 객체의 정보를 빌더를 사용해 각각의 변수에 저장하여 보내준다.
Repository/DeveloperRepository.Interface
이 부분은 크게 다를 것 없이 JpaRepository를 상속받아 엔티티와 Long값을 설정해두었다.
Service/DMakerService.class
서비스에서 유저 정보를 등록, 처리를 실질적으로 수행해야 한다. 아래와 같이 repository를 가져오도록 하자.
@RequiredArgsConstructor : 생성자 매개변수를 자동으로 만들어주는 어노테이션
@Transactional : 선언적 트랜잭션 처리, 하나의 메소드에서 트랜잭션이 되도록 보장해주는데 대부분 상황에서 안전성을 위해 사용해주는 것이 좋다.
validateCreateDeveloperRequest의 경우 받아온 파라미터 값에 자신이 생성해둔 조건 및 중복 체크를 하는 메소드로 게시글에 따로 작성하지는 않지만 business validation 수행한다. 이 메소드 안에서 Exception패키지에 정의해둔 Exception과 enum 클래스 선언해둔 ErrorCode들을 불러온다.
작성이 완료된 코드들을 테스트 코드를 작성하지 않고 포스트맨을 이용해 직접적으로 데이터를 H2 DataBase에 저장해보겠다.
위와 같이 controller에 맵핑해놓은 곳으로 POST를 보내주게 되면
return값을 Dto의 reponse값을 return 하기 때문에 4가지 정보만 return 하게 된다.
위와 같이 데이터베이스에도 잘 저장된 것을 확인할 수 있다.
'모험가의 Spring > Spring' 카테고리의 다른 글
예외 처리 _ Custom Exception 만들기 (0) | 2022.08.21 |
---|---|
SpringSecurity 접근 허용에 주의 할 점 (0) | 2022.08.21 |
Spring 기초 : SpringDataJpa 사용하기 (0) | 2022.07.20 |
Spring 기초 : 간단한 회원정보 입력받기 + MYSQL + JPA (0) | 2022.07.17 |
Spring 기초 : Mysql + Spring 연동 (0) | 2022.07.17 |