반응형
- Jpa Entity 연관관계가 참조되어있는 객체 삭제2021-06-15 01:31:08개발중에 JPA를 사용하는 의미에 대한 원론적인 깨달음을 다시 얻었다. 기존의 JdbcTemplate이나 잠깐 사용해본 myBatis를 사용할 때 그저 쿼리를 작성하여 데이터베이스라는 서버에서 외부세계를 변화 시키는 용도로만 사용한다는 인식이 강하게 남아있어서 그런지 JPA는 객체지향 스타일로 개발하기 위해 사용는 ORM이라는걸 잊고 있었나보다. 다시 자각한 것에 비해 거창한 상황을 겪은 것은 아니지만 Service단에서 Repository로 특정 엔티티의 값을 없애야 하는 상황이 있었는데 그저 delete로 지우려고하니 violation이라고 친절히 알려주었다. 그래서 "아 지우려고하는 엔티티를 참조하는 다른 엔티티가 있어서 이러는거네"라고 생각이 들면서 JPA는 객체지향 스타일로 개발하는 것이니 관련..
Jpa Named Query 에러와 @Modifying , @Transactional2021-06-15 01:19:44Spring에서 JpaRepository를 확장해서 사용하는 경우 제공되는 기본 메서드 외에 필요한 동작들은 직접 쿼리를 작성해서 메서드를 선언하는데 보통 선언시 메서드의 인자에 @Param 애너테이션을 붙여 네임드 쿼리로 String의 쿼리문에서 reflection으로 받아서 쿼리를 날리게 되는데 아무것도 없이 일반적인 update문만 날리면 에러가 나온다. 이런 경우 @Modifying 애너테이션을 붙이고 해당 쿼리를 사용하는 서비스단에서 @Transactional을 붙여주어야 정상적으로 동작할 수 있다.
Spring Dto -- Nested Class?2021-06-04 17:16:49중첩 클래스 어떤 상황에서 써야 할까 스프링에서 컨트롤러에서 Dto 자주 사용하는데 이 Dto는 메서드 마다 새로 만드는 경우가 많은데, 재사용할 상황이 많이 안생겨서 이걸 굳이 Dto 패키지를 만들어서 거기에 넣어두거나 특정 도메인 패키지에 넣어둘 필요 없이 그냥 중첩 클래스로 쓰는게 좋지 않나? 라는 생각에서 시작했다. 일단 중첩 클래스 정리 중첩 클래스는 선언위치에 따른 분류 선언위치 설명 멤버 클래스 인스턴스 멤버 클래스 class A{ class B{ ...} } A 클래스를 생성해야만 사용가능한 B 중첩 클래스 정적 멤버 클래스 class A{ static class B{...} } A 클래스로 바로 접근 가능한 B 중첩 클래스 로컬 클래스 class A{ void method(){ class..
FormData 파일과 객체 한번에 보내기2021-05-26 00:29:30토이 프로젝트를 진행하면서 리액트에서 스프링 api 서버로 파일을 포함하는 객체를 List 형태로 보내야 했다. 처음에는 프론트단에서 FormData에 일반 객체를 담으면 무시되니까 multipart/form-data로 파일 여러개와 application/json content-type의 객체를 Blob으로 변환시켜 보내는 방식으로 Controller에서는 이렇게 받아서 구현을 했다. 근데 생각해보니 이렇게하면 보내기전에 객체를 한 번 Blob 처리를 해야되니 성능적으로 너무 손해라는 생각이 들었다. 그래서 FormData에 객체 배열을 포함시키는 바꾸는게 더 좋다고 생각하여 이런식으로 배열의 인덱스 접근해서 데이터를 추가하는 방식으로 변형했다. 백엔드 코드야 multipart를 2개로 나눠서 쓰던게 사..
반응형