1. 요구사항 ✨
자세한 미션 요구사항 및 수행 내역은 깃허브 레포지토리에 branch 별로 분류해두었습니다.
나만의 @MVC 프레임워크를 만들어보자. 이전 미션에서 HTTP 서버를 만들고 Controller 인터페이스를 활용해 MVC 프레임워크를 구현했다. 그런데 MVC 프레임워크 영역과 비즈니스 로직을 작성하는 영역이 분리되어있지 않다. 비즈니스 로직 구현에만 집중 할 수 있도록 어노테이션 기반의 MVC 프레임워크로 개선해보자.
2. 학습 내역 🔮
💜 DispatcherServlet
- DispatcherServlet이란?
- DispatcherServlet의 역할
- Spring 까보기
👉 https://yeonyeon.tistory.com/275
💜 Reflection을 이용해 Field의 값 가져오기
// object: field를 갖고 있는 객체
// field: object를 이용해 가져온 필드. object.getClass().getDeclaredFields(); 등을 통해 꺼낼 수 있다.
public Object findFieldValue(final Object object, final Field field) {
try {
field.setAccessible(true);
return field.get(object);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
- setAccessible: true로 설정하면 Java 언어 액세스 제어(ex: 접근제어자)에 대한 검사를 방지
- get: 인자로 주어진 object에서 field의 값을 가져옴 (null값이 반환될 수 있음)
참고: Java docs
💜 @Inject vs @Autowired
- Inject
- java 6부터 도입된 어노테이션
- Autowired
- Spring에서 제공하는 어노테이션
- required vs optional 의미를 추가 (ex: @Autowired(required = false)
This is an alternative to the JSR-330 Inject annotation, adding required-vs-optional semantics.
- 출처: Spring Docs
3. 추가 미션 🍂
🧡 Reflection 활용하기
👉 https://github.com/yeon-06/jwp-hands-on/pull/4
🧡 DI 활용하기
DI container를 구현할 때 Reflection을 활용해 필드의 값들을 주입할 때 했던 생각이다. 3단계에서는 모든 필드들을 긁어와 해당 값들을 채워줘야했다. 다만 모든 필드들을 긁어오는 과정에서 static final로 선언되어있던 Logger나 상수 등 주입하지 않아도 되는 이미 초기화된 필드들도 불러와졌고 이 부분을 어떻게 해결할지 고민했다.
완벽한 조치는 아니지만 해당 필드에 값이 존재하는지에 따라 필드를 초기화해주었다. null 값이 담겨있다면 DI Container에 등록한 다른 객체에서 해당 필드와 타입이 맞는 인스턴스를 주입시켜줬다. 헌데 이 방법도 맹점이 있었다. 단지 null 값을 갖고 있었을 뿐이지 DI Container를 통해 주입시켜야 할 필드가 아니라면? 이 경우에는 어떻게 판별할 수 있지? 그래서 생성자를 통해 초기화시키는 필드들만 가져와 주입시키는 방법을 생각해보았지만 구현이 너무 복잡해졌다.
4단계에서 이 부분에 대한 고민은 해결되었다. 어노테이션이 달린 필드만 주입시키면 된다. 예전에 스프링의 의존성 주입 방식에 대해 공부할 때 @Autowired는 자동으로 생략된다해서 왜 그러는거지? 라는 의문을 가진 적이 있는데 이런 맥락이었구나를 깨닫게 되었다.
👉 https://github.com/yeon-06/jwp-hands-on/pull/5
'Memo > 우테코 4기' 카테고리의 다른 글
[우테코] JDBC 라이브러리 구현 미션 학습 로그 (0) | 2022.11.13 |
---|---|
[우테코] 최종 데모데이 후기 (10) | 2022.10.22 |
[우테코] 톰캣 구현 미션 학습 로그 (2) | 2022.09.29 |
[우테코/줍줍] 5차 스프린트 회고 (2) | 2022.09.26 |
[우테코] 레벨3 인터뷰 (0) | 2022.09.05 |