티스토리 뷰

개발/WIL

10.9 한주의 회고

욱스다 2022. 10. 9. 23:20

지난 한 주 동안에는 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
링크
«   2026/06   »
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
글 보관함