221227 TIL

이지섭·2022년 12월 27일

오늘의 공부

영어 쉐도잉

  • 유튜브

CORS : Cross Origin Resource Sharing

  • 동일 출처 정책
    • A 사이트에서 로그인 후 B 사이트에 접속하면 B 사이트에서 A 사이트로 마치 허가받은 사용자인 척 요청을 보낼 수 있게 된다.
    • 그것을 원천 방지하는 것이 동일 출처 정책
    • 하지만 최근에는 다른 서버에서 제공하는 API들을 사용할 일이 많아졌기 때문에 동일 출처 정책을 지키기 힘들어졌고, CORS가 탄생하게 되었다.
    • 브라우저에서 임의로 하는 것이다
      • 브라우저를 통하지 않거나,
        브라우저에서 동일 출처 정책을 사용하지 않으면,
        동일 출처가 아니어도 요청과 응답을 받을 수 있다
  • CORS 동작
    • 브라우저는 다른 출처로 요청을 보낼 때 다음과 같은 절차를 거친다
      • Simple Request
        • 특정 방식으로 요청을 보낸다
      • Preflighted Request
        • 진짜 요청을 보내기 전에, 확인 요청을 미리 보낸다
  • CORS 에러 해결
    • 클라이언트에서 해결
      • 동일 출처 정책 사용 안함
      • js나 css파일은 동일 출처 정책에 영향을 받지 않으므로 이를 활용
    • 서버에서 해결
      • 스프링
        • @CrossOrigin 어노테이션 사용
        • CorsFilter 사용
  • 출처 https://bohyeon-n.github.io/deploy/web/cors.html

GIT 협업 규칙

  • git flow
    • 5개의 브랜치마다 역할을 나누어 개발 진행
      • main : 실제 배포
      • develop : 추가 기능 개발. main의 복제본
      • feature : 상세 기능 개발. develop에서 파생됨
      • release : develop 브랜치를 main에 합치기 전 테스트 단계
      • hotifx : 빠른 버그 수정. main에서 파생되어 오류 수정 후 바로 main에 merge
  • Trunk-based flow
    • 브랜치 하나만 잘 관리하자
    • 이미 안정화 된 프로젝트들이 주로 사용하는 방식
      • main : 실제 배포
      • feature : 상세 기능 개발. main에서 파생됨
  • 이외 github flow, gitlab flow 등등 여러 종류가 있다
    • 팀 상황에 맞추어 적용

리차드슨의 성숙도 모델

  • 레벨 0
    • 클라이언트는 서비스별로 유일한 URL 끝점에 HTTP POST 요청을 하여 서비스를 호출합니다. 요청을 할 때마다 어떤 액션을 수행할지, 그 대상(예: 비즈니스 객체)은 무엇인지 지정합니다. 필요한 매개변수도 함께 전달합니다.
  • 레벨 1
    • 서비스는 리소스 개념을 지원합니다. 클라이언트는 수행할 액션과 매개변수가 지정된 POST 요청을 합니다.
  • 레벨 2
    • 서비스는 HTTP 동사를 이용해서 액션을 수행하고(예: GET은 조회, POST는 생성, PUT은 수정), 요청 쿼리 매개변수 및 본문, 필요 시 매개변수를 지정합니다. 덕분에 서비스는 GET 요청을 캐싱하는 등 웹 인프라를 활용할 수 있습니다.
  • 레벨 3
    • 서비스를 HATEOAS(Hypertext As The Engine Of Application State, 애플리케이션 상태 엔진으로서의 하이퍼미디어) 원칙에 기반하여 설계합니다. HATEOAS는 GET 요청으로 반환된 리소스 표현형에 그 리소스에 대한 액션의 링크도 함께 태워 보내자는 생각입니다. 가령 클라이언트는 GET 요청으로 주문 데이터를 조회하고 이때 반환된 표현형 내부 링크를 이용해서 해당 주문을 취소할 수도 있습니다. HATEOAS를 사용하면 하드 코딩한 URL을 클라이언트 코드에 욱여넣지 않아도 됩니다.
  • https://johngrib.github.io/wiki/richardson-maturity-model/

