이스트캠프 Spring 퀴즈 4
📘 오늘 학습한 내용
1️⃣ JPA
📝 퀴즈
🧩 퀴즈 1
Q. JPA에서 기본 키(PK)를 자동으로 증가시키기 위해 사용하는 어노테이션은 무엇인가요?
📝 나의 답변:
@GeneratedValue(strategy=IDENTITY)
✅ 피드백:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
🧩 퀴즈 2
Q. @ManyToOne, @OneToMany와 같은 어노테이션은 주로 어떤 상황에서 사용되며, 각각 어떤 관계를 표현하나요?
📝 나의 답변:
두 테이블 간의 다대일, 일대다 관계를 표현할 때 사용한다.
✅ 피드백:
@ManyToOne -> N:1
@OneToMany -> 1:N
테이블 간의 FK 관계를 그대로 나타내고 싶을 때 사용한다.
컬럼 간의 관계를 명시적으로 표현할 때 사용한다.
🧩 퀴즈 3
Q. JPA에서 객체의 필드명과 DB의 컬럼명이 다를 경우 어떤 어노테이션을 사용해 매핑할 수 있나요?
📝 나의 답변:
@Column(name="columnName")
✅ 피드백:
@Column(name="columnName")
Java는 camelCase를 많이 사용하고
DB는 snake_case를 많이 사용하기에
Convention을 일치시킬 때 사용한다.
🧩 퀴즈 4
Q. Spring에서 DB와의 연결을 위해 사용하는 대표적인 JDBC 설정 속성 2가지를 서술하시오.
✅ 피드백:
1. URL
spring.datasource.url
2. 사용자 정보(이름, 비밀번호)
spring.datasource.username
spring.datasource.password
3. Driver 클래스
spring.datasource.driver-class-name
4. DDL 사용 방식
spring.jpa.hibernate.ddl-auto
5. connection pool
hikari:
maximum-pool-size: 10
minimun-idle: 6
idle-timeout: 600000 # (ms)
max-lifetime: 1000000 # (ms)
pool-name: MyHikari
🧩 퀴즈 5
Q. 아래와 같은 SQL JOIN 문을 객체지향적으로 ORM에서 표현할 수 있는 방식은?
SELECT posts.*, boards.name FROM posts
LEFT JOIN boards ON posts.board_id = boards.board_id
@Entity
public class Post {
@Id
@GeneratedValue
private Long id;
private String title;
private String content;
@ManyToOne
@JoinColumn(name = "board_id") // FK 컬럼명 지정
private Board board;
}
@Entity
public class Board {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "board")
private List<Post> posts = new ArrayList<>();
}
✅ 피드백:
Post post = postRepository.findById(1L).orElseThrow();
String boardName = post.getBoard().getName();