자바 웹프로그래밍 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 데이터만 가져온다.(빠르다.)