전체 글
-
Data URI의 이미지 ( + 화면캡쳐)REACT 2021. 10. 26. 15:39
프로젝트 진행중 canvas를 통해 화면캡쳐한 이미지로 미리보기를 생성하고 저장할 때는, dataURI형식으로 캡쳐가 되어 데이터를 파일 형식으로 저장히기 위해서 이 데이터를 blob으로 데이터 디코딩을 진행하여 이미지를 저장하도록 설정하였다. 이미 저장된 이미지를 화면에 표시하려고 할 때는, 이미지 타입체크를 하는 함수를 만들어 이미지 타입을 보고 video 인지 img인지 판단할 수 있도록 설정하였다. Data URI Data URI란 이미지 데이타를 base64인코딩을 하여 이미지를 생성하는 것으로 외부 데이터를 파일형태로 저장하지 않고 사용가능하다는 장점이 있으나 인코딩시에 크기가 증가하게 도므로 img파일의 용량이 큰 경우에는 사용하지 않는 것이 좋다. 다음과 같은 형태를 나타낸다. data:i..
-
FormData에 하나의 이름에 multipartFile여러개를 추가하고 싶을 때REACT 2021. 10. 26. 14:59
리액트와 스프링부트 프로젝트를 진행중에 List를 보내고 싶은데, 단순히 배열을 append하는 것으로는 진행이 되지 않았다. 다음과 같이 이미지하나씩 모두 추가해주어야 전달이 된다. Frontend const bodyFormData = new FormData() images.forEach(image=> bodyFormData.append("multipartFile", image)) deletedImages.forEach(image=>bodyFormData.append("deletedImages",image)) 위와 같이 모든 이미지에 대해서 foreach를 통해서 append해주어야만 multipartFile과 deletedImages에 각각의 이미지 리스트들이 잘 들어가게 된다. Backend @Po..
-
Controller와 RestController ( + ResponseEntity)Spring 2021. 10. 26. 14:52
controller와 달리 restcontroller에서는 페이지를 반환하는 것이 아니기 때문에, 예외적인 상황에서 문제가 발생할 수 있다. 따라서 ResponseEntity를 이용하여 상태코드를 조절하도록 한다. Controller 전통적인 @Controller는 주로 view를 반환하기 위해 사용한다. 클라이언트가 URI 형식의 request를 보내면, mapping되는 handler와 타입을 찾는 dispatcher servlet이 요청을 처리하고, Controller에서 일을 처리한 후에 dispatcher servlet에게 보내면 view를 클라이언트에게 response로 보내는 형식이다. view를 반환하기 위해서는 ViewResolver가 사용되며 설정에 맞게 view를 찾아 렌더링 해준다...
-
DTO를 통해 mapping된 엔티티 데이터 묶어서 보내기 ( + 순환참조 방지 DTO)Spring 2021. 10. 26. 14:17
DTO를 통해 엔티티 정보와 함께 참조된 데이터를 백엔드에서 프론트엔드로 보내고자 할 때, 일일이 나열하여 하나씩 데이터를 보내는 것이 아닌 json객체의 형식과 같이 데이터 안에 데이터 묶음으로 전하고자 하였다. 엔티티 mapping 상태 @Entity @Table(name = "user") @Getter @Setter @NoArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "firstname", nullable = false, length = 45) private String firstname; @Column(name = "l..
-
controller에서 파라미터를 받는 방법 : @RequestParam, @RequestBody, @PathVariable (+ DTO를 포함하는 DTO)Spring 2021. 10. 26. 13:18
스프링에서 프론트엔드에서 넘어온 데이터를 받는데에는 대표적으로 3가지 방식이 있다. @RequestParam @GetMapping("/activity") public ActivityDTO getActivity(@RequestParam(value = "id", required = true)String id){ Integer activityId = Integer.parseInt(id); return activityService.getActivity(activityId); } @RequestParam에서는 프론트엔드로부터 http://localhost:8080/activity?id=2 의 형식으로 요청이 넘어오게 된다면 물음표 뒤의 아이디 값을 받는 어노테이션이다. value 혹은 name으로 넘어오는 데이터..
-
DTO 사용범위Spring 2021. 9. 5. 21:56
데이터를 클라이언트와 서버가 주고받을 때 DTO를 사용하다보니, DTO의 사용범위가 controller와 service사이에서 어디까지 사용하는 것이 옳은 것일까하는 의문이 들었다. DTO DTO는 Data Transfer Object로 계층간 데이터 교환을 위해서 사용하는 객체이다. 엔티티를 그대로 외부에 노출하게 되면, 모든 속성이 노출되고 엔티티가 변경될 위험이 있기 때문에 model, view 분리원칙에도 영향이 갈 수 있다. DTO를 사용해서 model정보를 캡슐화하고 선택적 정보선택을 통해서 꼭 필요한 정보만 보내주도록 해준다. Service layer 다음의 블로그 글을 읽고 controller가 사용되지 않는 model정보를 추가로 가져오고 이용해서 여러 service에 의존해서 DTO를 ..
-
No serializer found for class Exception 에러 해결방법Spring 2021. 9. 5. 21:42
다대일, 일대일 관계의 설정에서 no serializer 에러가 나는 경우를 확인해보자. No serializer found for class Exception 엔티티 매핑 설정에서 fetch타입이 Lazy로 설정되어서 데이터가 아직 넘어오지 않았을 때 발생하는 에러이다. repository findby를 이용할때 발생되는 경우가 많다. 이러한 경우 해결방법이 3가지가 존재한다. ㉮ @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}), @JsonIgnore 어노테이션을 통해서 오류나는 매핑 엔티티 설정 바꿔주기 ㉯ LAZY설정된 엔티티를 EAGER로 바꿔서 가져오기 ㉰ application 파일안에 spring.jackson.serializat..