묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일 대 일 관계
[질문 내용]회원 테이블과 주민등록번호 테이블이 있다 가정했을 때 주민등록번호는 회원의 고유번호이고, 유니크 정보이기 때문에 회원과 주민등록번호 는 서로 일대일 관계가 되겠네요? 그렇다면 이 두 테이블에 대한 엔티티도 만들었을 때 서로 외래키를 선택할 수도 있는거고요.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@ManyToOne, @JoinColumn질문드립니다.
@ManyToOne, @JoinColumn에 대해 학습하면서 이해가 잘 되지않아 구글링이나 chatGPT와 같은 AI를 통해 아래와 같이 정리했는데요. 이렇게 이해하면 될까요? 제가 올바르게 이해한것이 맞는지 궁금합니다.. JoinColumn에는 매핑할 외래 키 컬럼 이름을 적는다. 테이블에서 외래키로 사용될 컬럼이름을 적는다. Member 엔티티의 team이랑 MEMBER 테이블의 외래키 컬럼(TEAM_ID)을 서로 매핑해줘야 MEMBER 테이블의 외래키(TEAM_ID)를 통해서 Team을 가지고 올 수 있다.@JoinColumn을 통해 MEMBER테이블의 외래키 컬럼 이름이 TEAM_ID임을 명시하고,@ManyToOne 을 통해 Team엔티티와의 관계를 정의한다. 즉, @JoinColumn과 ManyToOne을 통해 Member엔티티와 Team엔티티의 관계를 정의한다. JPA는 Team엔티티에서 @Id로 설정된 필드를 확인하고, 해당 필드가 Team엔티티의 기본키임을 알게된다. 그리고 JPA는 Member테이블의 외래키와 Team테이블의 기본키를 매핑해서 외래키-기본키 관계를 설정한다.Member엔티티의 필드에는 Team team이 있지만 db에는 객체를 저장할 수 없으므로 Member엔티티를 em.persist()로 저장할떈, db에 team 객체가 아니라 @JoinColumn으로 명시했던 외래키가 저장된다. 이때 Team엔티티에서 @Id로 설정된 필드의 값이 저장된다. member.getTeam()을 할때도 MEMBER 테이블의 TEAM_ID를 사용해 Team엔티티 데이터를 가져올수있다. @JoinColumn으로 명시했던 외래키 값으로 TEAM테이블을 조회해서 TEAM객체를 생성해서 리턴한다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
스냅샷이 없는 상태에서의 변경 감지 방법이 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Member member = new Member(1L, "member"); em.persist(member); member.setName("Test"); tx.commit();위 코드를 실행하면 아래와 같이 SQL 쿼리문이 로그에 찍히는데요Hibernate: /* insert for hellojpa.Member */ insert into Member (name, id) values (?, ?) Hibernate: /* update for hellojpa.Member */ update Member set name=? where id=?persist()를 할 때 member 객체를 영속성 컨텍스트에 등록하고, 해당 상태에서는 신규 엔티티이므로 setName()으로 이름을 바꾸더라도 새로운 값이고, DB와 동기화되지 않았기에 스냅샷도 없을 것이라 생각했습니다.그래서 쿼리문도 INSERT 쿼리문 1개만 발생할 줄 알았는데, 왜 UPDATE 쿼리문도 함께 발생하는지 알려주실 수 있을까요?정확히는 persist를 수행하고 setName을 수행할 때, 스냅샷이 생성되지 않은 상태, 스냅샷이 없는 상태에서 어떻게 변경을 감지하여 UPDATE 쿼리문을 작성한 것인지 궁금합니다.처음에는 PK 생성 전략을 @GeneratedValue(strategy = GenerationType.IDENTITY) 로 해서 INSERT문이 먼저 생성되어야만 하는 것이 원인인줄 알았지만, SEQUENCE 전략으로 바꿔도 UPDATE 쿼리문이 발생하는 것을 보고 잘못 짚은 것 같아 질문 남겼습니다. 감사합니다.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
moveToList 질문드려요
상품쪽 moveToList에서 page하고 size추가 안해도 useCustomMove 이쪽에const page = getNum(queryParams.get('page'), 1) const size = getNum(queryParams.get('size'), 10)이렇게 되어있어서 따로 moveToList에서page하고 size를 안넣어도 잘 이동이 되던데잘못된걸까요??
-
미해결Practical Testing: 실용적인 테스트 가이드
헥사고날 아키텍처 질문 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. jpa와 너무 강하게 결합되어 있어 repository 인터페이스를 만든다고 하셨는데그러면 1. repository 인터페이스2. 1의 repository 인터페이스를 구현한 repositoryimpl3. 2의 repositoryimpl에서 사용할 jparepository 이렇게 세 개나 만들어서 사용하는건가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
@ManyToOne(fetch = FetchType.LAZY) 하고 콘솔에 select 쿼리문
[질문 내용]단방향 연관관계 영상 22분 10초 쯤에서 Member클래스에 Team 필드 어노테이션으로 @ManyToOne(fetch = FetchType.LAZY)를 지정하고 서버를 재실행하였을 때 김영한 강사님 콘솔에서는 쿼리가 지연로딩되어 분리돼서 Member와 Team이 따로 조회가 되는걸로 나와있는데요 저도 같은 환경으로 실행하였을 때는 한 DB테이블만(MEMBER) 만 조회돼서 나오는데 왜 이러는 것인지 궁금합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
DB 테이블명들이 복수형일 때 자바 엔터티 클래스명을 단수로 써야 할지 복수로 써야 할지 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의의 @Table(name = "orders") 이 부분 때문에 궁금한 점이 생겼습니다. @Entity @Table(name = "orders") @Getter @Setter public class Order { . . . }이 경우 데이터베이스에 생성되는 테이블명이 orders로 복수형이 되는데, DB를 설계할 땐 테이블명들을 전부 단수형을 쓰든, 전부 복수형을 쓰든 하나로 전부 통일하는 게 낫다고 들었습니다. 그럼 실무에서 데이터베이스 테이블명을 전부 복수형으로 통일한다면, 자바 코드의 엔터티 클래스 이름은 단수로 하고, @Table을 통해 복수형으로 바꾸게 되나요? 아니면 이 경우 @Table을 일일이 적기 번거로우므로 자바 클래스 이름도 복수형으로 하나요? 즉 예를 들어@Table("items")public class Item {}이런 식으로 모든 엔터티 클래스에 @Table을 통해 복수형 이름을 지정하는지, 아니면 @Table 애노테이션을 안 쓰고public class Items {}이렇게 클래스 이름 자체를 복수형으로 쓰는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 호출 문제
Member findMember = em.getReference(Member.class, member.getId()); System.out.println("findMember.getClass() = " + findMember.getClass()); //System.out.println("findMember.getId() = " + findMember.getId()); //em.detach(findMember); //em.clear(); //em.close(); System.out.println("findMember.getUsername() = " + findMember.getUsername());강의 38:40 초 내용 입니다 강의에선 em.close 를 하면 초기화 예외가 발생하는데 시간이 지나서 좀 바뀐건지 em.detach, clear 는 예외가 발생하는데 close 는 영속성 컨텍스트가 꺼지지 않고 정상적으로 작동을 해서 username 이 출력이 되네요다른 분들도 그런건지 확인 차 질문드립니다
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
fetch join 관련 질문입니다
A : B = 1 : N , B : C = 1 : N , C : D = N : 1 현재 이런 구조인데 한번에 데이터를 땡겨오고싶으면 C를 기준으로 A, B, D 전부 fetch join으로 가져오면 되는걸까요? 아니면 이렇게 하면 문제가 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
allocationSize에 대해 질문드립니다.
1. 처음 em.persist()를 할떄 allocation했던거 만큼의 시퀀스 값을 미리 가져와서 메모리에 값을 저장해놓는다. 이떄 1부터 50의 값이 메모리에 저장된다.2. db에 시퀀스의 값(현재값)은 50까지 줬으니 51로 되어있다.3. 이후 em.persist()를 하면 메모리에 있는 값이 사용되고, 만약 50까지 다 사용하고 나서 em.persist()를하게 되면 51부터 다시 allocation했던거 만큼의 시퀀스 값을 미리 가져와서 메모리에 값을 저장해놓는다. 이때 51부터 100의 값이 메모리에 저장된다. db에 시퀀스의 값(현재값)은 100까지 줬으니 101로 되어있다. 이러한 동작 과정으로 이해를 했는데요. 이렇게 이해하는게 맞을까요? + 근데 그럼 여쭤보고 싶은게em.persist()를 한번만 할 경우, call next value for MEMBER_SEQ5를 한번만 호출하고 이런식으로 되어있지만, em.persist()를 2번 이상으로 하게되면, call next value for MEMBER_SEQ5를 두번 호출하고 이런식으로 되더라구요... 그 이유를 도무지 모르겠습니다..
-
미해결입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
Docker Compose 배포 시 Jasypt 암호화된 속성 복호화 문제 해결 방법
문제Docker Compose 환경에서 애플리케이션 배포 후, 데이터베이스에 연결할 때 암호화된 설정값을 복호화하지 못해 연결에 실패하는 문제.원인@EnableEncryptableProperties 어노테이션을 누락한 경우, 애플리케이션이 암호화된 속성을 복호화하지 않고 데이터를 사용하려고 시도합니다. 이로 인해 암호화된 패스워드로 데이터베이스에 접속하려 시도하면서 연결 오류가 발생하고, 컨테이너가 종료됩니다.해결 방법JasyptConfiguration.kt 파일에 @EnableEncryptableProperties 어노테이션을 추가합니다.import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties import org.jasypt.encryption.StringEncryptor import org.jasypt.encryption.pbe.PooledPBEStringEncryptor import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @Configuration @EnableEncryptableProperties // 추가해주세요. class JasyptConfiguration { @Bean("jasyptStringEncryptor") fun stringEncryptor(): StringEncryptor { val encryptor = PooledPBEStringEncryptor() val config = SimpleStringPBEConfig() config.password = System.getenv("jasypt.encryptor.key") config.algorithm = "PBEWithMD5AndDES" config.setKeyObtentionIterations("1000") config.setPoolSize("1") config.providerName = "SunJCE" config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator") config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator") config.stringOutputType = "base64" encryptor.setConfig(config) return encryptor } } 예제 소스 코드 Github에서 확인하기
-
미해결실전! 스프링 데이터 JPA
트랜잭션 범위 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] @RestController @RequiredArgsConstructor public class MemberController { // 도메인 클래스 컨버터 private final MemberRepository memberRepository; @GetMapping("/members/{id}") public String findMember(@PathVariable("id") Long id){ Member member = memberRepository.findById(id).get(); return member.getUsername(); } @GetMapping("/members2/{id}") public String findMember2(@PathVariable("id") Member member){ return member.getUsername(); } @PostConstruct public void init(){ memberRepository.save(new Member("userA")); } } MemberController 에서 @PostConstruct 부분을 보면, save 메소드가 보입니다. 일반적인 경우를 생각해보면, 서비스 계층에 @Transactional 이 붙어있고, 트랜잭션이 걸려있는 메소드를 통해서 리포지토리의 save 를 호출하니 리포지토리에도 트랜잭션이 걸려있다고 할 수 있을 것 같습니다.그런데 위와 같은 경우에서는 리포지토리에 트랜잭션이 안 걸려있습니다. JpaRepository 의 상위 인터페이스나 클래스를 찾아가면서 save 에 트랜잭션이 걸려있는지 확인을 해보았으나 없었습니다. 그렇다면 트랜잭션이 걸려있지 않은데, 어떻게, 어떤 시점에 커밋이 이루어져서 db 에 반영이 된 것인지 궁금합니다.
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
API키 관리 궁금해요.
ajax로 API통신을 할 때 키값을 하드코딩하면 클라이언트에게 노출이 되지 않나요? 관리방법이 어떤게 있을까요?생각하고있는건, properties에 등록하고, 서비스로직에서 가져와 보내는걸 고려하고있습니다.다른분께 얼핏 듣기로는 실무에서는 AWS에서 가져온다는데, 그건 어떤 방법일까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@GeneratedValue(strategy = GenerationType.IDENTITY) String, Long
[질문 내용]기본 키 매핑 4분 10초 쯤에 id 필드에 @GeneratedValue() 어노테이션의 기본전략을 IDENTITY로 바꾸시고 실행을 하였을 때 김영한 강사님께서는 id 필드의 타입이 String이었습니다. 그런데 에러없이 잘 실행되더라고요. 그래서 저도 같은 코드에 실행을 하였을때는 에러가 나오고 아래에 콘솔에 나온 로그처럼 DDL이 실행이 에러난다고 표시가 나서 해결법을 찾는 과정에서 String타입을 Long타입으로 고치니 다시 재실행하였을 때 문제없이 DB에 잘 반영이 되었습니다. 어떤 차이로 이렇게 결과가 다른건지 궁금합니다.WARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table Member ( id varchar(255) generated by default as identity, name varchar(255) not null, primary key (id) )" via JDBC [Feature not supported: "CHARACTER VARYING(255)";]org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table Member ( id varchar(255) generated by default as identity, name varchar(255) not null, primary key (id) )" via JDBC [Feature not supported: "CHARACTER VARYING(255)";] at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94) at org.hibernate.tool.schema.internal.Helper.applySqlString(Helper.java:233) at org.hibernate.tool.schema.internal.Helper.applySqlStrings(Helper.java:217) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createTables(SchemaCreatorImpl.java:420) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createSequencesTablesConstraints(SchemaCreatorImpl.java:340) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:239) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:172) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:142) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:118) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:256) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:145) at java.base/java.util.HashMap.forEach(HashMap.java:1421) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:142) at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:315) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1507) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at hellojpa.JpaMain.main(JpaMain.java:10)Caused by: org.h2.jdbc.JdbcSQLFeatureNotSupportedException: Feature not supported: "CHARACTER VARYING(255)"; SQL statement: create table Member ( id varchar(255) generated by default as identity, name varchar(255) not null, [50100-232] at org.h2.message.DbException.getJdbcSQLException(DbException.java:568) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.message.DbException.getUnsupportedException(DbException.java:287) at org.h2.command.ddl.SequenceOptions.getBounds(SequenceOptions.java:316) at org.h2.command.ddl.SequenceOptions.getBounds(SequenceOptions.java:244) at org.h2.schema.Sequence.<init>(Sequence.java:100) at org.h2.table.Column.initializeSequence(Column.java:502) at org.h2.command.ddl.CommandWithColumns.generateSequences(CommandWithColumns.java:103) at org.h2.command.ddl.CreateTable.update(CreateTable.java:113) at org.h2.command.CommandContainer.update(CommandContainer.java:139) at org.h2.command.Command.executeUpdate(Command.java:304) at org.h2.command.Command.executeUpdate(Command.java:248) at org.h2.server.TcpServerThread.process(TcpServerThread.java:386) at org.h2.server.TcpServerThread.run(TcpServerThread.java:193) at java.base/java.lang.Thread.run(Thread.java:842) at org.h2.message.DbException.getJdbcSQLException(DbException.java:568) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:262) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80) ... 21 more
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
이 흐름이 맞을까요??
클라이언트에서 카카오 로그인 요청(요청 주소는 loginForm에 있는 a 태그) -> a태그의 redirectUrl로 code가 내려오고 요청폼에 맞춰서 DTO를 만들고 카카오 AccessToken을 발급 받음 -> 그럼 클라이언트는 로그인 완료 -> 그 후 나의 Application을 이용하기 위한 JWT 토큰을 별도로 발급그럼 서버쪽에서는 카카오 로그인이 완료되면 우리쪽의 Application을 이용하기 위한 JWT토큰을 발급해주면 되고, 우리쪽 JWT 토큰을 헤더에 넣어서 요청하면 API를 사용할 수 있다. 해당 흐름이 맞나요? 이렇게 이해하면 될까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Memberrepository작성후 memberRepositoryTest에서 오류발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]mememberrepository를 작성한 이후 memberrepository에서 오류가 발생하고 있습니다
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
OpenFeign을 어떤 상황에서 어떻게 사용하는지 감이 안옵니다...
OpenFeign을 어떤 상황에서 어떻게 사용하는지 감이 안옵니다... 단 한번도 프로젝트를 진행하면서 사용해본적이 없는 기술이여서 감이 와닿지 않는데 어떤 상황에서 유용하게 쓸 수 있는 기술인걸까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
회원을 바꾸고 재실행했을때 DB 데이터
[질문 내용]12:57 쯤에 김영한 강사님께서 데이터를 바꾸고 재실행했을 때 h2 database의 데이터 목록에서 기존 1, helloA와 2, helloB가 같이 나오는것을 확인하였습니다. 저도 따라서 기존 회원데이터를 2L, helloB 로 변경하고 실행했을 때 제 h2 데이터화면에서는 바뀐 데이터값만(2, helloB) 출력되더라고요. 동일한 환경과 셋팅을 하였지만 왜 저는 이렇게 다른 결과가 나오게 되었는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
HTE 테이블 생성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]H2에 연동해서 테이블을 생성하면 이렇게 HTE 테이블도 자동으로 생성이 됩니다. 코드는 강의 자료에 있는 그대로 했는데도 이렇게 뜨는데 HTE 테이블이 왜 생기는 걸까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
수업 외 질문입니다. test profile
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. JPA 가 아니더라도 Mybatis 환경이나 등...실무에서Junit Test를 할때 test profile 환경을 따로 구성해서 하나요?원본 데이터의 훼손을 방지하고자 하는건가요?