본문 바로가기

Server Oriented/Spring

(18)
스프링 Transaction 트랜잭션 트랜잭션(@Transactional)은 Controller.java 가 아니라, ServiceImpl.java 에서 기술(inteface 인 Service.java 에서도 기술하지 않음). /build.gradle JPA 설정과 다를게 없음. /src/main/resources/application.yml JPA 설정과 다를게 없음. table1 과 table2 의 관계는 편의상 1:1 로 설정. table1 의 col11 이 primary key, Object1.java 연계. table2 의 col21 이 pk, table2 의 col11 이 table1 의 col11 대응, Object2.java 연계. 이곳에서는, table2.col11 에 foreign key 세팅이 되지 않은 상태로 본다. f..
스프링 파일 업로드 MultipartFile #2/2 "스프링 파일 업로드 MultipartFile #1/2" 에선, 로컬 파일을 서버에 업로드 할 때.. 로컬 파일 속성을 그대로 업로드하므로, 로컬에서의 작성일 등등의 정보가 그대로 업로드. "스프링 파일 업로드 MultipartFile #2/2" 에선, 서버에 업로드 할 때.. 경로와 파일명을 변경하면서 저장하므로, 로컬에서의 작성일 등등의 정보가 변경됨. 덧붙여서, 이미지 게시판 (테스트를 위한 간소화 버전) 관리 내용 추가. 여러 파일을 한 번에 업로드 하는 것은, "스프링 파일 업로드 MultipartFile #1/2" 참조. Ajax 를 이용해서 파일들을 미리 업로드 하고, 본문을 나중에 올려서 통합하는 방법도 있음. * build.gradle plugins { id 'org.springframe..
스프링 파일 업로드 MultipartFile #1/2 // 파일이 저장되는 os 상의 경로는 application.yml 에 기술 @PostMapping("/aaa") public String methodA(MultipartFile bbb) throws Exception{ // org.springframework.web.multipart.* log.info(bbb.getOriginalFilename()); // 경로명 없이 파일 이름과 파일 확장자 log.info(bbb.getSize()); // long 바이트 사이즈. 1024 로 나누면 KB 사이즈 log.info(bbb.getContentType()); // image/jpeg, image/gif, image/png, ... } - file type 외의 컨트롤들은 그대로 String 파라미터로 담을..
JUnit5 JPA DB 테이블 1개 목록/상세/등록/수정/삭제 ※ Mybatis mapper 가 설정되어 있으면 참조를 하기 때문에, 세팅된 mapper 가 불필요 하면 disable 방법을 찾아 보는 것도.. JUnit 테스트 하는데 계속 에러가 나서 결국 포기했었는데, 나중에 확인해 보니 mapper 중 하나가 문제를 일으켰던... ㅠ. @Slf4j // lombok.extern.slf4j.* @SpringBootTest // org.springframework.boot.test.context.* public class ClassATests{ @Autowired // org.springframework.beans.factory.annotation.* ClassARepository caRepository; // interface 이기 때문에 스프링에게 생성을 맡기..
스프링 JPA, 평범한 게시판 구현 DB 테이블 1개 검색 조건으로 조회하고 페이지 링크를 거는 목록, 상세, 등록, 수정, 삭제 등을 다루는 평범한 게시판 * 파일 구조 /src/main/java/도메인/controller/Board2Controller.java, request/response 교통정리만 처리 /src/main/java/도메인/domain/Board2.java, 기본 데이타 구조 (DB 연계). Board 라고 해도 됨 /src/main/java/도메인/dto/PageRequestDTO.java, 목록 검색 조건과 페이지 정보 /src/main/java/도메인/repository/Board2Repository.java, DB 관리 (JPA 핵심이자 기술할게 없기도..) /src/main/java/도메인/service/Board2Servic..
스프링, 세션과 쿠키 #1 Controller.. @Controller @RequestMapping("/auth") public class LoginContoller{ @GetMapping("/login") public String loginForm(LoginInput loginInput){ return "loginForm"; } @PostMapping("/login") public String login(LoginInput loginInput, HttpSession session){ ... UserInfo ui = new UserInfo("Gil-dong"); session.setAttribute("userInfo",ui); ... return "..."; } @GetMapping("/logout") public Strin..
스프링 뷰, 타임리프 form 과 결과 View 에 사용된 타임리프 항목이, View 를 호출한.. Controller 의 Model 에 담기지 않았거나 Controller 의 파라미터에 JavaBeans 객체 형태로 전달되지 않았다면, Whitelabel Error...Could not parse as expression... ...Exception evaluating SpringEL expression... 다만, 값이 null 이라도 에러가 발생하지 않음. Controller 의 자바빈즈 파라미터에 ObjectA objA 가 사용되었다면, Controller 안에선 'objA' 로 사용되고.. View 에선 'objA' 가 아니라 'objectA ' 형태로, 클래스명의 첫번째 문자를 소문자로 바꾸어 사용. Controller 의 자바빈즈..
스프링 build.gradle 수정후 반드시 실행 build.gradle 파일 수정 후 반영하기 위해서는, 'Refresh Gradle Project' 실행해야 함. build.gradle 파일을 마우스 오른쪽 버튼으로 클릭, 팝업 메뉴에서 Gradle, Refresh Gradle Project 등을 차례로 클릭. plugins { id 'org.springframework.boot' version '2.6.12' id 'io.spring.dependency-management' version '1.0.14.RELEASE' id 'java' } group = '패키지명' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' configurations { compileOnly { extendsFrom annot..