반응형 Spring6 [JPA 프로그래밍] @ID 기본키 할당 전략 ( IDENTITY, SEQUENCE ) @ID 어노테이션만으로 기본키를 애플리케이션에 직접 할당하는 방법 외에 DB가 생성해 주는 값을 사용하는 방식에는 어떤 것들이 있을까. 이 글에서는 JPA가 이 문제를 해결하는 전략에 대해서 알아본다. 1. 기본 키 직접 할당 전략 (기존) 말 그대로 DB가 생성해주는 기본키가 아닌 애플리케이션에서 직접 기본키를 할당하는 방식이다. 엔티티 클래스에서 @ID 어노테이션을 통해 매핑시키고 로직에서 em.persist()로 엔티티를 저장하기 전에 애플리케이션에서 기본 키를 직접 할당해 준다. public class User { @ID @Column(name = "id") private String id; } ------------------------------------------------ Board bo.. 2023. 2. 26. [JPA 프로그래밍] 객체와 RDBMS의 패러다임 불일치, JPA의 역할 패러다임 불일치 JPA를 공부하면서 JPA의 근본적인 존재 원인, 왜 쓰는지, 지향점이 무엇인지부터 제대로 알아봐야겠다는 생각이 들어 공부하게 되었다. 객체지향 언어인 자바는 추상화, 캡슐화, 상속, 다형성 등을 활용해 객체지향적으로 현대의 관계들을 정의하여 데이터화하고 프로그래밍한다. 이 객체화된 데이터를 개발자는 보통 관계형 데이터베이스(RDBMS)에 적재하여 조회하고 관리하게 되는데 이 RDBMS는 객체지향에서의 추상화, 상속, 다형성과 같은 개념은 존재하지 않는다. 이처럼 객체와 RDBMS는 지향하는 목적이 서로 다르기 때문에 기능과 표현하는 방법에서 차이가 나는데 이걸 둘 사이의 패러다임 불일치 문제라고 한다. JPA의 역할 그럼 이 패러다임 불일치 문제를 효율적으로 해결하는 것이 곧 개발자의 .. 2022. 11. 11. Spring & Spring-Boot의 개념과 특징 Spring의 개념 Spring은 간단히 설명하자면 Java, Kotlin을 기반으로 한 웹 프레임워크이다. 국내와 해외의 많은 서비스들이 이 Spring을 통해 만들어졌고 만들어지고 있다. Spring은 애플리케이션 객체의 생명주기와 그에 대한 설정을 관리한다는 점에서 일종의 컨테이너(Container)라고도 할 수 있다. Spring MVC라고 불리는 Model, View, Controller 패턴을 사용하고 있고 DispatcherServlet이 Controller 역할을 하면서 들어오는 request를 적절한 service에 매칭 시켜주며 그에 대한 response를 View로 출력한다. Spring에서는 몇 가지 특징들이 있다. Spring의 특징 POJO ( Plain Old Java Obje.. 2022. 11. 8. JPA 주요 연관 관계 (단방향&양방향, 주인, 다대일, 일대다) JPA는 객체 간의 관계형 데이터 테이블을 매핑하기 전에 그 관계를 이해하는 것이 중요하겠다. 연관관계는 해당 비즈니스 모델에 가장 적절한 관계를 설정해주어야 할 것이고 그걸 정하는 것이 개발자의 중요한 역량일 것이다. 연관 관계 정의의 규칙들 방향 : 단방향, 양방향 관계의 주인 : 양방향일 경우 관리의 주체 다중성 : 다대일(N:1), 다대다(N:M) 일대일(1:1), 일대다(1:N) 기본적으로 데이터 테이블은 외래 키 하나로 양 쪽 테이블 조인이 가능하기 때문에 방향을 굳이 나눌 필요는 없다. 그러나 객체는 참조용 필드가 있는 객체만 다른 객체를 참조할 수 있기 때문에 2개의 객체 중 하나의 객체만 참조용 필드를 갖는다면 단방향, 서로의 2개 객체 모두가 참조용 필드를 갖고 있으면 양방향 관계라고 .. 2022. 10. 15. 의존성 주입(Dependency Injection)이란 백엔드 프레임워크에서 가장 핵심은 개인적으로 DI(의존성 주입), IoC(제어의 역전)인 것 같다. Dependency, 의존관계란? 의존성 주입, DI란 무엇이냐. 정확한 뜻을 이해하기 위해선 쫌 더 너드스럽게 "A가 B를 의존한다." 라는 말을 생각해 볼 필요가 있을 것 같다. 이 말은 B의 기능이 변하면 A에도 영향을 미친다라는 말과 이어진다. class PastaChef { private PastaRecipe pastaRecipe; public PastaChef() { pastaRecipe = new PastaRecipe(); } } 위 코드로 예시를 들어보면, PastaChef(쉐프)는 PastaRecipe(레시피)를 가지고 있고 PastaRecipe(레시피)가 변화하면 PastaChef(쉐프).. 2022. 9. 20. [SQL] "ORA-02291: 무결성 제약조건이 위배되었습니다- 부모 키가 없습니다" 오류 - 이슈 Spring-boot + mybatis + oracle로 프로젝트 작업 중에 위 오류가 발생했다. BOARD 테이블을 카테고리별로 나눴었는데, 이렇게 되면 BOARD 테이블의 자식테이블인 COMMENT, ATTACH 테이블은 부모 테이블이 여러 개인 상황이 발생하여 결국 BOARD 테이블들을 통합하고 컬럼으로 게시판 카테고리를 분류하자는 결론이 나왔다. 아직 프로젝트 경험이 엄청 많은게 아니라 현업에서는 보통 어떤 방식을 쓰는지 알기가 쉽지 않아 이 방법 또한 정답이고 문제가 없을 것이라고 단정 짓기는 어려우나 그건 그때 다시 고민해봐야겠다. - 문제 해결 결론은 자바 코드에서보다는, 테이블을 합치는 과정 중 기본키와 외래키를 설정하는 과정에서 부모인 BOARD 테이블의 기본키를 ATTACH나 .. 2022. 9. 15. 이전 1 다음