aop(3)
-
[SpringBoot] Annotation을 이용해 Slack에 Error log 남기기
이번 프로젝트에서 인프라를 도맡았습니다. 배포한 개발 서버와 운영 서버의 로그를 CloudWatch에 파일로 관리하였습니다. 하지만 1) 모든 팀원이 AWS에 접속하여 로그를 확인하는 것은 번거롭다고 느껴졌습니다. 2) AWS lambda는 요금 폭탄이 터질 수 있어서(재귀 호출) 제가 속한 교육기관에서 지원하지 않는 서비스였습니다. 3) Error 레벨의 로그는 신속한 대응이 필요하다고 생각했으며, 모든 팀원에게 빠르게 공유될 수 있어야 한다고 생각했습니다. 따라서 사용중인 협업 툴 중 슬랙을 이용해 알림을 받도록 설정했습니다. Pull Request logback-slack-appender 처음에는 Logback 설정으로 에러 로그를 Slack에 전송했습니다. 하지만 가독성이 좋지 못하고, 사용자의..
2023.03.18 -
[DB 접근 기술] 트랜잭션 (2)
트랜잭션 문제 해결 - 트랜잭션 템플릿 앞서 트랜잭션 매니저를 통해 트랜잭션 추상화, 리소스 동기화를 얻는데에는 성공했다. 그 덕에 서비스 코드는 이제 JDBC 기술에 의존하지 않으며 트랜잭션 동기화 매니저 덕분에 커넥션을 파라미터로 넘기지 않아도 된다. 하지만 트랜잭션을 사용하는 로직을 살펴보면 다음과 같은 패턴이 반복되는 것을 확인할 수 있다. 트랜잭션 사용 코드 //트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //비즈니스 로직 bizLogic(fromId, toId, money); transactionManager.commit(status); /..
2022.05.28 -
AOP(Aspect Oriented Programming)
AOP? → 공통 관심사항을 분리하는 방식 공통 관심사항을 추출할 수 있는 이유에는 proxy(대리자)가 있다. 프록시는 런타임 위빙(Runtime Weaving)을 수행한다. 런타임 위빙이란, Runtime때 실제 객체를 가상의 객체로 적용시키는 과정이다. Spring에서는 이 런타임 위빙을 1) JDK Dynamic Proxy 2) CGlib Proxy 두가지 방법으로 구현한다. 두번째 방법인 CGlib(Code Generator Library)는, 이미 스프링이나 하이버네이트에 내장되어있다. DI로 주입받은 객체를 출력해보면 CGLIB이 생성한 가짜 객체가 등장함을 알 수 있다. 즉, memberService가 아닌 다른 객체가 Injection 되어있다. 타겟을 감싸는 프록시가 런타임에 생성되면,..
2022.03.02