🥑 Web Technoloy

    CascadeType.REMOVE vs @OnDelete(action = OnDeleteAction.CASCADE)

    프로젝트를 진행하다가 연관관계가 있는 엔티티를 연쇄적으로 제거하기 위해 사용되는 두 가지 방식에 대해 알게되었고, 여기서 새롭게 알게 된 내용을 간단히 정리해보려고 한다. 주관적인 내용이 많이 포함되어 있을 수 있음 💡 CascadeType.REMOVE와 @OnDelete(action = OnDeleteAction.CASCADE) 둘의 가장 큰 차이점은 JPA에 의해 처리되느냐, DDL에 의해 DB 단에서 처리되느냐이다. 전자의 방식을 취할 경우, JPA에 의해 외래 키를 찾아가며 참조하는 레코드를 제거해주게 된다. 따라서, JPA 상에서는 참조하고 있는 레코드의 개수만큼 DELETE 쿼리가 생성된다. 후자의 방식을 취할 경우, 데이터베이스 자체에서 on delete cascade 제약조건이 걸리게 된다..

    @OneToMany 단방향

    최근 진행하던 프로젝트에서 본격적으로 엔티티를 생성하고 매핑하는 과정을 진행하면서, 일대다 단방향 매핑을 고려해야 하는 상황이 왔었다. 별 고민없이 매핑하려 했으나, 찾아보니 해당 매핑 방법에 문제가 있는 것 같았다. 사실 이전에 김영한님의 강의를 통해 얼핏 듣긴 했지만 실제 겪어보지 않은 상황이라 딱히 중요하게 생각하지 않고 지나쳤던것 같다. 따라서 이번에 해당 내용에 대해 제대로 정리해보려고 한다. 💡 One To Many 단방향 매핑의 문제점 결론부터 말하자면, One To Many 단방향 매핑의 문제점은 다음과 같다. 엔티티가 관리하는 외래키가 다른 테이블에 있다. (Many에 외래키가 존재한다.) 따라서 연관관계 관리를 위해 추가로 UPDATE 쿼리가 실행된다. 이는 사실 성능상 큰 차이는 없다..

    Vue.js & Spring Boot 연동 및 개발환경 구축

    지금까지 JSP와 HTML 기반으로 프론트엔드를 개발했는데, 이번에 새로운 프로젝트를 시작하면서 Vue.js로 프론트엔드를 구현해보고자 하여, 그 방법을 정리해보려고 합니다. Spring Boot와 Vue.js를 연동하는 방법은 크게 두 가지가 있습니다. 프론트엔드와 백엔드 각각의 서버를 두고 백엔드에서 데이터만 조회하여 프론트엔드에서 보여주는 방법 하나의 서버를 두어 두 개를 통합하여 빌드 후 배포하는 방법 필자는 하나의 서버로 진행할 예정이며, 그 방식은 Vue.js를 빌드하면 Spring Boot 내 프로젝트로 빌드 파일이 생성되며, Spring Boot 배포 파일들과 함께 웹 서버로 배포하는 방식입니다. 백엔드는 STS, 프론트엔드는 VS Code로 구축하여 통합할 예정이며, 이 과정을 진행하기 ..

    @RequestBody vs @ModelAttribute

    @RequestBody와 @ModelAttribute는 클라이언트 측에서 보낸 데이터를 Java 코드에서 사용할 수 있는 오브젝트로 만들어주는 공통점이 있습니다. 하지만 이 두 애너테이션은 세부 수행 동작에서 큰 차이를 보여주기 때문에 잘못 사용하면 예기치 못한 에러와 마주칠 수 있습니다. 이번 포스팅에서는 두 애너테이션의 특징 및 차이점에 대해 알아보겠습니다. 💡 @RequestBody Annotation indicating a method parameter should be bound to the body of the web request. The body of the request is passed through an HttpMessageConverter to resolve the method ar..