본문 바로가기

728x90
반응형

Spring 정리

(88)
JPA를 이용해 History 테이블 자동 생성하기 개요 JPA를 이용해 생성시간, 수정시간, 생성자, 수정자를 자동으로 등록하는 방법을 공부했었습니다. 이번에는 JPA를 이용해서 특정 테이블을 저장할 때 히스토리를 같이 저장하도록 하겠습니다. history 테이블을 과거 이력을 확인할 때 용이합니다. 알림톡을 보냈거나, 사용자 권한이 변경된 기록들이 남아 있어 과거 이력을 추적할 수 있습니다. 만약 순수하게 만들어준다면 같은 데이터를 2번이나 save()해야 하는 번거로움이 있습니다. 하지만 @PrePersist, @PreUpdate를 사용하면 저장과 수정이후 JPA동작을 추가할 수 있습니다. 코드 작성하기 1. ApplicationContext로 직접 빈을 호출하는 유틸 클래스를 만든다. Entity에 Repository 주입이 불가능합니다. 따라서 ..
메세지 큐 *메세지 큐(Message Queue) 메시지 큐는 시스템이 처리할 일을 차례대로 넣어놓고 시스템이 하나씩 작업을 가져가 처리하도 다음 작업을 또 가져올 수 있는 Store-and-Forward 방식의 시스템이다. 이런 의미에서 보면 job scheduler와 유사한 역할을 한다. *pub/sub 구조 Pub/Sub 모델은 비동기 메시징 방식이다. 이메일 발신에서 사용하는 To:, CC:처럼 특정 수신자를 정하는 것이 아니라, Publlish 하는 Topic(토픽)을 Subscriber(구독자) 신청한 모든 수신자에게 메시지를 보내는 방식이다. 수신자는 송신자의 IP 주소나, 특별한 정보를 알 필요가 없이 원하는 주제만 사전에 구독 신청을 하면 된다. 따라 송수신자는 loosely coupled로 엮여있..
샤딩 샤딩(sharding)이란 하나의 거대한 데이터베이스나 네트워크 시스템을 여러 개의 작은 조각으로 나누어 분산 저장하여 관리하는 것을 말한다. imageKey를 가지고 여러대의 5대 서버에서 연산 후에, 매칭되는 곳에 저장한다. yyyymmdd 날짜별로 월별, 연도별로 구성해서 데이터를 기준으로 나누어서 넣는다. 데이터에서 기준을 잡고 분류하는 방식과 정책을 샤딩이라고 한다. 클러스터링은 모든 데이터이 정합성이 맞아야 하기 때문에 많은 비용이 발생할 수 있다. 샤딩은 모든 데이터를 들고있지 않고 범위를 정해서 규칙에 따라 가지고 있다. 꼭 샤딩이 유리한 것은 아니고 서비스 유형에 따라서 샤딩이나 클러스터링을 사용한다. *샤딩 종류 모듈러 샤딩(Modular Sharding) 레인지 샤딩(Range Sha..
DNS 일반적인 www.mystyle.com 주소를 도메인 이름이라고 하며, DNS는 도메인 이름을 IP로 변환하여, 브라우저가 인터넷 자원을 이용할 수 있도록 한다. 스케일 아웃 방식을 사용하여 서버가 여러대가 있다면, 각 서버는 ip, servername(host, hostname)을 가진다. 도메인이 같은 경우, host 이름을 다르게 설정하여 각각 구체적인 서버에 접근할 수 있도록 한다. ex) hostname.domain.com IANA가 port 번호를 관리하는데, 80은 HTTP 전송을 위한 포트로 정해져 있다. 구체적으로 정해져 있는 포트와 역할은 well-known이라고 하고 다음 문서에서 확인 가능하다. https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED..
웹서비스 확장전략 웹 서비스 확장전략 유형 - SI 개발 (고객사 시스템 특정 부분만 진행) - 솔루션개발 (db접근제어, 암호화, B2B) - 서비스개발 (회사-B2C, 카카오톡) : 사용자들이 많기 때문에 고가용성을 고려해야한다. (*서비스개발이 아니면, Spring Cloud가 필요하지 않다.) * 스케일 업, 스케일 아웃 - 스케일 업 스케일업은 1대의 성능을 최대로 끌어높이기 위한 전략이다. 하지만 무중단 배포에는 취약한대, 서버가 1대이기 때문에 업데이트를 하려면 서버를 껐다가 켜야하므로 중간에 서비스가 끊긴다. -스케일 아웃 여러대의 서버가 트래픽을 분산해서 처리한다. 안정적인 장애대응 처리가 가능하다. 블루 그린 배포는 여러 대의 서버가 있는 스케일 아웃 방식에서 무중단 배포가 가능하다. 이전 버전(befo..
AuthToken 사용하기 이전에는 Session으로 구성했지만, 이제는 JWT 토큰을 사용하여 시큐리티를 구성한다. 핵심은 Bearer Token을 Client에 주도록 설정하는 것이며, 로그인할 때 Token을 검사하는 것이다. @Override protected void configure(HttpSecurity http) throws Exception { JWTLoginFilter loginFilter = new JWTLoginFilter(authenticationManager(), spUserService); JWTCheckFilter checkFilter = new JWTCheckFilter(authenticationManager(), spUserService); http .csrf().disable() .sessionM..
JWT 토큰 서버에서 인증된 사용자가 인증을 유지해주는 방법은 보통 세션을 사용한다. 서버 세션을 사용하면 인증된 사용자는 매우 편리하게 서비스를 이용할 수 있고, 대부분 웹 애플리케이션 서버가 세션을 지원하기 때문에 편리하다. 하지만, 서버를 여러대 둘 경우(scale out), 같은 사용자가 서로 다른 도메인의 데이터를 요청할 경우, (SSO)에는 세션을 유지하기 위한 비용이 매우 커진다. MSA는 각 서비스별로 각각의 서버를 가지고 있다. 한쪽에서 로그인을 하면 다른 쪽에서도 연속성 있게 로그인 정보를 유지해야 한다. 세션을 사용하는 경우 서버는 request 사용자에 대해 서버에 저장된 세션을 구분해서 인식해야 한다. 여러대의 서버라면 세션을 공유하거나 복사하거나 하는 전략이 필요하다. 따라서,. 서버에 사용..
임시권한 부여하기 임시권한 부여를 확인하기 위해서, SecurityInterceptor의 내부 작동방식을 다시 한번 짚어보고, 임시권한을 추가해야 할 위치를 확인한다. FilterSecurityInterceptor, MethodSecurityInterceptor 2개의 Interceptor는 각각 invoke 메서드가 작동한다. public Object invoke(MethodInvocation mi) throws Throwable { InterceptorStatusToken token = super.beforeInvocation(mi); Object result; try { result = mi.proceed(); } finally { super.finallyInvocation(token); } return super...

728x90
반응형