Open SuranS2 opened 2 months ago
changed due date to August 26, 2024
은주) item 엔티티에 CreatedDate(생성일자) 어노테이션, LastmodifiedDate(수정일자) 어노테이션 두 가지를 적용했더니 아이템 최초 생성 시 수정일자도 생성일자와 동일한 일시로 저장됩니다. LastmodifiedDate 은 처음 데이터가 들어갈때도 생성이 되는것이 맞는건가요? 실무에서는 수정일도 생성일과 동일하게 insert 되는 그대로 사용하는 것인가요?
상품 등록 컨트롤러에서 RequestBody를 사용하여 json타입으로 자료를 전송하려고 했으나 기본 html, javascript 내에선 multipart 타입을 인식하지 못하고, 이미지 전송을 위해 image => base64 인코딩이 필요한데 ( spring에서 사용을 위해 디코딩 과정 추가) ModelAttribute 어노테이션 사용이 적절한게 아닌지?
현재 폼 데이터에 이미지가 포함되어있어서 직접적으로 직렬화 하기 어려운 상태 아닌지? axios나 jquery 이용한 json 변환은 확인하였습니다.
유저 리스트 같은 경우 1:N관계로 불러와야 하는데 엔티티에 @OneToMany 어노테이션 적용하여 활용 가능한지?
새로고침하면 제대로 인식됨, static/img쪽에 저장되어 정적 자료로 인식해서 그런 것 같은데 맞는지? templates 쪽에 저장하면 제대로 작동하는지?
In GitLab by @songheeAn on Aug 26, 2024, 18:55
커멘트 컨트롤러에서 수정 페이지나 상세 페이지 이동할때 Pathvariable 이용시 url에 사용자 id같은 정보가 노출되는데 보통 RequestBody를 쓰는 것이 올바른 방법인지?
현재 3계층 구조로 작업중인데 디렉토리 정리의 방향성이 궁금합니다.
팀원들끼리 이야기 해보았을 때는 entity쪽이 자료가 많이 늘어나서 DTO계열(request,dto,info 등등) 과 데이터베이스와 연결되는 entity( comment,item,user ) 로 나누고자 합니다.
@PostMapping
public String saveFormToDb(@ModelAttribute("itemPostDto") ItemPostDto itemPostDto, HttpServletRequest httpServletRequest){
// form name=itemInfo하니까 인식됨, 객체로 인식
log.info("itemInfo={}", itemPostDto.getItemInfo());
log.info("itemInfo={}", itemPostDto.getItemInfo().getName());
log.info("itemImage={}", itemPostDto.getItemImage().getOriginalFilename());
//DB저장작업
try {
registerItemService.uploadItemToDb(itemPostDto, httpServletRequest);
} catch (ServletException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
//redirection 작업
return "redirect:/items";
}
public void uploadItemToDb(ItemPostDto itemPostDto, HttpServletRequest httpServletRequest) throws ServletException, IOException {
// 작업을 service로 분리
itemPostDto.getItemInfo().setUserId(userService.getSession(httpServletRequest));
// 편의 메서드
log.info("size={}", itemPostDto.getItemImage().getSize()); //이미지 크기 체크
log.info("submittedFileName={}", itemPostDto.getItemImage().getOriginalFilename());
//uuid만 저장하면 uuid 파일이 완성됨, 확장자 필요.
String extention = itemPostDto.getItemImage().getOriginalFilename()
.substring(itemPostDto.getItemImage().getOriginalFilename().lastIndexOf("."));
// 저장경로 설정해서 활용
// String fullPath = fileDir + itemPostDto.getItemImage().getOriginalFilename();
log.info("filedir = {}" , fileDir);
String fileName = UUID.randomUUID() + extention;
// UUID.randomUUID() 또 하면 값이 달라짐!
String fullPath = fileDir + fileName;
log.info("파일 저장 fullPath={}", fullPath);
//파일 저장하기(static/img 경로)
//Dto 경로 저장
itemPostDto.getItemInfo().setImagePath("/upload/"+fileName);
// TODO 저장 경로 생각해보기
itemPostDto.getItemImage().transferTo(new File(fullPath));
itemPostRepository.save(itemPostDto.toEntity());
}
log 혹은 sout으로 작동 테스트 해보는 경우가 많은데요. dev로 머지할때 테스트코드가 없는 깔끔한 코드를 전송하고 싶습니다. 다 수작업으로 해야하나요?
lastmodified 분리해서 쓰는지 같이해서 쓰는지?
create랑 lastmodified 같이 씀, 수정일자 확인이 됨
=> logger를 통해 debugging 하기 좋음
=> 수정일자 sort 가능
modelattribute + multipart 전송 괜찮음
postmapping consume 지정 필요.
O
사용자 id(순번)정도는 민감한 정보가 아니니 괜찮음 board나 post도 마찬가지.
특정 클래스 안에다 이너클래스로 dto 만들기도 함 각 엔티티 소속별로 디렉토리 나눌수도 있음
=> dev,master에서는 info~error => 개발단계에서는 다른 로거레벨 사용
onerror같은걸로 처리해볼 수는 있겠음
비동기 동기처리가 다른가?
@SHKwon 🙌 확인 부탁드립니다.
감사합니다!
In GitLab by @SuranS2 on Aug 25, 2024, 16:59