인프런 커뮤니티 질문&답변

개발한입님의 프로필 이미지

작성한 질문수

백엔드 프레임워크 만들기

생각해볼 문제

네번째 생각해볼 문제 제 생각을 적어보았습니다. 피드백 가능하실까요?

작성

·

224

0

1. 비즈니스로직은 사용자 요구사항을 개발자가 코드로 구현한 산출물을 의미합니다. 비즈니스 로직을 재사용 할 수 있는 방법을 생각해보세요.

의존성 주입과 제어역전을 활용하여 비즈니스 로직을 재사용할 수 있습니다.

이 부분은 강의를 들으면서 따로 이해가 안가기도 했고 궁금하여서 좀 더 깊게 고민해봤는데,  토비의 스프링에서도 그렇고 다른 책들을 봐도 사실 프레임워크의 핵심은 DI와 IoC라는 것을 이해했고, 이번 챕터에 자세히 설명해주셔서 이해가 어느정도는 갔습니다.

그러나, DI와 IoC가 코드의 재사용을 한다는 부분이 100% 이해가 잘 안갔는데, 저희가 작성한 코드를 보자면 MasterController의 execute() 메서드를 통해 해당 키를 가져와서 그 키를 사용하는 이를테면 Emp001에 있는 select 메서드를 활용한다까지는 이해했습니다.

이 재사용성이라는게 그렇다면 이미 작성한 클래스의 메서드를 활용한다라고 이해하면될까요?

단순히 MasterController는 리플렉션을 통해 해당 클래스를 가져와서 메서드를 호출함으로서 컨트롤러에서 비즈니스 로직이 처리되는 것이 아니라 컨트롤러는 단순히 해당 키를 받아서 어떤 일을 처리하는지 위임하는 역할을 해주는지 궁금합니다.

2. 우리가 만든 프레임워크를 기준으로 IoC 흐름을 생각해보세요.


위의 내용이랑 비슷한데

1. MasterController.execute() 메서드를 통해 키를 주입

2. 이때 MasterControllerD에서 해당 서비스에 대한 SQL 처리를 수행
  2.1 SqlRunner().getSqlRuuner().getTable().getBox()
      위와같은 체이닝을 통해 우리가 기존에 준비해둔 FW_SQL을 통해서 FW_CONTROLLER로 처리할  데이터 준비

3. FW_CONTROLLER에서 넘어온 CLASS_NAME과 METHOD_NAME을 리플렉션을 통해 실제 수행


이런 과정으로 되면서 MasterController는 키를 통해서 어떤 클래스의 메서드를 수행할 지 ControllerDao의 결과값을 통해서 가져온 후 실제 최종 수행은 리플렉션 invoke를 통해 해당 메서드를 수행하여 결과값을 리턴하는 식으로 돌아간다라고 이해했는데 맞을지 궁금합니다.

답변 2

1

제로님의 프로필 이미지
제로
지식공유자

안녕하세요. 제로입니다.

개발자의 소중한 휴식 시간인 주말에
강의 들어주시고 생각해볼 문제 답글도 적어주셔서
감사드립니다.

1. 비즈니스로직은 사용자 요구사항을 개발자가 코드로 구현한 산출물을 의미합니다. 비즈니스 로직을 재사용 할 수 있는 방법을 생각해보세요.

"의존성 주입과 제어역전을 활용하여 비즈니스 로직을 재사용할 수 있습니다."

잘 적어주셨습니다. 

A 가 B 의 기능을 사용할때 
A 는 B 에 의존한다고 할 수 있습니다.
그리고 A 가 B 의 기능을 사용할때 서로 결합이 되어 있습니다.

"이미 작성한 클래스의 메서드를 활용(재사용성)" 하는 관점으로 다시 적어본다면

A 가 이미 작성한 클래스의 메서드(서비스코드)를 재사용하는 방법은

객체를 생성하고 객체의 기능을 실행하고 결과를 받아오는 일련의 과정이 
개발자의 코드로 구현되고 이를 실행하기 위해 컴파일이 필요한 방법으로 
재사용 할 수 있지만

의존성 주입인 데이터(서비스키)를 
프레임워크(컨테이너)에 알려줘

프레임워크가 알아서
객체를 생성하고 객체의 기능을 실행하고 결과를 받아올 수 있게 해주는
제어역전이 구현된 MasterController.execute("서비스키") 메소드를 사용해
재사용 할 수 있습니다.

컴파일이 필요한 재사용은 
A 와 B 가 내용 결합으로 묶이고

데이터인 서비스키를 사용한 재사용은 
A 와 B 가 데이터 결합으로 묶인다고 볼 수 있습니다.

바로 IoC 를 사용해야 하는 이유는
A 가 B 를 의존한 모습을 가장 낮은 결합도인
데이터 결합도로 묶을 수 있기 때문입니다.

프레임워크의 모듈 재사용 기준이 IoC 인 이유도
개발자가 잘 만든 비즈니스 로직을 단순하게 
재사용하기 위한 이유가 아닌

낮은 결합도로 재사용 할 수 있는
기회를 주기 위한 이유라고 보시면 됩니다.


2. 우리가 만든 프레임워크를 기준으로 IoC 흐름을 생각해보세요.

잘 설명하셨습니다.

자바에서 제공하는 리플렉션
정적 언어인 자바를 동적 언어로 확장시켜줄 수 있는 유용한 기능입니다.

개발의 틀을 만드는 사람 입장에서
동적으로 기능을 확장하기 위한 중요 기술이니
여기서 그치지 않고 
사용하는 프레임워크에서 리플렉션 부분을 찾아보고 이해하시는 것도
좋은 경험이 될 것 같습니다.

추가로 이야기 드리면
리플렉션에 필요한 메타 데이터는 DB 테이블을 이용해 가져왔는데
경우에 따라 어노테이션이나 XML 등을 사용해 저장하고 가져올 수 있습니다.

하지만 중복이 있어선 안되는 서비스키는
실시간 공유가 가능한 DB 에 보관하는 것이 가장 좋아
(실무에서도 DB 로 서비스키를 보관합니다.)

FW_CONTROLLER 테이블을 사용했고 
이를 꺼내오기 위한 DAO 가 IoC 를 구현한 코드에 들어갔는데 

이것때문에 흐름을 이해하는데 방해가 되진 않았을까 하는 걱정이 들었지만
잘 이해하신 것 같아 다행입니다.

0

개발한입님의 프로필 이미지
개발한입
질문자

코드를 치면서 따라가다보니 금방 이해가 되고 아 이런식으로 동작하는지 이해할 수 있더라구요.

물론 제로님의 이론 강의때문에도 이해도가 높아졌습니다. 제어라는 것에 대해서는 깊게 생각해본 적이 없었는데 이번 기회에 제어가 한 객체의 라이프사이클을 제어한다는 것이구나 알게되었습니다 :)