책 :스프링부트로 배우는 웹 개발 | 알고리즘 문제 해결 전략

5

  • API문서화 : Swagger
    • web 개발하기 전에 추가하기
  • RestTemplate
    • REST API와 연동 시에는 HTTP 요청을 보내는 것 뿐만 아니라 실제로 응답에 JSON데이터를 파싱하고 모델 객체와 매핑하는 것이 중유
  • UtiComponentBuilder
    • 다양한 API와 URL을 매핑하기 위해서 문자열로 조합하다 보면 가독성이 떨어져서 유지보수가 힘들다.
    • Builder 방식으로 uri를 만드는데 필요한 정보들을 메서드를 이용해 만들수 있고, 인코딩도 가능하다.
    • RestTemplate을 이용해서 POST 방식으로 데이터를 요청할 때에는 MultiValueMap을 사용해서 데이터를 전달해야하는데, UriComponentBuilder는 자동으로 변환한다.
  • HTTP 메서드별 RestTemplate 메서드 명세
    |메서드명| HTTP 호출방식 | 변환 타입|
    |—|—|—|
    |getForObject| GET | Object|
    |getForEntity| GET | HttpResponseEntity|
    |postForObject| POST | Object |
    |postForEntity| POST | HttpResponseEntity |
    |delete| DELETE | - |
    |put| PUT | -|
    |exchange| user-define | user-define|
  • Rest와 관련된 RestController, RestTemplate, UriComponentBuilder, ResponseEntity
    참고

    6

  • ORM : Object와 Relation 간의 불일치 문제를 해결하기 위한 도구.

    자바에서는 JDBC API로 데이터베이스 제어가 가능하지만 ORM을 
    사용하는 이유는 로직 처리를 SQL로 하게 되고, 자바의 언어적인 기능을 사용하기 보다는 쿼리와 결과를 매핑하는 용도로 사용하게 되기 때문에
    
  • spring data : NOSQL, RDBMS 어느 한쪽만을 목표로 하지 않으므로 추상화된 인터페이스를 통해 다양한 저장소를 활용할 수 있다.

  • 자바 제네릭에서 Type 표기 약어의 의미

    • E : Element(요소를 의미)
    • K : Key(키를 의미)
    • N : Number(숫자를 의미)
    • T : Type(타입을 의미)
    • V : Value(값을 의미)
  • @ManyToOne의 fetch 기본값은 EAGER(즉시 로딩)이므로 성능 향상을 위해 FetchType.LAZY(지연 로딩)으로 설정해주는게 좋다.

  • mapperBy : jpa 연관 관계에서 주인을 명시하기 위해 사용한다.
    연관 관계의 주인은 다수 쪽이다.

  • QueryDSL : 다음에

  • Mybatis
    • 쿼리 매핑을 위해 sqlSession 객체 사용, sqlSession객체 생성에 sqlSessionFactory를 사용, spring과 같이 사용할때는 SqlSessionTemplate 사용 : 예외 처리를 spring에 DataAcessException으로 치환 시키기 때문에
    • ‘%{}%’ 비슷한것 검색
    • #{} 한개 검색
  • DataBase Connection Pool : 여러사람이 DB서버에 요청할 때마다 커넥션을 생성하면 서버 컴퓨터가 견디지 못해서 사용
  • Mybatis에서는 동적 SQL을 지원하지만 서비스 클래스에서 조건문을 활용해 먼저 처리하는 것이 좋다.
    참고

프로그래밍을 위한 여섯 단계 문제 해결 알고리즘

1. 문제를 읽고 이해한다.
2. 문제를 익숙한 용어로 재정의한다.
3. 어떻게 해결할지 계획을 세운다.
4. 계획을 검증한다.
5. 프로그램으로 구현한다.
6. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.

좋은코드를 작성하기 위한 원칙

1. 간결한 코드 작성
2. 적극적으로 코드 재사용 하기
    - 같은 코드가 세번 이상 등장하면 생각해보기
3. 표준 라이브러리 공부하기
4. 항상 같은 형태로 프로그램 작성하기
5. 일관적이고 명료한 명명법 사용하기
7. 모든 자료를 정규화해서 저장하기
    - 클래스 생성자에서 정규화 수행
6. 코드와 데이터를 분리하기