분류 전체보기
관성의 법칙 깨기
개발을 시작하게 된지 2년 된 지금 시점에서 개발을 시작함으로 생긴 가장 장점이라 생각하는것은 문제점을 찾고 개선을 하기위해 노력하는것이다. 예를 들어 지금 사용하는 아이폰은 현재까지 공휴일을 계산해 알람을 설정해주는 기능이 없다. 그래서 한번은 평일에 있던 공휴일에 알람을 끄고 생활했는데, 공휴일이 끝나고 다시 키는것을 깜빡해 출근에 지각을 할뻔한 적이 있다. 지금은 덕분에 공휴일을 계산해 알람을 키고 끄고 해주는 단축어 기능을 개발해 매일 호출해주며 알람을 신경쓰지 않고 살고있다. 이렇게 해오던 일상적으로/관성적으로 생활하는 것을 `관성의 법칙` 이라고 하던데, 개인적으로 이 말을 굉장히 좋아한다. 나에게 남아있는 관성의 법칙이 있다면 나쁜 관성인지, 나쁘다면 개선을 해서 오늘의 나보다 내일의 내가 ..

[Project Winter/#9] Dependency Injection 기능 개발(IoC)
Project Winter DI 기능을 구현하며 드디어 계획했던 기능을 모두 구현했다. 스프링의 핵심이라고 할 수도 있는 IoC 역할을 구현해서 결합도도 낮추고 개발 편의성을 낮출 수 있도록 했다. @Autowired @Target({ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR}) @Retention(RetentionPolicy.RUNTIME) public @interface Autowired { } @Autowired 애노테이션을 개발해 의존성 주입을 해줄 생성자, 필드, 메서드에 애노테이션을 명시할 수 있도록 했다. 이 애노테이션이 붙은 생성자, 필드, 메서드는 백엔드 컨테이너에서 빈 주입을 해주면 된다. BeanFactory 수정 ..
[Project Winter/#8] HandlerExceptionResolver 기능 개발
Project Winter 계획했던 기능 중 MVC 로직에 직접적인 영향을 주는 기능으로 마지막이었던 기능인 HandlerExceptionResolver 기능을 마무리했다. 스프링의 모든 ExceptionResolver 를 구현하진 못했지만 기본적인 HandlerExceptionResolver 인터페이스를 통해 예외를 핸들링하도록 구현했다. HandlerExceptionResolver public interface HandlerExceptionResolver { ModelAndView resolveException(HttpServletRequest req, HttpServletResponse res, Object handler, Exception ex); } 개발자가 예외를 핸들링 로직을 정의할 인터페이..
[Project Winter/#7] Configurer, Interceptor 기능 개발
Project Winter MVC 의 기본적인 기능은 마무리 했고 Interceptor 를 구현할 차례이다. 사실 MVC 와 Ioc, DI 정도만 할걸.... 하는 후회가 조금 들지만 막상 구현을 끝내면 성취감도 좋고 계획한건 마무리 하는 성격이라 열심히 진행중이다. Interceptor 를 하기 앞서 Spring 은 WebMvcConfigurer 를 구현한 클래스에서 addInterceptors() 메서드를 통해 HandlerInterceptor 를 등록하기 때문에 Configurer 기능을 먼저 개발했다. WebMvcConfigurer public interface WebMvcConfigurer { default void addInterceptors(InterceptorRegistry registry..
사내 백엔드 프레임워크 Session/Interceptor 시리즈
Session, Interceptor 기능 개발 - 설계 Session, Interceptor 기능 개발 - RedisSession, MemorySession Session 기능 - 쿠키 설정 Session 구조 변경 Interceptor 개발 Session, Interceptor 기능 완성
Winter 시리즈
스프링 프레임워크 만들기 front-controller 패턴 적용하기(feat. DispatcherServlet) Contoller 기능 구현 중 문제 애노테이션 기반 싱글톤 빈 동적 생성 Controller 기능 구현 View 기능 개발 Configurer, Interceptor 기능 개발 HandlerExceptionResolver 기능 개발 Dependency Injection 기능 개발(IoC)

[Project Winter/#6] View 기능 개발
Project Winter 지금까지 구현해오던 MVC 기능 중 Model, View 를 개발과정이다. 간단하게 JSP 를 이용한 view 를 개발했다. View public interface View { void render(Map model, HttpServletRequest req, HttpServletResponse res) throws Exception; } 생성된 View 에 따라 각각 알맞은 방법으로 렌더링 해주기 위한 메서드를 선언해뒀다. JspView public class JspView implements View { private final String viewName; public JspView(String viewName) { this.viewName = viewName; } @Ov..
[Project Winter/#5] Controller 기능 구현
Project Winter 지난 #3-Contoller 기능 구현 중 문제에서 생긴 bean 관련 문제를 해결하고 다시 컨트롤러 기능을 구현했다. 원랜 인터페이스 기반 컨트롤러 기능만 일단 구현하려 했지만 bean 기능을 구현한 김에 애노테이션 기반 컨트롤러까지 진행했다. 컨트롤러 인터페이스 기반 컨트롤러 인터페이스 package com.project.winter.mvc.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface Controller { String handleRequest(HttpServletRequest req, HttpServl..

[Project-Winter/#4] 애노테이션 기반 싱글톤 빈 동적 생성
Project Winter 원래 애노테이션 기반으로 싱글톤 빈을 런타임시에 생성/관리 해주는 기능은 프로젝트 막바지에 개발하려 했다. 하지만 지난번 컨트롤러 기능 개발 중 컨트롤러 매핑 문제가 있었고, 문제 해결 방법으로 @Configuration 애노테이션이 붙은 설정 클래스에서 컨트롤러를 매핑해주기로 했다. 이 기능을 구현하기 위해 애노테이션 기반 빈 객체 생성 기능을 먼저 개발하였다. Annotation 우선 애노테이션은 위와 같이 다섯개를 미리 만들어 뒀다. @Component @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Component { } 애플리케이션이 실행하면서 생성할 빈을 찾을 때, @..