1. 설정먼저, 개발하고 있는 프로젝트에 Swagger에 대한 의존성을 추가해준다.dependencies { implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'} (스프링 시큐리티를 사용하고 있지 않다면, 넘겨도 된다.)만약, 스프링 시큐리티를 사용하고 있다면, 시큐리티에 Swagger 관련 경로를 추가해주어야 한다. .authorizeHttpRequests(request -> request .requestMatchers( "/", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-ui.html" ).permitAll() ..
스프링 부트 - 핵심 원리와 활용의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 자동 구성(Auto Config) 스프링 부트가 제공하는 자동 구성(Auto Config)를 이해하기 위한 간단한 예제를 만들어보겠다. JdbcTemplate을 사용해 회원 데이터를 DB에 저장하고 조회하는 간단한 기능이다. 프로젝트 이름 : autoconfig 라이브러리 : Lombok, Spring Web, MySql Database, JDBC API Member memberId, name 필드가 있는 간단한 회원 객체이다. @Data public class Member { private String memberId; private String name; public ..
스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 프록시와 내부 호출 스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 어드바이스를 호출하고, 이후에 대상 객체를 호출한다. 만약, 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 어드바이스도 호출되지 않는다. 스프링은 의존관계 주입시에 항상 프록시 객체를 주입하지만, 대상 객체의 내부에서 메소드 호출이 발생하면 프록시를 거치지 않고 대상 객체를 직접 호출하는 문제가 발생한다. 프록시 방식의 AOP는 메서드 내부 호출에 프록시를 적용할 수..
스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 예제 생성 다음 어노테이션을 적용시킨 스프링 AOP를 만들어보겠다. @Trace : 어노테이션 로그 출력 @Retry : 어노테이션으로 예외 발생시 재시도 ExamRepository 5번정도 실행했을 때 1번 정도 오류가 발생하는 리포지토리이다. @Repository public class ExamRepository { private static int seq = 0; /** * 5번에 1번 실패하는 요청 */ public String save(String itemId) { seq++; if (seq % 5 == 0) { throw new IllegalStateException..
스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 포인트컷 지시자 조인 포인트(Join Point)란 어드바이스(부가 기능)가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메소드 접근 같은 프로그램 실행 중의 지점이라고 정의했고, 포인트컷(Point Cut)이란 이 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능이라고 정의하였다. AspectJ는 포인트컷을 표현하기 위한 @Pointcut("execution(* hello.aop.order..*(..)") 와 같은 표현식을 지원한다. 포인트컷 표현식은 위 표현식에서 execute와 같은 포인트컷 지시자(PointCut Design..
스프링 핵심 원리 - 고급편의 복습을 위한 글이며, 이 글에 나오는 모든 사진과 코드의 저작권은 김영한 강사님께 있습니다. 1. 템플릿 콜백 패턴 변하는 부분과 변하지 않는 부분을 분리하는 것이 해결하고 싶은 문제였다. 변하지 않는 부분을 템플릿이라고 하고, 그 템플릿에 변하는 부분의 코드 조각을 넣어서 실행하는 것이 목적이다. 앞서 만들었던 ContextV2는 변하지 않는 템플릿 역할을 한다. 그리고 변하는 부분은 파라미터로 넘어온 Strategy의 코드를 실행해서 처리한다. 이렇게 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(Callback)이라 한다. 쉽게 이야기해서 콜백은 코드가 호출(call)은 되는데 코드를 넘겨준 곳(back)에서 실행된다는 뜻이다. 👉 콜백이란? 프로그래밍에서 콜..