HATEOAS란?

  • Hypermedia As The Engine Of Application State
    • 서버가 클라이언트에게 하이퍼 미디어를 통해 정보를 동적으로 제공해주는 것
  • https://brunch.co.kr/@purpledev/29

JAVA 인터페이스

  • 인터페이스란 클래스 사용의 권고사항을 제시하는 특수형태의 클래스, 틀
    • 그래서 ~able로 네이밍 하는 경우가 많다!
    • 멤버 변수는 항상 public static final이다. 생략 가능
      • 객체를 생성하지 않기 때문에 변수와 생성자는 없다.
  • 인터페이스와 추상 메서드의 차이점
    • 추상 메서드
      • 멤버 변수가 있다 → 저녀 클래스들에 공통 속성 설정 가능
      • is kind of
    • 인터페이스
      • 다중 상속 가능하기 때문에 세분화된 기능을 표현하는데 활용된다
      • is able to
    • 공통점이 모여 추상 클래스가 되고, 차이점이 모여 인터페이스가 된다.

String 클래스와 Wrapper 클래스

  • int와 Integer의 차이!
    • 기본형 데이터 타입과 참조형 데이터 타입 간의 형 변환을 할 수 있도록 해주는 매개체가 Wrapper Class 이다.
      객체 지향에서는 모든 것이 객체로 다뤄져야하는데, 자바의 기본형 데이터들은 편의성을 위해 이러한 객체 지향의 개념 밖에 존재한다.
      그러나 때로는 이것들을 객체로 다뤄야할 경우가 있는데, 이를 위해 존재하는 것이 래퍼 클래스이다.
  • https://velog.io/@bahar-j/String-클래스와-Wrapper-클래스

JAVA 다형성

Project Lombok

  • 반복되는 getter, setter, equals, toString 등의 메서드 작성 코드를
    어노테이션 기반으로 자동 생성해주는 자바 라이브러리
  • IDE에서 기능을 제공해주기도 하지만, 이 역시 번거로운 작업이 될 수도 있다
    • 애초에 코드가 자꾸 반복돼서 가독성이 떨어지고 복잡해진다
  • 장점
    • Lombok은 이를 어노테이션 만으로 사용 가능하게 해주고,
      컴파일 과정에서 실제 코드가 생성된다
  • 주의사항
    • 개발자마다 호불호가 갈리므로 프로젝트 리더의 성향에 따를 것
    • 편리성을 제공하는 라이브러리 일수록,
      API의 설명과 내부 동작을 제대로 숙지하여야 한다!

자바 패키지명이 javax가 된 이야기…

JWT

더티 체킹

  • Dirty : 상태 변화가 생겼는지
  • Checking : 검사하는것
  • JPA에서는 트랜잭션이 끝나는 시점에
    최초 조회 상태 기준으로 변화가 있는 모든 엔티티 객체를 DB에 자동 반영해준다!

    - update를 굳이 쓰지 않아도 된다
    - 최초 조회 당시에 스냅샷을 만들어두고,
    트랜잭션이 끝나는 시점에 비교하여 Update Query를 DB에 전달한다
    - 영속성 컨텍스트가 관리하는 Entity에만 적용된다
    - https://velog.io/@neptunes032/JPA-영속성-컨텍스트란
    - 준영속/비영속 상태의 Entity는 Dirty Checking 대상에 포함되지 않는다!
    - 값을 변경해도 DB에 반영되지 않는다
  • 일부 변경한 필드만 update 하고 싶을 땐
    • Dirty Checking은 기본적으로 전체 필드를 업데이트한다
      • 생성되는 쿼리가 같아 DB 입장에서 재사용 가능
    • @DynamicUpdate 를 선언하여 해결
  • https://jojoldu.tistory.com/415

메모

  • 모닥불 ASMR이랑 풀벌레 ASMR 같이 틀어놓으니 집중 잘 된다
  • 한글 함수명 실무에서도 사용하나?
profile
Stop thinking. Just do it.

0개의 댓글