Spring
-
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..
-
@ManyToMany, @OneToMany, @ManyToOne관계 작성하기Spring 2021. 9. 5. 21:33
엔티티 매핑을 하다보면 엔티티와의 관계가 1:N, N:1이 아닌 N:N의 관계를 가진 경우가 존재한다. (ex. 팀-회원의 관계) 이러한 경우 다:다 의 관계로 매핑되는데, 이럴경우 조회 쿼리, 외래키를 어디에 위치시키는 가에 대한 여부를 알아본다. @ManyToMany 관계 조인테이블에서 데이터정보의 추가와 부가기능추가는 불가능해지기 때문에, 다대다 관계는 권유되지 않는다. 실무에서는 일대다, 다대일-다대일, 일대다의 관계로 풀도록 가운데 엔티티를 추가해서 풀어주도록 한다. 엔티티 설정 유저와 팀의 엔티티에 다음과 같이 작성해준다. 멤버와 팀은 서로 다대다 관계이다. 외래키는 user가 가지고 있기 때문에 다대다 관계의 매핑정보를 수정하기 위해서는 user측에서 다음과 같은 addTeam의 함수를 이용..
-
MultipartFile 파일업로드(with. react)Spring 2021. 9. 5. 20:49
spring에서 파일업로드 기능을 실행해보자. 파일을 저장하기 위해서는 spring프로젝트 내부에 파일저장 폴더가 위치해야 한다. File Upload Utils 먼저 파일을 업로드하는 util코드를 작성해준다. saveFile을 이용해서 파일폴더가 존재하지 않으면 폴더를 만들어주고 파일을 저장한다. cleanDir는 프로필이미지를 저장하는 경우에 아이디를 이용한 폴더안에 이미 파일이 존재하면 기존파일을 삭제한 후에 새로 파일을 저장해준다. import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import ja..
-
예외처리전략 (Exception Handler)Spring 2021. 9. 5. 20:25
스프링에서 예외처리를 해주자. 예외발생 데이터타입을 일관된 형태로 생성해서 반응하도록 설정해준다. Error Response 먼저 예외의 형태를 잡아주는 클래스를 작성해준다. 메세지와 상태, 시간정보를 담고있다. 발생된 에러를 다음의 형태로 반환할 것이다. import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor public class ErrorResponse { private String message; private int status; private long timestamp; } Global Exception Handler 발생된 예외 형태에 따라서 처리를 해주는 exception handler를 작성해준다. @Co..