[個人用] 用語整理

- **다대일(@ManyToOne)과 일대다(@OneToMany)**
객체 관계에서 한 쪽만 참조하는 것이 단방향 관계이고, 양쪽이 서로 참조하는 것을 양방향 관계임.

- **@JoinColumn**
다대일이나 일대다의 다 쪽(@ManyToOne)에 외래 키 매핑.

- **JpaRepository**
매우 간단히 데이터를 검색 할 수 있도록 도와주는 인터페이스.

- **@Query**
JPA에 정의된 키워드를 조합하여 원하는 데이터를 가지고 오게 해줌.

- **JPA native query**
개발자가 직접 쿼리를 정의하는 것으로, @Query 속성안에서 nativeQuery 속성을 true로 설정하지 않았따면 기본적으로 JPQL 문법으로 동작이 된다.
하지만, 다양한 이유로 JPQL을 사용할 수 없을 때, JPA는 SQL을 직접 사용할 수 있는 기능을 제공하는데, 이것을 네이티브 쿼리라 한다.

- **@DataJpaTest @SpringBootTest**
스프링을 테스트 할 때 사용하는 어노테이션들.
@SpringBootTest full application config를 로드하여 통합 테스트를 진행하기 위한 어노테이션.
@DataJpaTest JPA 테스트와 연관된 config만 적용하고 @Component를 테스트하지 않는 어노테이션.

- **롬복 @Builder** 
Builder 패턴을 직접 작성하지 않고, Lombok이 구현해놓은 패턴을 사용.

- **자바8 스트림**
Stream은 컬렉션, 배열등에 대해 저장되어있는 요소들을 하나씩 참조하며 반복적인 처리를 가능케하는 기능이다. 
이러한 Stream을 이용한다면 불필요한 for문과 그 안에서 이루어지는 if문등의 분기처리를 쓰지않고도 깔끔하고 직관적인 코드로 변형할 수 있다.

- **자바8 스트림 map**
for문의 역할을 대신하여 데이터를 리스트 형태로 반환.

- **자바8 스트림 collect**
 Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환하여 모아두는 기능을 하는 메소드.

- **@JsonProperty**
JSON 직렬화 시 설정할 수 있는 이름을 지정하는 어노테이션.

- **부트스트랩5 Card**
부트스트랩5에서 제공하는 카드모양의 콘텐츠박스.

- **부트스트랩5 Form**
부트스트랩5에서 제공하는 입력을 받는 폼.

- **HTML form input type = "hidden"**
숨겨진 입력 필드를 설정한다. 폼 제출 시 사용자가 변경해서는 안 되는 데이터를 함께 보낼 때 사용.

- **JavaScript addEventListener click**
사용자가 컨텐츠를 클릭하는 이벤트가 발생할 경우 특정함수를 호출하게 해준다.

- **JavaScript querySelector**
선택자를 받아서 선택자와 일치하는 문서 안의 첫번째 요소 반환.
```
document.querySelector('#id') // id라는 id 값을 검색 후 반환
document.querySelector('.class') // class라는 class 값 검색 후 반환
document.querySelector('a');  // a 태그를 검색 후 반환
document.querySelector('.abc > nobr'); // abc 클래스의 nobr태그 검색 후 반환
```

- **JavaScript querySelectorAll**
선택자를 받아서 선택자와 일치하는 문서 안의 모든 요소 반환, 여러 요소 한번에 가져올 수 있음.
```
document.querySelectorAll('#id') // id라는 id 값을 검색 후 반환
document.querySelectorAll('.class') // class라는 class 값 검색 후 반환
document.querySelectorAll('a');  // a 태그를 검색 후 반환
document.querySelectorAll('.abc > nobr'); // abc 클래스의 nobr태그 검색 후 반환
document.querySelectorAll('.abc, #def');  // abc 클래스와 def라는 id 값을 검색후 반환
```

- **JavaScript 객체 리터럴**
객체 리터럴 방식은 객체 생성 방식 중 가장 일반적이고 간단한 방법으로, 컨텐츠를 그대로 대입하는 방법임.

- **JavaScript console log()**
콘솔창에 괄호 안의 값이 출력.

- **JavaScript fetch**
JavaScript에서 서버로 네트워크 요청을 보내고 응답을 받을 수 있도록 해주는 메소드.

- **JavaScript alert**
사용자에게 중요한 내용이나 경고창을 띄워줄 때 주로 사용하는 메소드.

- **JavaScript Location.reload()**
Location.reload() 메서드는 새로고침 버튼처럼 현재 리소스를 다시 불러오는 메소드.

- **JavaScript forEach 사용법**

```
// Input

const arr = ['apple', 'kiwi', 'grape', 'orange'];

arr.forEach((item) => {
  console.log(item);
});

/* output
apple
kiwi
grape
orange
*/
```

- **JavaScript Template Literals (ES6)**
자바스크립트에서 문자열을 입력하는 방식.

```
var language = 'Javascript';
var expression = `I love ${language}!`;
console.log(expression); // I love Javascript!
```

- **JavaScript Remove**
선택한 HTML 요소를 DOM 트리에서 삭제한다. 이때 삭제되는 요소와 연관된 jQuery 데이터나 이벤트도 모두 함께 삭제된다.

- **PostgreSQL 장점**
오픈소스, 무료 라이센스, 뛰어난 확장성, 지속중인 업데이트.

- **JPA 초기화 전략**
DB 환경을 보다 원활하게 할수 있도록 어플리케이션 시작할때 DB를 초기화함.

- **JPA ddl-auto 설정**
spring.jpa.hibernate.ddl-auto로 좀 더 상세한 데이터베이스 초기화 설정을 할 수 있다.
none : 사용하지 않음
create : 기존 테이블 삭제 후 테이블 생성
create-drop : 기존 테이블 삭제 후 테이블 생성, 종료 시점에 테이블 삭제
update : 변경된 스키마 적용
validate : 엔티티와 테이블 정상 매핑 확인


- **JPA 방언 설정**
JPA가 직접 SQL을 작성하고 실행하여 DB의 종류(ANSI SQL, Oracle, MySQL, MS-SQL, PostgreSQL 등)마다 조금씩 다른 문법을 방언(Dialect)설정으로 해결 가능(JPA가 DBMS에 맞는 쿼리를 생성) .