Skip to content

midasWorld/SpringJPA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

스프링 JPA 공부를 위한 공간입니다.


목차

  1. TDD
  2. Spring Boot
  3. JUNIT
  4. JAVA 8
  5. Web
  6. Security
  7. Web Service & Web Application
  8. Annotation
  9. Spring Boot API
  10. JPA
  11. Richardson Maturity Model
  12. Extra. 이슈사항

TDD

  • TDD란?

    • 테스트 주도 개발 (Test-Driven Development)
    • 테스트 코드를 먼저 작성
      1. 항상 실패하는 테스트를 먼저 작성하고 (Red)
      2. 테스트가 통과하는 프로덕션 코드를 작성하고 (Green)
      3. 테스트가 통과하면 프로덕션 코드를 리팩토링합니다. (Refactor)
  • TDD를 공부해야 되는 이유

    • 대부분의 서비스 회사가 테스트 코드에 관해 요구

      [우대사항] - 빌드/테스트/배포 자동화 경험이 있으신분

    • 빠른 피드백

    • 자동 검증

    • 개발자가 만든 기능을 안전하게 보호


스프링 부트

  • 내장 WAS를 사용하는 것을 권장합니다.

    • '언제 어디서나 같은 환경에서 스프링 부트를 배포' 할 수 있습니다.
    • 새로운 서버가 추가 되면 모든 서버가 같은 환경을 구축해야만 하는 단점을 배제할 수 있습니다.
  • 파일 트리

    • web : 컨트롤러와 관련된 클래스 들은 모두 이 패키지에 담기
      • 뷰 템플릿 영역
      • 외부 요청과 응답에 대한 전반적인 영역을 이야기합니다.
    • domain : 도메인을 담을 패키지 -> Entity, Repository
      • 추상화 개념?
    • service
      • @Service에 사용되는 서비스 영역
      • 일반적으로 Controllor와 Repository의 중간 영역에서 사용됩니다.
      • @Transactional이 사용되어야 되는 영역
  • 프로젝트 생성 url : https://start.spring.io/

  • logging : 상세 로그 사용

    • logging:
        level:
            org.springframework: debug
      
  • Versioning - URI를 이용한 REST API Version 관리

  • Versioning - Request Parameter와 Header를 이용한 API Version 관리

    • Request Parameter versioning
      • Amazon
      • @GetMapping(value = "/users/{id}/", params = "version=1")
      • localhost:8080/users/1?version=1 으로 요청
    • (Custom) headers versioning
      • Microsoft
      • @GetMapping(value = "/users/{id}/", headers="X-API-VERSION=2")
      • header - key : X-API-VERSION, value : 2
  • Versioning 공통

    • Factors
      • URI Pollution
      • Misurse of HTTP Headers
      • Caching : 캐시가 남아있다면 이전에 반영된 정보로 전달 될 수 있음.
      • Can we execute the request on the browser?
    • No Perfect solution
  • resources/data.sql 생성 → query 작성하여 실행 가능!!!!

    • 이슈 사항
      • create-drop 설정으로는 테이블이 생성되기 전에 쿼리가 실행되어 오류 발생
        • spring.jpa.defer-datasource-initialization=true 설정을 추가 하여 성공!

        • ↓ 설정 파일

          spring:
            messages:
              basename: messages
            application:
              name: catalog-service
            h2:
              console:
                enabled: true
              settings:
                web-allow-others: true
              path: /h2-console
            jpa:
              hibernate:
                ddl-auto: create-drop
              show-sql: true
              generate-ddl: true
              defer-datasource-initialization: true
            datasource:
              driver-class-name: org.h2.Driver
              url: jdbc:h2:mem:testdb
        

JUNIT

  • MockMvc
    • @WebMvcTest

Java8

  • lambda
    • .map(PostListResponseDto::new) <-- .map(new PostListResponseDto(posts))

Web

  • ...

