본문 바로가기

Spring&Spring Boot14

(Spring 서비스 추상화) 서비스 추상화란? 사용자 레벨 관리 기능 예시 Portable Service Abstraction 서비스 추상화 사용방법과 형식은 다르지만 기능과 목적이 유사한 기술이 존재한다. 환경과 상황에 따라 기술이 바뀌고, 그에 따른 API를 사용하고 다르게 접근해야 한다는건 매우 피곤한 일이다. 사용자 레벨 관리 기능 추가 예제 요구사항 사용자의 레벨 (숫자가 클수록 높은 레벨) - BASIC(1) : 처음 가입 레벨. 50회 이상 로그인시 업그레이드 - SILVER(2) : 30번이상 추천받을시 업그레이드 - GOLD(3) : 최고레벨 사용자 레벨의 변경 작업은 일정 주기로 일괄 진행. 작업 전에는 기준을 충족하였더라도 레벨이 바뀌지 않음. Level Enum 추가 public static final int BASIC=1 과같이 상수 값으로 정의하여 쓰지.. 2020. 7. 23.
(Spring) Spring Security란? 개념 및 구조 Spring Security https://spring.io/projects/spring-security Spring Security Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements spring.io Spring.io에서 설명한 Spring Security : Spring 기반 어플리케이션에서 유연하게 커스터마이징 가.. 2020. 6. 16.
(Spring / Design pattern ) 템플릿 메소드 패턴, 전략 패턴 (Spring / Design pattern) 템플릿 메소드 패턴, 전략 패턴 템플릿 메소드 패턴과 전략패턴을 적용하기 전에 선행 되어야 할 중요한 작업은 고정된 작업 흐름을 갖고 있으며, 자주 반복되는 코드가 있다면 변하는 부분과 변하지 않는 부분을 정의 하는 것이다. 위 작업이 잘 선행되어야 불필요한 코드의 중복을 줄이고, 확장에도 유연한 이 패턴들을 적용할 수 있다. 템플릿 메소드 패턴 (Template Method Pattern) 상속을 통해 기능을 확장해서 사용한다. 변하지 않는 부분은 슈퍼클래스에 두고 사용하고, 변하는 부분은 추상 메소드로 정의하여 각 서브클래스에서 오버라이드하여 새롭게 정의해 사용하도록 하는 것이다. 장점: 공통되는 부분의 기능을 한곳에서 정의하여 코드의 중복을 제거하고, .. 2020. 5. 12.
(Spring/Redis/@Cacheable) Spring Cacheable로 캐싱기능 적용 Spring Redis @Cacheable Spring Cacheable 쿠팡 메인페이지의 상품섹션 일부입니다. 유저 만족도에 중요한 응답속도를 높히기 위해 여러 영역에 여러방법으로 캐시가 적용되어 있을 것으로 예상해봅니다. Spring 환경에서는 캐시적용에 Spring에서 제공하는 @Cacheable 인터페이스를 사용할 수 있습니다. @Override @Cacheable(value = "example", keyGenerator = "customKeyGenerator", cacheManager = "cacheManager") public List example(Param p1, Praram p2) ... } : 위 설정으로 특정 메소드, 파라메터 기반으로 캐시를 생성합니다. ex) 상품목록 파라메터를 기.. 2020. 3. 21.
(Spring Controller Logging) Spring에서 http request 로깅하기 - 2 https://lion-king.tistory.com/entry/Spring-http-request-logging-with-aop-1 (Spring Controller Logging) Spring에서 http request 로깅하기 - 1 Spring Controller Logging - Spring에서 http request 로깅하기 @GetMapping("/{code}") public ResponseEntity example( @PathVariable(name = "code") String code { final String requestUri = request.ge.. lion-king.tistory.com 이전 글에서 AOP를 활용하여 http request를 로깅하기로 결정하였습니다. AOP에 .. 2020. 2. 21.
(Spring/Spring Boot) transactional annotation 속성 격리 isolation @Transactional isolation 옵션 종류 및 설명 * Isolation (= 격리) : 트랜잭션의 격리 수준을 설정하는 속성 사실 @Transacitonal의 속성일 뿐만 아니라 기본적으로 트랜잭션은 4단계의 격리 수준이 존재합니다. 이 격리수준을 설정하는 속성이 isolation 속성 입니다. Isolation Level Level 1. READ UNCOMMITED (커밋되지 않은 읽기) : Dirty Read / Non-repeatable read / phantom read 발생가능 Level 2. READ COMMITED (커밋된 읽기) : Non-repeatable read / phantom read 발생가능 Level 3. REPEATABLE READ (반복 가능한 읽기) : ph.. 2020. 2. 19.
(Spring/Spring Boot) transactional annotation 속성 전파 propagation @Transactional 이란? : https://lion-king.tistory.com/3?category=854359 (Spring Boot) @Transactional 이란? / @Transactional에 대하여 @Transactional StackOverflow 질문중 UserNameNotFoundException 발생시 delete method가 실행되지않는다는 질문에 답을 하였습니다. https://stackoverflow.com/questions/52619924/how-to-execute-transaction.. lion-king.tistory.com 이전글과 이어서 @Transactional을 사용할 때 고려해야 할 속성들에 대해 알아보겠습니다. * Propagation (= 전파) :.. 2020. 2. 1.
(Spring AOP) AOP란? AOP 핵심 간단 정리 Spring AOP / AOP AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍 Aspect : 모듈화 한 것. 주로 부가기능을 모듈화함. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. ) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능 PointCut : JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음 Spring에서 AOP구현은 프록시.. 2020. 1. 9.
(Spring Controller Logging) Spring에서 http request 로깅하기 - 1 Spring Controller Logging - Spring에서 http request 로깅하기 @GetMapping("/{code}") public ResponseEntity example( @PathVariable(name = "code") String code { final String requestUri = request.getRequestURI(); log.info(LogHelper .getMessageWithPrefix("Request URI : " + requestUri + " | code : " + code)); ... 요청을 처리할 때 호출되는 Controller Method의 최상단 부분 코드입니다. log.info(LogHelper.getMessageWithPrefix("Reques.. 2020. 1. 6.