공통 파일 업로드 구현 application.properties에 JSP 사용을 위한 prefix와 suffix 설정 # file - jsp spring.mvc.view.prefix = /WEB-INF/views/ spring.mvc.view.suffix = .jsp webapp/WEB-INF/views 폴더를 만들고 index.jsp 파일 생성 파일업로드 pom.xml에 JSP 사용을 위한 2가지 라이브러리 추가 org.apache.tomcat.embed tomcat-embed-jasper jstl jstl 1.2 로컬 환경에서 파일이 저장될 경로 설정 uploadFile.path = C:/home/upload/ 파일 업로드를 위한 UserController 컨트롤러 생성 및 FileController..
Mybatis TypeHandler를 사용해 데이터 변환하기 Board 테이블에 컬럼 추가 DEL_YN이라고 컬럼 이름을 정하고 데이터 유형은 CHARD, 길이는 1, default 값은 N, 코멘트는 삭제여부 Board 도메인에 delYn 추가 @Data public class Board { private int boardSeq; private BoardType boardType; private String title; private String contents; private Date regDate; private boolean delYn; } getList 쿼리에 B.DEL_YN 컬럼 추가 SELECT B.BOARD_SEQ, B.BOARD_TYPE, B.TITLE, B.CONTENTS, B.REG_..
스프링부트 환경에서 스케줄러 사용 메인 클래스에 @EnableScheduling 어노테이션 추가 @SpringBootApplication @EnableScheduling public class ExampleSpringApplication { public static void main(String[] args) { SpringApplication.run(ExampleSpringApplication.class, args); } } 스케줄러를 관리하는 ExampleScheduler 클래스 생성 메소드에 @Scheduled 어노테이션을 추가하면 사용이 가능하므로 cron에 5초마다 작동하게 설정 @Component public class ExampleScheduler { Logger logger = Logger..
설정값 프로퍼티 클래스 로컬, 개발, 운영환경에서 프로젝트에 필요한 설정(Config, Properties)을 각각 관리하기 위해서 클래스를 만들고 프로퍼티의 내용을 변수에 매핑한 후, 만든 클래스를 @Bean으로 등록한 후 사용하고 싶은 곳에서 @Autowored를 사용해 간단하게 사용 수정이 발생하면 프로퍼티 값 또는 변수만 변경하면 됨 @PostConstuct로 설정값 프로퍼티 클래스 관리 globals 폴더에 global-local, global-dev, global-prod 3개의 프로퍼티 파일 생성 // global-dev.properties uploadFile.path = /app/upload/ // global-local.properties uploadFile.path = /home/upl..
HandleMethod로 공통 로그인 체크 로그인 체크 여부 메소드를 가지는 RequestConfig 어노테이션 클래스 생성 생성한 어노테이션은 Controller 메소드에 활용할 것 @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestConfig { boolean loginCheck() default false; } Controller에 위에서 생성한 어노테이션 추가 로그인 체크가 필요한 부분인 save, delete 메소드에만 추가 public class BoardController { ... @PutMapping @RequestConfig @ApiOperation(va..
Mybatis를 이용한 검색 조건 추가 키워드 검색을 위해 검색 조건에 null 체크, 공백 체크를 해주기 @를 사용해 Java static method에 접근해 검색 조건에 공백 체크해주기 isNotEmpty는 null 체크, 배열 길이가 0인지 체크해줌 ... SELECT B.BOARD_SEQ, B.BOARD_TYPE, B.TITLE, B.CONTENTS, B.REG_DATE FROM T_BOARD B AND B.TITLE LIKE CONCAT('%', #{keyword}, '%') ORDER BY B.REG_DATE DESC ... 키워드로 리스트를 조회하기 위한 BoardSearchParameter 클래스 생성 public class BoardSearchParameter { private Stri..
Enum class 활용 Enum 클래스 활용 NOTICE, FAQ, INQUIRY 같은 코드 형태의 값의 이름을 DB에서 가져오기 위해 JOIN을 사용하는 대신 enum으로 처리 DB 컬럼 값이 코드일 경우 Enum 클래스를 사용하는 이유 1) 불필요한 테이블 및 코드 관리가 없어짐 2) 리스트, 상세 조회 시 코드에 대한 코드명을 TABLE JOIN 등을 통해 가져오는 불필요한 쿼리가 사라짐 Board 테이블에 BOARD_TYPE VARCHAR(10) 컬럼 추가 및 Board.xml 쿼리 수정 ALTER TABLE `T_BOARD` CHANGE COLUMN `BOARD_SEQ`, `BOARD_SEQ` INT(11) NOT NULL AUTO_INCREMENT COMMENT '게시물 번호' FIRST, ..
대용량 데이터 빠르게 Insert 하기 테스트 데이터 랜덤 문자열 생성에 사용하기 위한 commons-lang3 라이브러리 추가 org.apache.commons commons-lang3 applcation.properties jdbcUrl에 옵션 추가 멀티쿼리를 허용하도록 함 spring.datasource.jdbcUrl = jdbc:log4jdbc:h2:mem:testdb;MODE=MYSQL?allowMultiQueries=true 로그를 보기 위해 logback-default.xml의 root level 변경 ... Board.xml에 saveList 쿼리 추가 배열의 요소를 반복하는 foreach를 사용하여 배열 INSERT QUERY 사용하여 boardList 배열을 반복하면서 구분자 ,에 맞춰..