Security

  • 인증이란 무엇인가?
    • you are who you say you are
      • You know : password, pin-conde -> This!
      • You have : mobile phone, hardware token
      • You are : fingerprints, signature
    • But how does AUTH happen?
      • Authentication : 인증, 로그인
  • Session & Cookie
    • 장점
      • 만들기가 쉽고(Make it easy), Session 은 서버에 저장되어 있어서 믿을 수 있다. (Trusted)
    • 단점
      • client 요청을 처리하기 위해, 여러 서버에서 Session 을 위한 네트워크 요청을 해야 되므로, 성능 이슈가 있을 수 있다.
  • JWT - Json Web Token 2010
    • 구조
      • Header
      • Payload
      • signature
    • Json 이라는 파일 안에 필요한 모든 데이터를 함께 넣어 주고 받을 수 있다.
    • secret 과 함께 인코딩 해놓음으로써, 악의적으로 Payload 정보를 바꿔도 signature 를 통해 검증할 수 있다.
    • 장점
      • No State -> Session 을 서버에 저장하지 않기 때문에, 성능적인 이점이 있다.
    • 단점
      • 영원히 만료되지 않는 JWT 를 주고 받는다면, 해커가 악용할 수 있다. => 보안에 유념해서 사용해야 한다.
      • Payload 정보가 많아지면 네트워크 사용량이 증가하기 때문에, 데이터 설계 고려가 필요하다.
    • 참고 링크 : https://jwt.io/
  • bcrypt 란?
    • password-hashing function
    • bcrypt 란 패스워드를 안전하게 보관할 수 있도록 패스워드를 해싱하는 알고리즘
    • 그대로 보관하면, 해커에게 악용될 수 있으므로 암호화하여 보관하는것을 권장!
    • 구조
      • Alg : 어떤 알고리즘을 썼는지, 알고리즘에 대한 정보
      • Cost : 얼마나 많은 복잡도로 했는지, 암호화를 위한 비용
      • 🌟 Salt : 암호화를 할때, 우리가 원하는 길이만큼의 더 랜덤한 것들을 이용해서 암호화를 복잡하게 만드는 Salt!
        • Salt 를 쓰면 해독해야되는 갯수가 기하급수적으로 늘어난다.
      • Hash : 최종적으로 암호화된 정보
      • Salt 를 쓰지 않는다면, 해커들이 해시 테이블을 만들며 해독할 수 있다!
    • 사용법

Web Service & Web Application

  • 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용하기 위한 소프트웨어 시스템
  • client -> web server -> web application -> database
  • Web Service
    • request(input) & response(output)

    • Data exchange 2 format : xml, 🌟json🌟

    • Service consumer or Client -request(input)-> <-response(output)- Service provider or Server

      🍌 SOAP | ☕️ RESTful

  • SOAP Simple Object Access Protocol
    • xml 기반
  • REST (REpresentational State Transfer)
    • Resource의 Representation에 의한 상태(컴퓨터가 가지고 있는 자원) 전달
    • HTTP Method를 통해 Resource를 처리하기 위한 아키텍쳐
  • RESTful
    • REST API를 제공하는 웹 서비스
  • SOAP vs 🌟REST🌟 (REST가 짱이다)
    • 접근 제한성 vs 시스템 아키텍쳐
    • 사용 되는 데이터 문서 포맷
    • 서비스를 정의하는 방법
    • 전송되는 방법 & 전송 규약
    • 개발의 용의성

Annotation

  • @Data -> Setter + Getter + ToString
  • @AllArgsConstructor : 클래스변수의 생성자 자동 생성
  • @NoArgsConstructor : 매개변수없는 기본 생성자 생성
  • @PathVariable String name ⬅ "/api/posts/{name}"

Spring Boot API

  • HATEOAS

    • Hypermedia As the Engin of Application State
    • 현재 리소스와 연관된(호출 가능한) 자원 상태 정보를 제공
      • 🚀 Glory of REST
      • ↑ Level 3: Hypermedia Controls
      • | Level 2: HTTP Verbs
      • | Level 1: Resources
      • | Level 0: The Swamp of POX
  • Swagger

  • REST API Monitoring - Actuator

    • 모니터링 : 서버가 가동 중인지 아닌지도 파악 할 수 있다.
    • localhost:8080/actuator
    • application.yml ➡ 설정 시, 더 많은 정보를 모니터링 할 수 있다.
      • management:
          endpoints:
            web:
              exposure:
                include: "*"
        
    • HAL Browser를 이용한 HATEOAS 기능 구현
      • HAL Browser
        • Hypertext Application Language
        • API 리소스들 사이에서 일관적인 Hyperlink 를 제공하는 방식
        • API 간에 쉽게 검색이 가능하다는 장점
  • Spring Security


JPA

  • 구성도

    • Spring Data JPA
    • JPA
    • Hibernate
    • JDBC
  • JPA → 인터페이스!!!!

    • Java Persistence API
    • 자바 ORM 기술에 대한 API 표준 명세
    • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스.
    • EntityManager를 통해 CRUD 처리
  • Hibernate

    • JPA의 구현체, 인터페이스를 직접 구현한 라이브러리
    • 생산성, 유지보수, 비종속성
  • Spring Data JPA

    • Spring Module
    • JPA를 추상화한 Repository 인터페이스 제공

Richardson Maturity Model

  • Leonard Richardson
  • "A way to grade your API according to the constraints of REST."
  • LEVEL
    • 🚀 Glory of REST
    • ↑ Level 3: Hypermedia Controls
      • Level2 + HATEOAS
      • DATA + NEXT POSSIBLE ACTIONS
    • | Level 2: HTTP Verbs
      • Level1 + HTTP Methods
    • | Level 1: Resources
    • | Level 0: The Swamp of POX

Extra. 이슈사항

  1. (2021.11.15) Test 소스에서 Transaction이 걸린 상태로 url로 update를 날리니, Transaction 상태라 저장된 정보를 조회할 수 없으니 오류 발생.

    ==> Transaction을 빼고, teardown메서드로 deleteAll() 추가로 해결 완료

About

스프링 JPA 공부를 위한 공간입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages