본문 바로가기

개발일지/TIL

[230626] 네트워크와 Java Spring 기본 개념 이해하기 (4)

3 Layer Architecture

❓ 3 Layer Architecture을 사용하는 이유
💬 MVC의 Controller에 모든 로직을 담겨있다면 코드가 몇 줄 되지 않은 경우에는 문제가 되지 않을 것이다. 기능 수정, 확장 등을 통해 코드가 늘어날수록 문제가 발생한다. 가독성이 떨어지며 유지보수가 힘들어진다. 리팩토링을 하거나 버그를 고칠 경우 경우 해당 기능과 관련된 메서드나 변수를 찾는 데 많은 시간이 들어갈 것이다.   
✅ 가독성 및 유지보수를 위해 Controller, Service, Repository로 역할 분리
     ➡ Controller : 클라이언트에 요청을 받아 적합한 비즈니스 로직을 가진 Service에 전달한다.
     ➡ Service : Controller 요청에 따라 비즈니스 로직을 수행하며, 필요에 따라 데이터를 Repository에 요청한다.
     ➡ Repository : Service의 요청에 따라 DB 연결 및 데이터 CRUD 작업을 처리한다.  
💬 예전에 Controller, Service, Repository는 MVC에서 각각 어디에 속한 것인지 궁금했던 적이 있다. 변천사를 보니 궁금증이 해결이 된다. "Controller -> [ Controller, Service, Repository ]"이기에 전부 MVC에서 Controller에 속한다는 것을 알 수 있다.

IOC & DI

❓ IOC를 내 말로 풀어보면?
💬 자신이 실행해야 하는 로직이나 거기에 필요한 데이터들에 대한 제어권(생성, 소멸 등)이 당사자에게 있는 것이 당연한 거겠죠. 그런데 이러한 제어권을 당사자가 아닌 외부에서 갖게 할 수 있는데, 이것을 제어의 역전이라고 하는 것 같아요. 
❓ IOC는 왜 필요할까?
💬 각자가 데이터에 대한 제어권을 가지고 있다면, 데이터(객체)를 실제로 1개만 만들어서 같이 사용해도 되는데 무한정 늘어날 수 있어요. 그리고 내부에서 만드는 데이터(객체)의 형태가 바뀔 때마다 코드 수정도 같이 이루어지는 문제도 있죠. 이러한 문제점들을 데이터에 대한 제어권을 외부에게 넘기는 방식으로 풀어낸 거죠. 
❓ IOC는 어떻게 적용할 수 있는건가?
💬 IOC을 적용하기 위해서 여러 가지 방법이 있겠지만, 이번에 제가 배운 것은 DI를 사용하는 거예요. DI는 외부에서 의존성을 주입하는 것을 말해요. 클래스가 사용하는 객체를 직접 생성하지 않고 외부로부터 주입받는 거죠.
❓ 자바 스프링 프레임워크에서는 DI를 어떻게 구현했을까?
자바 스프링 프레임워크는 객체를 만들어 IOC Container에 Bean으로 등록해서 관리해요. 그리고 IOC Container에서 필요한 Bean을 사용해 DI를 구현한 거죠.

 

 

Understanding Inversion of Control (IoC) Principle

The biggest issue, any enterprise app can face is the complexity of wiring different elements or components together. Over a long period…

medium.com

생각

IOC, DI에 대해서 많이 들어봤지만 여전히 이해가 잘 되지 않는 용어들이다. 그래서 나만의 글로 풀어내봤다. 시간을 들여 공식 문서, 블로그들을 보면서 작성해 봤다. 맞게 적은 건지 확신이 막 들지는 않는다. 그래도 현재 내가 내릴 수 있는 최선의 풀이다. 진도를 나가다가 이후에 더 나은 말이 있다면 바꿔봐야겠다.