패캠 JAVA 5일차
자바 웹프로그래밍 2기 강의 5일차 내용을 정리한 포스팅입니다.
Github을 통해 관리해야 하는 코드는?
관리해야 할 부분
- 프로덕션 소스 코드
- 테스트 소스 코드
- 프로젝트를 빌드하기 위한 빌드 스크립트
관리할 필요가 없는, 아니 하지 말아야 할 부분
- 외부 라이브러리(jar)
- 컴파일러 빌드 도구를 통해 자동으로 생성되는 코드. 일단 시작을 점(dot, .)으로 시작하면 의심해 본다.
- 클래스 코드. 메이븐의 경우 target 디렉토리
- 이클립스, intellij 프로젝트 설정 파일
tip
- https://www.gitignore.io/ 에서 각 언어, 통합 개발 도구에 따른 ignore를 자동 생성할 수도 있다.
git remote 저장소
- 현재 연결되어 있는 원격 저장소 보기 : git remote -v
- 원격 저장소 추가 : git remote add $remote-url
- 원격 저장소 재설정 : git remote set-url origin $remote-url
.gitignore
- IDE, 메이븐, 그레들 등 자동으로 생성되는 무시하고 싶은 파일들을 관리한다.
JPA
Domain 매핑시 쿼리주기
@OneToMany(mappedBy="question")
@Where(clause = "deleted = false")
@OrderBy("id ASC")
private List<Answer> answers;
- 연관관계 맺어져 있는에 가져올때, where절과 orderBy절을 위처럼 줄 수 있다.
select
answers0_.question_id as question5_0_0_,
answers0_.id as id1_0_0_,
answers0_.id as id1_0_1_,
answers0_.contents as contents2_0_1_,
answers0_.create_date as create_d3_0_1_,
answers0_.deleted as deleted4_0_1_,
answers0_.question_id as question5_0_1_,
answers0_.writer_id as writer_i6_0_1_,
user1_.id as id1_2_2_,
user1_.email as email2_2_2_,
user1_.name as name3_2_2_,
user1_.password as password4_2_2_,
user1_.user_id as user_id5_2_2_
from
answer answers0_
left outer join
user user1_
on answers0_.writer_id=user1_.id
where
(
answers0_.deleted = 0
)
and answers0_.question_id=?
order by
answers0_.id asc
- Question 객체를 가져올때, 실제 호출되는 쿼리
Eager, Lazy Loading
- Eager : 실제 사용하지 않아도 일단 가지고 온다.
-
Lazy : 실제 사용할때 쿼리 날라간다.
- @OneToMany : Default -> Lazy
- @ManyToOne : Default -> Eager
- mappedBy : FK 위치를 알려준다.
JPA @duscriminator
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
- 해당 설정이 특정 SQL(MySQL, Oracle)에 대한 최적화를 해준다.
기술들이 점점 추상화 되었다고 해도 내가 굳이 다 알아야 하나는 생각을…
- 더 중요한게 뭔지 알고 우선순위 정하는게 좋을것 같다.
- JPA를 배우는것도 쿼리를 배우는 것보다 비지니스 로직에 집중하는게 옳다면 JPA를 사용하는게 좋듯이.
- 객체설계 먼저 하고 DB 설계하는 연습을 해보는게 좋다.
질문 : ManyToOne Lazy / Question 갯수 조절해서 가져오는거 / 양방향 맵핑 꼭다해주어야 하는지
- ManyToOne Lazy
- 실제 해보면 Lazy 안될거다 해봐라 Proxy랑 연관된 이유라는데 찾아봐야 할 듯..
- Question 갯수 조절해서 가져오는거
- 이런게 성능 튜닝이다. 성능 튜닝이 필요한 부분은 Repository에 새로운 로직을 짜주어야 한다.
- 양방향 맵핑 어디까지 해주는게 좋을지
- 객체간의 연관관계 매핑을 맺을때, 어디까지 연관을 줄지 계속 연습해보면서 경험을 통해서 알아가는 수 밖에 없다. (무조건 양방향 했던 습관은 안좋았다..)
Template도 controller 영역에 속해있다.
- Controller 에서 TemplateEngine을 통해서 HTML 파일 만들어서 Response를 주는 구조이기 때문에 Template영역도 Controller에 묶여있다고 봐야한다.
Proxy
AJAX
흐름
- 기존 통신은 HTML을 그리기 위한 모든것을 불러와야한다.
- AJAX를 이용하면 JSON 데이터만 가져온다.(빠르다.)