TIL - 0731

favicon.ico로 redirect 되는 현상

  • security가 적용되기때문에 ignore 설정해주면 됨
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring()
        .antMatchers("/h2-console/**")
        .antMatchers("/js/**")
        .antMatchers("/css/**")
        .antMatchers("/favicon.ico");
    }
  • 자원 요청에 대해서 모두 ignore 하도록
    • 위의 방법은 모든 필터에 대한 설정, 필터마다 설정하기위해서는 필터를 생성할 때 RequestMatcher를 생성해서 설정해주면 됨(processPath와 skipPath 지정할 수 있음)

인증서버 프로바이더마다 다른 인증 확인 방법 - Template 분리

  • 객체 사용 분산 효과
  • 서비스 프로바이더의 인증 확인 방식에 변경이 생겼을 때 개별적으로 대처 : 페이스북은 카카오, 네이버와는 다른 방식을 취하고 있음(https://developers.facebook.com/docs/graph-api/reference/v2.2/user)

리터럴로 정의하는 상수에서 enum 분리기준

  • 다른 곳에서 사용한다면 별도로 분리해두고 관리하기
  • 외부에서 파라미터로 넘겨줄 때 값을 제한하고싶다면 enum으로 분리하기

싱글턴 사용하기 - 인증서버에 액세스토큰 verify Template 객체

  • 착각한 지점 : 여러 사람이 한꺼번에 사용할 수 있기 때문에 동시성에 대한 제어를 해야하는게 아닌가 생각했음
  • 바로 잡은 생각 : Template 객체가 상태값을 가지지 않기 때문에 동시성 제어를 할 필요가 없음 - 해당 객체의 메소드를 각각이 호출 했을 때 각각 스택 프레임이 생김 -> 스택은 쓰레드 간 공유하지않는 메모리 영역이므로 같이 사용해도 무관함(스프링빈과 동일)

객체 분리 - JWT 쿠키 매니져 생성

  • HttpServletRequest와 HttpServletResponse에서 쿠키를 빼오거나 쿠키를 설정해주는 역할을 함
  • 어떤 쿠키(HttpOnly 혹은 일반 쿠키)를 설정해줄지 내부적으로 정할 수 있음
  • 쿠키에 대한 변경이 생기더라도 한 곳으로 변경점을 모았기 때문에 코드 수정하기가 편함 : 필요한 쪽에서는 쿠키 매니져(@Component)를 인젝션(@Autowired) 받아 요청 메세지를 보내어 쿠키를 설정하도록 하면 됨

RDBMS

트랜잭션

  • 단일 쿼리로 해결되지않고, 복수 쿼리로 처리해야할 때 하나의 작업 단위로 만듦
    • 단일 작업으로 만드는 이유는 모든 쿼리 실행이 성공했을 때 데이터베이스에 반영되고, 그렇지 않을 경우 적용되지않도록 하기위해 : 원자성

Inno DB

  • RDBMS에서 데이터 삽입, 추출, 수정, 삭제의 동작을 수행하는 데이터베이스 컴포넌트 중 하나, 트랜잭션을 지원하는 컴포넌트(데이터베이스 엔진 또는 스토리지 엔진)
  • 간단하게 트랜잭션을 사용할 수 있는 테이블 구조, 반대로는 MyISAM(기본)이 있음
    • 스프링에서 @Transactional을 사용하면 트랜잭션 처리를 해주는데, 어플리케이션 환경에서 트랜잭션 처리를 해주는 것인듯(Inno DB로 만든게 아니라 - 트랜잭션 처리를 데이터베이스에서 하는게 아니라 어플리케이션에서 먼저 처리하고? 그런데 데이터베이스에 이상이 생겼을 때 트랜잭션이 지원되어야 안전한 것 아닌가? 논리적으로 만들어낸 것이 아니라 실제로 그런 작업을 하게 Inno DB를 생성하는 것인가)

트랜잭션 특성

  1. 원자성 : 트랜잭션 모든 쿼리가 성공해야 Commit되고, 중간에 하나라도 실패할 경우 이전 상태로 Rollback됨, 하나로 묶인 것은 하나로 보겠다는 것
  2. 지속성 : Commit(데이터 조작 완료)을 하면 영구적으로 저장됨
  3. 일관성 : (정확하게 이해가 되지않으므로 계속해서 공부하고 실습하면서 이해해볼 것)
  4. 고립성 : 동시에 동일한 데이터를 조작할 때 모순 없이 처리를 보장해야함
    • 고립성을 보장하기위해 설정할 수 있는 것들이 있음 : 어떻게 처리를 할 것인가에 대해(알아볼 예정)

자료구조

다시 공부하자! 재밌게 할 수 있을 것 같음

  • 이틀 전에 배운 그래프를 되짚어보면서 자료구조를 떠올릴 때 그림을 먼저 떠올리게 되었음
    • 이전에는 코드로, 특징으로 먼저 생각했다면 이제는 그림을 먼저 떠올릴 것 같음 : 데이터를 어떻게 저장하는가 나열할 것인가 나열하지않고 관계를 만들어 줄 것인가 나열한다면 연속적으로 나열할 것인가 아니면 논리적으로 연결만 시켜둘 것인가