본문 바로가기

개발/Spring36

Controller Test @SpringBootTest 통합테스트 하기에 적절 애플리케이션 컨텍스트를 로드하는데 시간이 걸려서 테스트가 다소 무거운 편이다. @SpringBootTest @BootstrapWith + @ExtendWith JUnit5를 사용 할때 @ExtendWith(SpringExtension.class) 쓰면 안된다. @Test JUnit5 애노테이션 단위 테스트 메소드 지정 @SpringBootTest properties • value, properties: 프로퍼티 설정 • args: 애플리케이션 실행 시 커맨드라인으로 입력하는 인자(옵션) 설정 • classes: ApplicationContext 로딩을 위한 설정 클래스를 직접 지정 • webEnvironment: ApplicationContext 의 웹.. 2024. 2. 18.
ControllerAdvice @GetMapping("/") public String root() throws Exception{ throw new Exception("테스트"); } 결과 : java.lang.Exception: 테스트 BasicErrorController 스프링부트의 기본 응답 BasicErrorController를 상속받아서 응용 할 수 있다. 특정 메소드만 오버라이드 특정 핸들러 메소드를 추가 BasicErrorController의 핸들러 메소드 BasicErrorController.errorHtml() 뷰 응답 BasicErrorController.error() json body 응답 static html 이나 template 파일을 추가해서 커스텀 페이지를 등록하는 법 • 단일 기본 페이지 • /resour.. 2024. 2. 17.
MVC 패턴 - API 설계(2) 요청, 응답 설계 Handler Methods Spring Web에서 사용자의 요청(request)를 받아 응답(response)를 리턴하는 메소드 매핑 정보 요청 응답 @RequestMapping • name: 뷰 템플릿에서 식별할 때 쓰는 이름 • value, path: URI 경로 • method: HTTP method (ex: GET, POST PUT PATCH DELETE) • params: 파라미터 검사 • headers: 헤더 검사 • consumes: 헤더의 Content-Type 검사 • produces: 헤더의 Accept 검사(데이터 타입을 받을 수 있는지?) • @GetMapping • @PostMapping • @PutMapping • @DeleteMapping • @PatchMa.. 2024. 2. 17.
함수형 프로그래밍 함수형 프로그래밍 : 대입문이 없는 프로그램(클린 코딩) 상태가 없다 대입문이 없다 부작용이 없는 순수 함수 불변성 함수형 엔드 포인트 Spring Web의 엔드포인트를 함수형 스타일로 작성하는 방법을 제공 WebMvc.fn routing, request handling 불변성을 고려해서 설계 기존의 DispatcherServlet 위에서 동작 애노테이션 스타일과 함께 사용 가능하다. HandlerFunction = @RequestMapping 입력 : ServerRequest 출력 : ServerResponse 결과 : data RouterFunction = @RequestMapping 입력 : ServerRequest 출력 : Optional data + behavior ex) url mapping 2024. 2. 16.
MVC 패턴(2) - API 설계 어노테이션 기반 설계 컨트롤러 클래스 MVC 패턴 중 핸들러 메소드를 포함하는 컨트롤러 빈을 만드는 과정 @Controller 컨트롤러 빈으로 스프링 컨테이너에 인식 View를 반환하기 위해 사용 객체를 상황에 맞는 ResponseEntity로 감싸서 반환해주어야 한다. Spring MVC Container View 반환 과정 Client는 URI 형식으로 웹 서비스에 요청을 보낸다. DispatcherServlet이 요청을 처리할 대상을 찾는다. HandlerAdapter을 통해 요청을 Controller로 위임한다. Controller는 요청을 처리한 후에 ViewName을 반환한다. DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게.. 2024. 2. 16.
MVC 패턴(1) - 요구사항 설계 요구사항 설계 예제를 만들어 보면서 MVC 패턴 구현 Usecase Diagram 도메인 프로그래머가 문제 해결을 하려는 대상 해결하고자 하는 문제의 영역, 범위 이용자, 이용자 -> 관리자, 장소, 이벤트 ERD-Diagram API 요구사항 정리 종류 uri method 기능 설명 개발 여부 뷰 / GET 루트 페이지 이벤트 조회 페이지로 이동 TRUE /error GET 에러 페이지 일반 에러, 로그인 실패 등 TRUE /login GET 관리자 로그인 페이지 TRUE /sign-up GET 관리자 회원 가입 페이지 TRUE /admin/places GET 장소 관리 페이지 TRUE /admin/places/{place-id} GET 장소 상세 정보 관리 페이지 TRUE /places GET 장소 .. 2024. 2. 15.
AOP(Aspect Oriented Programming) AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 특정한 함수 호출 전이나 후에 공통적인 처리가 필요 할 때 사용 로깅 트랜잭션 인증 OOP(객체 지향 프로그래밍)로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여 손쉽게 공통 기능을 추가/수정/삭제 할 수 있게 한다. AOP의 기본 개념들 Aspect 여러 클래스나 기능에 걸쳐서 있는 관심사, 그리고 그것들을 모듈화한 것 AOP 중에서 가장 많이 활용되는 부분은 @Transactional (트랜잭션 관리) 기능 Advice AOP에서 실제로 적용하는 기능(로깅, 트랜잭션, 인증 등)을 의미한다. Join point 모듈화된 특정 기능이 실행될 수 있는 연결 포인트(Aspect를 넣을 수 있는 지점) Poi.. 2024. 2. 6.
스프링 빈 이벤트 라이프 사이클 스프링 빈 이벤트 라이프 사이클 스프링 IoC 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 전 콜백 메소드 호출 → 스프링 종료 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메소드를 통해 초기화 시점을 알려주며, 스프링 컨테이너가 종료되기 직전에도 소멸 콜백 메소드를 통해 소멸 시점을 알려준다. 스프링 빈 라이프 사이클을 압축시키기 위해 생성자 주입을 통해 빈 생성과 초기화를 동시에 진행하면 되지 않을까? -> 객체의 생성과 초기화를 분 생성자는 파라미터를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가진다. 반면에 초기화는 이렇게 생성된 값들을 활용해서 외부 커넥션을 연결하는 등 무거운 동작을 수행한다. 따라서 생성자 안에서 무거운 초기.. 2024. 2. 4.