티스토리 뷰
지난 한 주 동안에는 JpaRepository 상속한 Repository를 만들어서 기본적인 crud기능을 구현해보았다.
클라이언트의 요청을 받고 전달해주는 구성으로 아래와 같이 구성했었다.

Member라는 클래스가 있고 그 멤버 클래스에 정보를 받을 수 있는 컨트롤러가
클라이언트가 전송한 데이터를 받아 서비스로 전달해 그 서비스는 내부에서의 처리과정을 거친 뒤
레파지토리를 통해 그 정보를 DB에 저장해주는 방식이였다.(조회, 업데이트, 삭제 또한 동일한 흐름)
이 과정에서 기존에는 Meber를 저장하는 방식이 받아온 값을 그대로 db에 전달해주는 식이였다면
DTO를 통해 값을 전달받아서 Entity 즉 Member의 정보가 날것?으로 들어가는 게 아닌 한번 감싸서 받아 온 뒤
저장하는 형식이였다. 이렇게 DTO를 통해서 계층 간의 데이터 전송을 해주는 게 좋다고 다시 배우게 되었다.
사실 직접적으로 값을 setName, setEmail 이런 식으로 해주면 될 것을 왜 그렇게 할까 라는 생각을 했는데
알고 보니 Entity 자체가 다른 곳에서 데이터의 변경이 생길 수 있기 때문에 받는 부분을 DTO를 통해 받고,
그리고 @Setter 어노테이션은 물론이고 setter로 값을 변경하게 하는 메서드를 생성하면 안 되겠다.
그리고 각 클래스마다 @Controller, @Service, @Repository라는 어노테이션을 역할에 맞게 클래스 위에 써줘야 하는데
이것이 스프링이 관리하는 IoC컨테이너에 등록하기 위한 작업이라고 볼 수 있겠다라는 것도 알게 되었다.
저 어노테이션들 내부에는 @Component가 있는데 이 어노테이션이 있으면 해당 클래스를 스프링 IoC컨테이너에 올려서 사용시에 스프링이 객체를 생성해주어 사용할 수 있게된다.
이제 IoC컨테이너에 있는 클래스를 사용하려면 DI를 통해서 받게되는데 DI의 방식에는 3가지가 있다고했다.
생성자 주입과 필드주입 setter 주입 이렇게 3가지인데 여기서 제일 권장하는 방식으로는 생성자주입이라고했다.
컨트롤러가 서비스를 호출시에 필드에 아래와 같이 선언 후 클래스 상위에 @RequiredArgsConstructor 어노테이션을 사용
@RequiredArgsConstructor
@RestController
public class MemberController {
private final MemberService memberService;
혹은 @RequiredArgsConstructor 없이 해당 클래스 생성자를 생성해 주입받는 방식 이렇게 생성자 주입방식은 이렇다.
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
필드 주입으로는 아래와 같이 써주면되는데 코드는 간결하지만 외부에서 변경하기가 힘들다고 한다.
private MemberService memberService;
그리고 Setter주입으로는 아래와 같이 써주는데 public으로 열어두어야해서 어디서든 변경이 가능하기때문에 의도치않은 상황이 일어날 수 있다.
private MemberService memberService;
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
결론 -> 생성자 주입을 사용하자!
의존성 주입 관련 참고하면 좋은 블로그:https://dev-coco.tistory.com/70
이번주도 이렇게 끝이났다 새로운 주차의 발제로 또 바쁘게 학습을 해나가야하는 한주가 되겠지만.
성과있는 한주 보냈으면 좋겠다는 이야기로 WIL마무리.

'개발 > WIL' 카테고리의 다른 글
| 10.30 WIL (0) | 2022.10.30 |
|---|---|
| 10.23 WIL (0) | 2022.10.24 |
| 10.16 WIL (0) | 2022.10.17 |
| 10.2 한주의 회고 (0) | 2022.10.02 |
| 9.25 한주의 회고 (0) | 2022.09.26 |
- Total
- Today
- Yesterday
- backoffice
- JWT토큰
- 알고리즘
- 코드해석
- DI
- POI
- EC2
- joinfetch
- java
- ssl
- IOC
- method
- 항해99
- 풀텍스트
- DTO
- EntitiyManagerFactory
- ajax
- badrequest
- instance
- JPQL
- wil
- 김영한
- JPA
- Spring
- this
- python
- 환경세팅
- querydsl
- 협업
- .jks
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |