자바 웹 프로그래밍 Next Step (10)

송성우·2023년 12월 19일

새로운 MVC 프레임워크 구현을 통한 점진적 개선


10.1.1 요구사항(애노테이션 사용)

@RequestMapping(value="url작성", method=RequestMethod.GET) // GET, POST, HEAD, PUT, PATCH, DELETE, OPTIONS, TRACE
책에서는 이 부분을 직접 구현했다

메소드가 이렇게 많은 줄 몰랐다(chatGPT)
GET: 지정된 리소스에서 데이터를 검색합니다.
POST: 처리할 데이터를 지정된 리소스에 제출합니다.
HEAD: 실제 데이터 없이 지정된 리소스의 헤더를 검색합니다.
PUT: 리소스를 업데이트하거나, 지정된 URI에 리소스가 없는 경우 새 리소스를 생성합니다.
PATCH: 리소스에 부분 수정을 적용합니다.
DELETE: 지정된 리소스를 삭제합니다.
OPTIONS: 복귀

자바 리플렉션

자바 리플렉션이란: 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API

private 필드에 접근하기

자바는 리플렉션 API를 통해 클래스의 private 필드에 접근해 값을 전달할 수 있다.

public String getName() {
	return name;
}

@Getter 애노테이션을 사용하자 -> 자동으로 위의 getter 메소드를 생성해준다

MVC 프레임워크 구현 3단계

  1. @Controller 애노테이션 설정 클래스 스캔
    @Controller 애노테이션 설정이 되어 있는 클래스를 reflections을 통해 찾자

  2. @RequestMapping 애노테이션 설정을 활용한 매핑
    @RequestMapping 애노테이션 설정을 기반으로 매핑하는 작업

  3. 클라이언트 요청에 해당하는 HandlerExecution 반환
    클라이언트 요청에 해당하는 HandlerExecution을 조회하는 메소드

  4. DispatcherServlet과 AnnotationHandlerMapping 통합
    여태까지 애노테이션 기반으로 컨트롤러 설정이 가능하도록 진행했다
    AnnotationHandlerMapping를 활용해 서비스가 가능하도록 통합하는 작업을 진행하자

이로써 애노테이션 기반 MVC 프레임워크 구현을 완료했다

인터페이스가 다른 경우 확장성 있는 설계

기존 코드인 Controller 인터페이스와 추가된 HandlerExecution 클래스를 보면 인자와 반환 값이 같다 -> 통합 리팩토링이 가능
장점 : 같은 인터페이스를 구현함으로써 캐스팅과 같은 작업이 필요없다 -> 소스코드의 간결함
단점 : 확장성이 떨어진다

번외) 배포 자동화를 위한 쉘 스크립트 개선

profile
소통을 지향하며 성장하는 것이 목표입니다.

0개의 댓글