목표 일반적으로 Service 인터페이스와 ServiceImpl은 1:1인 경우가 많은데, 굳이 인터페이스와 구현체를 나눠놓은 이유가 뭔지에 대해서 작성해보기! 내용 많은 프로젝트에서 MVC 구조를 많이 채택하며, Service코드를 작성할 때 Service와 ServiceImpl로 작성하는 경우가 많은데 관습적으로 이렇게 하는경우가 많다보니 “대부분 이렇게 하던데?”라는 생각으로 따라하게 되었는데 문득 궁금증이 들게 되었습니다. 사실 Service와 ServiceImpl은 1:1인 경우가 대부분이어서 오히려 작성해야하는 코드만 늘어난다는 생각이 문득 들었습니다. 일반적인 service, serviceImpl 코드 interface ProductService { List getProductList(); ..
Overview outbox patten 구현해보기- (1) 이벤트기반 환경에서 DB상태변경과 함께 이벤트를 발생시켜야하는 경우가 있습니다. 예를들어 쇼핑몰에서 주문, 상품, 알림 서비스로 나누어져 있다고 생각했을 때, 주문이 완료되면 상품 재고 hoony-devblog.tistory.com 지난 포스팅에 이어서 outbox pattern중 Polling publisher pattern을 구현해 보겠습니다. 사실 그림처럼 구현난이도는 어렵지 않습니다. 다음 순서대로 구현 해 보았습니다. 주문이 들어올 때 한 트랜잭션 안에서 order 테이블, outbox 테이블을 insert한다. outbox 테이블을 polling한다. outbox 테이블의 payload를 aws sqs로 전송한다. order 저장 @..
Overview 이벤트기반 환경에서 DB상태변경과 함께 이벤트를 발생시켜야하는 경우가 있습니다. 예를들어 쇼핑몰에서 주문, 상품, 알림 서비스로 나누어져 있다고 생각했을 때, 주문이 완료되면 상품 재고가 감소되고 판매자에게 알림이 전송되어야 한다는 요구사항이 있다고 가정해 보겠습니다. 주문이 완료되면 ‘주문완료됨’이라는 메시지 발행과 함께 상품 , 알림 서비스는 ‘주문완료됨’ 이라는 이벤트를 구독하여 비즈니스 로직을 처리할 수 있을 것입니다. 모놀리틱 환경이라면 이벤트 구독으로 처리하지 않고, 로직을 트랜잭션으로 묶여 ACID를 보장받을 수 있겠지만, 이벤트기반 환경에서 주문서비스 주문로직이 이 완료된 후 메시지를 발행한다면 생각 할 점이 있습니다. 데이터의 일관성을 위해서는 트랜잭션이 커밋될 때 메시지..
[Spring] Cache적용하여 속도 개선하기. 적용하게 된 계기 회사내에 프로젝트를 하다가 상품등록시에 상품마다 매번 Category, Brand 등의 테이블을 조회 해와서 유효성 검증을 하고 있었다. 이걸 개선해보고 싶어서 캐싱을 적용해 봤고 포 hoony-devblog.tistory.com 지난번 포스팅때 간단하게 JCache를 이용하여 cache를 적용해 보았는데, 요번 포스팅에는 간단하게 캐시 관련해서 eventListener를 추가해서 로그를 한번 찍어보려고 한다. SimpleCacheEntryListener 구현 @Component class SimpleCacheEntryListener : CacheEntryCreatedListener, CacheEntryExpiredListener, Lo..
적용하게 된 계기 회사내에 프로젝트를 하다가 상품등록시에 상품마다 매번 Category, Brand 등의 테이블을 조회 해와서 유효성 검증을 하고 있었다. 이걸 개선해보고 싶어서 캐싱을 적용해 봤고 포스팅을 해보려고 한다. 캐시할 데이터 업데이트가 자주 일어나지 않고, 자주 조회하는 Category, Brand, Keyword를 캐시해서 사용하려고 한다. 캐시를 하면 매번 DB에서 조회하지 않고, 빠르고, 네트워크를 타지 않기 때문에(Local cache 한정) 효율적으로 가져올 수 있다고 생각했기 때문이다. Local cache VS Global cache 캐시는 크게 Local Cache와 Global Cache로 나눌 수 있는데, 그중 Local Cache를 적용하기로 했다. Local Cache..
Resource 실시간 반영하기 Spring boot + Intellij로 개발하면 매번 스크립트랑 html 고칠때마다 서버 restart 해야되서 정말 빡친다. 저장하고 새로고침하면 바로 반영될 수 있도록 해보자. 1. Maven에 의존성 추가 org.springframework.boot spring-boot-devtools true pom.xml안에 위 dependency를 추가해주자. 2.application.properties에 reload 설정 추가 spring.devtools.livereload.enabled=true application.properties에 해당 설정을 넣어주자. 3. IntelliJ 옵션 - registry 수정 SHIFT 버튼을 2번 연속해서 누르면 검색창이 나온다. R..
- Total
- Today
- Yesterday
- 제네릭(Generic)
- 19236
- 카카오 코딩 테스트
- DP
- 01타일
- 반례
- for of
- 청소년상어
- 39회차
- RGB거리
- spring cache
- yyyy-MM-dd
- 커링
- 1629
- 가장 큰 수
- 삼각달팽이
- vaild
- java
- 키패드 누르기
- 카카오 인턴십
- 오버로딩
- 문자열 압축
- javascript
- 백준
- 삼성 코테
- 제네릭 타입
- 삼성기출
- local cache
- 날짜 유효성
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |