@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<CodeFile> codeFiles;mappedBy
양방향 관계임을 명시하기 위한 옵션
실제 외래키가 관리되지 않는 Entity에서 mappedBy옵션을 사용한다.

왜 mappedBy라는 옵션이 탄생한 걸까?
우선 mappedBy를 사용하지 않는 경우 생성되는 테이블은 다음과 같다.
@OneToMany
private List<CodeFile> codeFiles;
중간 테이블을 자동 생성해준다.
이런 경우 mappedBy에 비해 post의 code_file의 컬럼을 조회하기 위해서 2번 join을 하면서 비효율적이게 된다.
cascade
영속성 전파의 범위를 설정하는 옵션
public enum CascadeType {
ALL,
PERSIST,
MERGE,
REMOVE,
REFRESH,
DETACH;
private CascadeType() {
}
}영속성 컨텍스트 생명주기에 관해 찾아보면 알 수 있는 용어들이다.
orphanRemoval
부모와의 관계가 끊어진 자식 Entity를 자동으로 삭제하는 옵션
orphan=고아 removal=삭제
CascadeType.REMOVE와 유사하지만 CascadeType.REMOVE는 PostEntity를 삭제해야 자식 Entity인 CodeFileEntity도 삭제되는 반면, orphanRemoval=true로 설정하면 PostEntity에 있는 List<CodeFile>에서 list.remove()만 해주어도 자식 Entity가 삭제된다.