작성
·
190
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)
[질문 내용]
강의 마지막에 JPA가 생성해준 SQL문들이 콘솔에 쫙 찍히잖아요. 영한님께서 이걸 그대로 복사해서 쓰면 안되고, 고치고 수정해서 사용해야 한다고 하셨는데요.
JPA가 이미 자동으로 DB에 테이블을 생성해준 것 아닌가요? 왜 또 create 쿼리를 쓸 일이 있다는듯이 말씀하시는건지 이해가 안갔습니다.
JPA 기본편을 점프하고 바로 넘어와서 이해가 안가는건진 모르겠지만, JPA기술 자체가 자동으로 DB를 생성하고 관리해주는 것에 의의가 있는 것 아닌가요? 쿼리문 생성용으로 쓰는거라면 그냥 시중에 erd 그리는 GUI 툴들이 많은데 그걸 쓰면 되는 것이 아닌지.. 질문드립니다.
답변 2
1
안녕하세요. 김민희님, 공식 서포터즈 OMG입니다.
JPA가 생성해준 DDL문을 그대로 믿고 사용하기 보다는 생성된 쿼리문의 정확도와 내가 의도한 대로 쿼리가 발생했는지를 의심하고 검토해보라는 의미로 받아드리면 될 것 같습니다.
JPA의 DDL문의 경우 다양한 DB 벤더(MySQL, Oracle, PostgreSQL 등)들의 모든 쿼리에 대해 개발자가 의도한대로 작성하지 않을 수 있음을 경계해야합니다.
정상적으로 생성되었다 할지라도 우리의 업무 비즈니스,보안 등의 요건 상 생성해준 쿼리를 일부 수정해야 할 수 있습니다.
생성된 쿼리의 Column Type이 BigInt인데, 개발자가 필요한 타입은 BigInt(20)이여서 디테일한 요소가 변경되어야 할 수 있습니다.
감사합니다.
JPA가 생성한 DDL문을 활용해야하는 경우가 왜 생기나요?
스프링과 JPA를 사용하는 환경에서 JPA를 사용하지 않고 테이블을 다른 툴을 사용해서 생성하는 것보다 실용적이고 편하기 때문입니다.
JPA를 사용하면 자바 코드와 별도의 설정(ddl-auto)만으로도 테이블 생성을 할 수있습니다.
erd 그리는 별도의 GUI 툴이 DB의 테이블까지 자동으로 생성해주고 JPA를 사용하는 것만큼의 편리성이 있는지는 사용해보지 않아 모르겠습니디만,
이미 세팅된 스프링 & JPA & DB 환경만으로도 생성할 수 있으니까요.
아래 AI인턴 답변의 영한님 말씀처럼 생성된 DDL문을 그대로 사용해도 된다면 그대로 사용하시면 되고, 개인에게 더 편한 방식이나 대안이 있다면 그 방식을 사용하시면 됩니다.
JPA를 사용한 테이블 생성은 개인 선택(취향)이라 생각합니다.
이대로 사용해도 되겠다 하면 그냥 이 DDL을 운영 DB에 반영하시면 되구요.
참고로 보통 컬럼 순서, 컬럼 길이, 인덱스 명 등등 이런 부분들이 깔끔하게 잘 안떨어집니다.
0
안녕하세요, 인프런 AI 인턴입니다.
김민희님의 질문은 JPA가 생성하는 DDL(데이터 정의 언어)을 실제 운영 환경에서 그대로 사용하는 것이 아닌, 왜 수정해야 하는지에 대한 의문입니다.
이에 대해 운영환경에서 DDL 작성과 관련된 질문과 비슷한 맥락의 답변이 있습니다. 해당 답변에서는 JPA가 생성해주는 DDL이 실제 운영 환경에 적합하지 않을 수 있기 때문에, 실무에서는 보통 JPA가 생성해 준 DDL을 참고하여 수동으로 DDL을 작성하고 적용한다고 설명하고 있습니다. 컬럼 순서, 컬럼 길이, 인덱스 명과 같은 세부 사항들이 잘 맞아떨어지지 않는 경우가 흔하기 때문입니다.
링크된 답변을 참고하시면 좋을 것 같습니다:
- “운영환경에서 DDL 작성”
더불어, JPA는 단순히 데이터베이스 초기 구조를 생성하는 데에만 사용되는 것이 아니라, 객체와 데이터베이스 테이블 간의 관계를 정의하고 ORM(Object-Relational Mapping)을 통해 Java 객체를 통해 데이터베이스를 관리할 수 있게 해주는 기술입니다. 따라서, GUI 툴을 활용해 데이터베이스를 설계하는 것과는 그 목적이 다릅니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
제 질문은 왜 JPA가 생성해준 DDL문을 그대로 쓰면 안되나요? 가 아니라, 애초에 JPA가 생성한 DDL문을 활용해야하는 경우가 왜 생기나요? 였습니다. JPA가 이미 테이블을 다 만들어줬는데요..
실무에서는 JPA가 자동생성해준 테이블을 사용하지 않고 DDL을 기반으로 수정하여 수동으로 테이블을 생성한다는 말인가요? 그렇다면 왜 그런 것이고, 그 과정에서 다른 좋은 대안이 많은데 굳이 JPA를 사용하는 이유가 있는건가요?