Spring Boot 와 Pageable 객체
platanus |

게시판에 필요한 페이징 기능을 어떻게 할까. 찾아보니 대부분은 Pageable 전체를 자체 구현하거나 일부 기능만 자체 구현해 사용한다. 여기서는 Pageable객체를 사용해 Repository부터 Thymeleaf까지 직접 내려보겠다. ArticleRepository SQL ArticleService 서비스부분은 DTO로 컨버팅하는 과정에서 개선의 여지가 있음. Controller 이 부분은 크게 손볼 것이 없는게 Page객체에 내려보내면 thymeleaf에서 쉽게 꺼내쓸 수 있음 Thymeleaf Pagable 하면서 찾아본 것들 https://javabydeveloper.com/spring-jdbctemplate-pagination-examples/ https://github.com/javabydeveloper/spring-boot/tree/master/spring-boot-jdbc-example/src/main/java/com/javabydeveloper https://gist.github.com/mobynote/595b61d72a1a0363dc80b7eb785faef9 https://codereview.stackexchange.com/questions/163131/jdbc-query-with-limit-and-offset... » read more

JdbcTemplate의 SimpleJdbcInsert Bean 등록에 관하여
platanus |

SimpleJdbcInsert 빈 등록에 대하여 Reference 일단 오류와 상관없이.. SimpleJdbcInsert를 빈으로 만드는건 뭔가 이상한듯 저게 저 Repository에서만 쓸텐데.. 저걸 빈으로 만들어서 얻는 이점이 없음 JDBC 드라이버에서 제공해주는 DB 메타데이터를 사용해서 insert 쿼리 정보로 사용한다던데 왠지 빈으로 등록 시점에 JDBC 연결이 완료되지 않았을수도 있겠다 여튼, Entity 객체에서 리플렉션으로 '타입'정보를 꺼내쓴다면 애초에 dataSource같은게 필요없겠지 (순수 Java 리플렉션만으로 될테니)... » read more

MyBatis와 Spring Boot (Annotation)
platanus |

MariaDB Docker 설치 DBeaver 설치 DB 생성 boot 프로젝트 생성 mariadb driver setup application.properties insert하는 컨트롤러 작성 POST 테스트 Select기능 만들기 Mapper Controller GET 테스트 Insert 개선 보통 insert작업을 하면 0이나 1로 리턴값을 받기 보다는 전체의 값을 반환 받는다. 그러나 id의 경우 DB에서 auto increment기 때문에 별도의 작업이 필요하다. 객체를 그대로 반환하면 입력값 그대로 반환되지만... » read more

스프링 부트에서 RESTful
platanus |

RESTful 게시판으로 변경하기 Controller 두 요청의 mapping이 주소가 같으나 RequestMethod가 GET과 POST로 구분 되는것을 알 수 있다. View (template) HTML은 POST와 GET방식만 지원하고 PUT, DELETE는 지원하지 않는다. 스프링에서 POST와 GET방식을 이용해 나머지 두가지를 사용할 수 있는 기능을 지원하는데 HiddenHttpMethodFilter가 있다. 스프링 2.1이상에서는 자동으로 필터가 등록된다. HiddenHttpMethodFilter는 _method속성의 파라미터가 존재할 경우 그 값을 요청 방식으로 사용한다.... » read more

스프링 부트에서 Multipart
platanus |

파일 업로드와 다운로드에서 고려해야 할 부분 첨부파일의 유효성 검사 파일 전송의 진행률 표시 예외처리 사용자 편의성의 드래그 앤 드롭 기능 파일 업로드 scheme 사용자 업로드 파일 이름을 변경하는 이유 → 동일한 이름을 가진 파일이 업로드 될 경우 사용 중인 운영체제에 따라서 저장 되지 않거나 파일명이 바뀌거나 덮어쓰기가 될 수 있다. 이같은 경우 먼저 업로드 된... » read more

Spring Boot; Exception
platanus |

부트에서 예외처리 아래의 3가지 방법이 있다. 자바의 방법 : try/catch 사용 컨트롤러 단위 : 각각의 컨트롤러에서 @ExceptionHandler 사용 전역 처리 : @ControllerAdvice을 사용한 전역 예외처리 @ExceptionHandler는 중복코드가 발생한다고 한다.. 여기서 나올 중복 코드가 그 중복이 아닐텐데.. @ControllerAdvice 스프링 3.2에서 추가됨. Annotation만으로 추가 설정없이 예외 처리 가능. @ControllerAdvice : 예외처리 객체임을 알림. @org.springframework.web.bind.annotation.ExceptionHandler(Exception.class) : 예외 발생시... » read more

Spring Boot; AOP
platanus |

부트에서의 AOP 스프링 부트에서의 AOP도 역시 마찬가지로 적용할 수 있다. slf4j 로깅을 aspect로 등록하는 코드. 예제로써 보자.. 모르는 내가 봐도 좋은 코드는 아닌 것같음. 책에 또 코드 빠져있음…. 따로 bean등록을 하지 않았기 때문에 component scan으로 잡는다. AOP를 사용하기 위해 Aspect 어노테이션을 붙인다. Slf4j 어노테이션으로 slf4j 객체를 주입받는다. (log) Around로 aspect가 작동할 범위를 execution 필터 지정한다.... » read more

Spring Boot; Interceptor
platanus |

Interceptor 스프링의 인터셉터는 어떤 URI를 호출했을 때 요청 컨트롤러가 처리되기 전 또는 후 작업을 하기 위해 사용 된다 (프록시 패턴) 이런 역할은 Filter와 Interceptor로 수행할 수 있다. Spring의 MVC 요청 lifecycle 위치 filter는 dispatcher servlet 앞 단에서 동작 interceptor는 handler로 가기 전 동작 제어권 filter는 servlet의 일부 기능이다. interceptor는 spring framework내에 있기 때문에 bean을 사용할... » read more

Spring Boot; Transactional
platanus |

부트에서의 트랜잭션 코드 기반의 트랜잭션, 어노테이션을 통한 선언적 트랜잭션 두가지를 지원한다. @EnableTransactionManagement : 어노테이션 기반의 트랜잭션 활성화. PlatformTransactionManager : 스프링이 제공하는 트랜잭션 매니져 등록. @Transactional : 트랜잭션 빈으로 트랜잭션 처리됨. AOP를 활용한 트랜잭션 transactionInterceptorAdvice() AOP_TRANSACTION_ 상수 : Aspect의 필터와 지정대상을 상수로 지정한다. transactionAttribute.setName() : 트랜잭션의 이름 transactionAttribute.setRollbackRules() : Rollback 룰을 설정한다. 예외가 일어나면 롤백하는것으로 지정.... » read more

Spring Boot; Logback, Log4JDBC 개요
platanus |

Logback Log4j : 자바의 예외를 처리하기 위해 시작된 프로젝트 (종료) fork → Logback slf4j(Simple Logging Facade for Java) 와 함께 사용함 slf4j : 로깅 모듈 Interface slf4j를 이용해 코드를 작성하고 내부적으로 Logback, log4j2로 작동 Logback 설정 appender : 로그를 출력할 타겟을 결정함 (console, file, db) encoder : appender에 포함되어 출력할 로그를 지정한 형식으로 변환하는 역할.... » read more