-
우아한테크캠프 Day08우아한테크캠프 2018. 7. 12. 17:37
학습에 있어 가장 중요한 건 지치지 않고 꾸준히 가는 것이다. (일정한 리듬을 만들면서 가는 게 더 중요하다)
by. 박재성 교수님
테스트 코드관련 피드백
SessionUtils에 대한 테스트코드를 작성해볼 생각은 안 했나? 세션에 대한 테스트는 어떻게 할 수 있나?
SessionUtils은 테스트하기 어렵지 않기 때문에 테스트 코드를 작성하면 좋다. (유틸 클래스는 단위테스트하기 좋다.)
테스트 코드의 장점
단위테스트를 하다 보면 자연스럽게 버그를 찾게 된다.
테스트 코드 작성 팁
메소드 하나 만들 때마다 단위테스트를 진행할 것
코드를 작성할 때와 테스트하는 시점이 멀어지면 멀어질수록 디버깅하기가 어려워진다.
Day08 학습 내용
최종적으로 Exception을 잡아서 제어해야 하는 곳은 컨트롤러다.
코드를 작성할 때 가장 신경 써야하는 것은 중복 제거다.
중복이 보이면 최대한 제거해야 한다. 중복 코드는 개발자의 최대 적이다. (하나의 실수로 버그를 발생시키고 디버깅을 어렵게 만든다.)
@ControllerAdvice를 사용하는 이유도 컨트롤러 각각에서 중복되는 예외처리 부분을 줄이기 위함이다. (중복 제거)
클래스간의 중복 : 별도의 클래스를 만들어서 중복 해결 (ex. 세션관리)
하나의 클래스 내에서 생기는 중복 : 메소드를 만들어서 중복 해결
Spring Data JPA
한방 쿼리의 문제
1. 쿼리에 대한 재사용성이 떨어짐
2. join이 너무 많아서 DB에 막대한 부화를 줌
최근 추세는 쿼리를 잘게 나눠 여러번 날린다.
JPA도 한방 쿼리를 할 수 없도록 조장하고 있다. 따라서, 콘솔을 보면 여러 번의 쿼리를 날리고 있는 것을 볼 수 있다.
@ManyToMany 일 때는 매핑 테이블이 필요하다
배민찬 만들다 보면 객체들 간의 관계가 복잡하다. 이것을 하기 전에 JPA 공부를 열심히 해두면 좋다.
CASCADE 설정
CASCADE 장점
CASCADE를 이용하면 관련된 객체까지도 같이 반영할 수 있다.
CASCADE 단점
답변 하나가 수정됐을 때, Question에서는 이것을 반영하기 위해 모든 답변 리스트를 읽어야 하는 단점이 있다.
오브젝트 그래프란
오브젝트 그래프에서 객체들 간의 약한 의존관계를 가지는 부분을 끊을 필요가 있다. (JPA 관점에서 보자면 단방향을 의미)
관련된 객체들끼리는 묶어야 한다. 이렇게 묶으면 패키지가 된다
객체 설계 관점에서 보면 양방향으로 하는 건 좋은 설계가 아니다.
But. 여러 경험을 하다 보면 양방향으로 바라보는 것이 괜찮은 때도 있다. (특히, 객체들 간의 커플링이 심할 경우)
API를 사용하는 관점에서 편하기 때문이다.
예를 들어, 질문과 답변 객체의 커플링 심할 경우, 질문을 조회해 올 때 한방에 답변까지 가져오고 싶은 경우가 많을 거다.
이럴 때, 양방향을 하면 API 한번으로 답변까지 가져올 수 있는 이점이 있다. (경험을 쌓으면서 해당 부분은 이해할 것)
양방향 관계를 맺으면 얘기치 못한 상황이 발생할지 모른다. 무한루프에 빠질 수도 있다.
ex. JSON 객체를 만들 때
질문객체를 JSON으로 만들면, 질문 안에 답변이 들어갈 거고 답변 안에 또 질문이 들어있어서 무한루프에 빠질 수 있다.
해결책
JSON 만들 때 단방향으로만 해서 만들어야 한다. (@JsonIgnore이용)
데이터 형식
- form으로 전송하는 경우
userId=javajigi&name=jongwan
- JSON으로 전송하는 경우
{"contents" : "hello world" }
컨트롤러는 스프링프레임워크한테 어떤 데이터형식으로 데이터를 받을지 알려줘야 한다. (@RequestBody)
서버에서 동적으로 HTML을 만드는 부분 : 템플릿 엔진
클라이언트에서 동적으로 HTML을 만드는 부분 : 예제 참고
자바스크립트
이벤트 처리, 돔 핸들링, 비동기, promise 패턴, 함수 호이스팅
비동기
함수가 숨겨져 있다가 이벤트가 발생했을 때 실행되는 개념 (콜백함수)
크로스 도메인 이슈
다른 도메인 간에는 Ajax 통신을 할 수 없다.
해결책
CORS, JSONP를 이용해서 다른 도메인 간에도 Ajax 통신을 할 수 있다.
자바스크립트 실행 순서
비동기 Ajax를 호출할 때는, 실행할 함수를 미리 기억하고 있다가 나중에 결과가 왔을 때 그때 함수가 실행되는 구조 (promise 패턴)
아래 '$ 함수'를 jQuery와 같이 사용하고 싶다면, 해당 $ 함수를 jQuery 아래에 두면 오버라이딩되서 사용할 수가 있다.
function $(selector) { return document.querySelector(selector); }
$(".submit-write textarea").value
다음 시간에는 백엔드 개발자에게 필수인 UI가 없는 상태에서 API를 테스트하는 방법을 배울 것이다.
'우아한테크캠프' 카테고리의 다른 글
자바 ORM 표준 JPA (0) 2018.07.13 우아한테크캠프 Day09 (0) 2018.07.12 우아한테크캠프 Day07 (0) 2018.07.11 Git과 Github 정리 (0) 2018.07.10 우아한테크캠프 Day06 (0) 2018.07.09