SuranS2 / DBMarket

🔥먼저 생각하는 사람
1 stars 0 forks source link

오피스아워 3회차 이슈 정리 #27

Open SuranS2 opened 2 months ago

SuranS2 commented 2 months ago

In GitLab by @SuranS2 on Aug 25, 2024, 16:59

SuranS2 commented 2 months ago

changed due date to August 26, 2024

SuranS2 commented 2 months ago

은주) item 엔티티에 CreatedDate(생성일자) 어노테이션, LastmodifiedDate(수정일자) 어노테이션 두 가지를 적용했더니 아이템 최초 생성 시 수정일자도 생성일자와 동일한 일시로 저장됩니다. LastmodifiedDate 은 처음 데이터가 들어갈때도 생성이 되는것이 맞는건가요? 실무에서는 수정일도 생성일과 동일하게 insert 되는 그대로 사용하는 것인가요?

SuranS2 commented 2 months ago

상품 등록 컨트롤러에서 RequestBody를 사용하여 json타입으로 자료를 전송하려고 했으나 기본 html, javascript 내에선 multipart 타입을 인식하지 못하고, 이미지 전송을 위해 image => base64 인코딩이 필요한데 ( spring에서 사용을 위해 디코딩 과정 추가) ModelAttribute 어노테이션 사용이 적절한게 아닌지?

현재 폼 데이터에 이미지가 포함되어있어서 직접적으로 직렬화 하기 어려운 상태 아닌지? axios나 jquery 이용한 json 변환은 확인하였습니다.

SuranS2 commented 2 months ago

유저 리스트 같은 경우 1:N관계로 불러와야 하는데 엔티티에 @OneToMany 어노테이션 적용하여 활용 가능한지?

SuranS2 commented 2 months ago

32 와 관련된 이슈. redirect를 걸어도 이미지 처음에 인식이 되지 않음.

새로고침하면 제대로 인식됨, static/img쪽에 저장되어 정적 자료로 인식해서 그런 것 같은데 맞는지? templates 쪽에 저장하면 제대로 작동하는지?

SuranS2 commented 2 months ago

In GitLab by @songheeAn on Aug 26, 2024, 18:55

커멘트 컨트롤러에서 수정 페이지나 상세 페이지 이동할때 Pathvariable 이용시 url에 사용자 id같은 정보가 노출되는데 보통 RequestBody를 쓰는 것이 올바른 방법인지?

SuranS2 commented 2 months ago

image

현재 3계층 구조로 작업중인데 디렉토리 정리의 방향성이 궁금합니다.

팀원들끼리 이야기 해보았을 때는 entity쪽이 자료가 많이 늘어나서 DTO계열(request,dto,info 등등) 과 데이터베이스와 연결되는 entity( comment,item,user ) 로 나누고자 합니다.

SuranS2 commented 2 months ago
@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());
    }
SuranS2 commented 2 months ago

log 혹은 sout으로 작동 테스트 해보는 경우가 많은데요. dev로 머지할때 테스트코드가 없는 깔끔한 코드를 전송하고 싶습니다. 다 수작업으로 해야하나요?

SuranS2 commented 2 months ago

lastmodified 분리해서 쓰는지 같이해서 쓰는지?

create랑 lastmodified 같이 씀, 수정일자 확인이 됨
=> logger를 통해 debugging 하기 좋음
=> 수정일자 sort 가능

SuranS2 commented 2 months ago

modelattribute + multipart 전송 괜찮음 image

postmapping consume 지정 필요.

SuranS2 commented 2 months ago

O

SuranS2 commented 2 months ago

사용자 id(순번)정도는 민감한 정보가 아니니 괜찮음 board나 post도 마찬가지.

SuranS2 commented 2 months ago

특정 클래스 안에다 이너클래스로 dto 만들기도 함 각 엔티티 소속별로 디렉토리 나눌수도 있음

SuranS2 commented 2 months ago

=> dev,master에서는 info~error => 개발단계에서는 다른 로거레벨 사용

SuranS2 commented 2 months ago

onerror같은걸로 처리해볼 수는 있겠음

비동기 동기처리가 다른가?

@SHKwon 🙌 확인 부탁드립니다.

감사합니다!