일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 김영한
- pointcut
- kotlin
- transaction
- spring
- Greedy
- 백준
- db
- Proxy
- Exception
- Thymeleaf
- 인프런
- 알고리즘
- Spring Boot
- java
- 스프링
- JPQL
- springdatajpa
- Servlet
- Android
- jpa
- SpringBoot
- JDBC
- 스프링 핵심 원리
- 스프링 핵심 기능
- http
- QueryDSL
- AOP
- 그리디
- 자바
- Today
- Total
목록spring (109)
개발자되기 프로젝트
빈 후처리기를 사용해서 실제 객체 대신 프록시를 스프링 빈으로 등록해보자. 이렇게 하면 수동으로 등록하는 빈은 물론이고, 컴포넌트 스캔을 사용하는 빈까지 모두 프록시를 적용할 수 있다. 더 나아가서 설정 파일에 있는 수 많은 프록시 생성 코드도 한번에 제거할 수 있다. 1. PackageLogTracePostProcessor @Slf4j public class PackageLogTracePostProcessor implements BeanPostProcessor { //특정 패키지 하위의 빈이 대상 private final String basePackage; private final Advisor advisor; public PackageLogTracePostProcessor(String basePack..
스프링은 우리가 필요한 포인트컷을 이미 대부분 제공한다. 이번에는 스프링이 제공하는 NameMatchMethodPointcut 를 사용해서 구현해보자 1. NameMatchMethodPointcut @Test @DisplayName("스프링이 제공하는 포인트컷") void advisorTest3(){ ServiceInterface target = new ServiceImpl(); ProxyFactory proxyFactory = new ProxyFactory(target); NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut(); pointcut.setMappedName("save"); //save인 경우에만 true/ DefaultPointc..
1. Devtools html 수정을 자주할 텐데 매번 서버 다시 띄우기 너무 귀찮음. debTools 사용하면 html 수정 후 recompile만 하면 바로 반영됨. build.gradle implementation 'org.springframework.boot:spring-boot-devtools' 2. H2 Database DB 파일 생성 jdbc:h2:~/blog 최초 접근 user 폴더 경로에 blog.mv.db파일 생성 확인 네트워크 모드로 접근 jdbc:h2:tcp://localhost/~/blog 해당 url로 접근하여 사용하면됨. dependancy implementation 'org.springframework.boot:spring-boot-starter-jdbc' 3. applica..
스프링은 MultipartFile 이라는 인터페이스로 멀티파트 파일을 지원 1. SpringUploadController @Controller @Slf4j @RequestMapping("/spring") public class SpringUploadController { @Value("${file.dir}") private String fileDir; @GetMapping("/upload") public String newFile(){ return "upload-form"; } @PostMapping("/upload") public String saveFile(@RequestParam String itemName, @RequestParam MultipartFile file, HttpServletReque..
1. Controller @Slf4j @Controller @RequestMapping("/servlet/v1") public class ServletUploadControllerV1 { @GetMapping("/upload") public String newFile(){ return "upload-form"; } @PostMapping("/upload") public String saveFileV1(HttpServletRequest request) throws ServletException, IOException { log.info("request = {}", request); String itemName = request.getParameter("itemName"); log.info("itemName..
타입 컨버터를 사용하려면 org.springframework.core.convert.converter.Converter 를 구현 ㅋㅋㅋㅋ Converter라는 인터페이스가 너무 많음.. 조심 ㅎㅎ 1. String -> Integer import lombok.extern.slf4j.Slf4j; import org.springframework.core.convert.converter.Converter; @Slf4j public class StringToIntegerConverter implements Converter { @Override public Integer convert(String source) { log.info("convert source= {}", source); return Integer..
1. ex) 문자 -> 숫자 @RestController public class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request){ String data = request.getParameter("data"); //문자 타입 조회 Integer integer = Integer.valueOf(data); //숫자 타입으로 변경 System.out.println("integer = " + integer); return "ok"; } } 분석 localhost:8080/hello-v1?data=10 String data = request.getParameter("data") HTTP 요청 파라미..
1. DefaultHandlerExceptionResolver DefaultHandlerExceptionResolver 는 스프링 내부에서 발생하는 스프링 예외를 해결. 대표적으로 파라미터 바인딩 시점에 타입이 맞지 않으면 내부에서 TypeMismatchException 이 발생하는데, 이 경우 예외가 발생했기 때문에 그냥 두면 서블릿 컨테이너까지 오류가 올라가고, 결과적으로 500 오류가 발생한다. 그런데 파라미터 바인딩은 대부분 클라이언트가 HTTP 요청 정보를 잘못 호출해서 발생하는 문제이다. HTTP 에서는 이런 경우 HTTP 상태 코드 400을 사용하도록 되어 있다. DefaultHandlerExceptionResolver 는 이것을 500 오류가 아니라 HTTP 상태 코드를 400으로 변경 2..