전체 글 31

[Spring Boot] Spring AOP를 활용한 Logging

기본적으로 함수 시작 전, 종료 후, 에러 발생 후 시점을 기준으로 자동으로 로그를 생성하도록 Aspect를 만들어서 설정할 수 있습니다. execution() 안에서 로그를 자동으로 남길 범위를 정할 수 있습니다. 로깅이 필요하지 않은 함수들은 @NoLogging 어노테이션을 만들어서 처리할 수 있습니다. (민감 정보를 가지고 있거나 로깅이 필요하지 않는 함수 등) Advice 실행 시점 설명 @Before 함수 시작 전 함수가 속한 클래스 이름, 함수 이름, 함수로 들어온 파라미터(args) 등을 로그로 남깁니다. @AfterReturning 함수 시작 후 함수가 속한 클래스 이름, 함수 이름, 함수가 반환한 값(result) 등을 로그로 남깁니다. @AfterThrowing 에러 발생 후 함수가 속..

[Spring Boot] 자주 쓰이는 Spring Boot Annotation (Controller, Service, Model)

🚀 Controller Annotation Annotation 영역 Description @RestController Class Spring의 컴포넌트 스캔 대상이 되도록 하고 HTTP 요청과 응답을 자동으로 매핑되도록 하는 등 Spring에서 Controller로 동작할 수 있도록 기본적인 동작을 담고있는 어노테이션입니다. @Controller와 @RequestBody가 합쳐진 어노테이션으로 RESTful 웹 서비스에서 주로 사용됩니다. @RequiredArgsConstructor Class Spring 4.3부터는 @Autowired를 통한 의존성 주입보다 생성자를 통한 의존성 주입을 권장하고 있습니다. @RequiredArgsConstructor를 사용하면 생성자 코드를 따로 적지 않아도 됩니다. ..

[Spring Boot] @ExceptionHandler, @ControllerAdvice (Exception 공통 처리)

🚀 Exception 공통 처리 보통 예외는 3가지 방법으로 처리할 수 있다. 예외 복구 : 예외가 발생하면 예외 상황에 알맞게 처리하여 복구한다. (try, catch) 예외 회피 : 예외를 직접 처리하지 않고 예외를 상위 메소드에 위임한다. (throw) 예외 전환 : 예외를 위임하되 발생한 예외를 그대로 위임하는 것이 아닌 적절한 예외로 전환하여 위임한다. (restTemplate.doExecute) 이때 예외 복구에 대한 범위는 아래와 같다. 메소드 영역 : 메소드 영역은 종속된 복구 기능으로 단순히 try, catch 사용하면 된다. 클래스 영역 : 클래스 내 공통 예외 복구는 @ExceptionHandler를 사용하면 된다. 전역 영역 : 여러 클래스의 공통 예외 복구는 @ControllerA..

[Spring Boot] Filter, Interceptor, AOP 차이 및 정리

Spring Boot를 사용하면 애플리케이션의 공통 기능을 개발하고 관리하는데 매우 효과적인 다양한 기능을 제공한다. 예를들어 로그인 관련 (세션 체크) 처리, 권한 체크, XSS(Cross Site Script) 방어, PC와 모바일웹의 분기처리, 로그, 페이지 인코딩 변황 등이 있다. 이러한 기능 중에는 Filter, Interceptor, Aspect-Oriented Programming (AOP) 등이 있다. 각각의 기능은 애플리케이션의 요청 처리 과정에서 앞, 중간, 뒤에 추가하여 특정한 작업을 수행하도록 해주며, 코드의 재사용성과 모듈성을 높여준다. (모든 페이지마다 공통 업무에 관련된 코드를 작성하면 중복된 코드가 많아지고 서버에 부하를 줄 수도 있으며 소스 관리도 어렵다.) Intercep..

[Linux] SSH pem key 생성 (EC2에 SSH 연결하기)

AWS EC2에 파일을 업로드해야하는 경우가 생겼다. EC2 키페어를 사용하여 클라이언트에서 접근할 수도 있지만 EC2 인스턴스 키페어는 관리자가 따로 있고 권한이 없어 생성이 어렵다. 이런 경우 클라언트에서 생성한 Public key를 이용하여 EC2에 SSH 접근이 가능하다. 방법은 아래와 같다. 1. Client에서 SSH 로그인을 위한 RSA(공개키-개인키)를 생성한다. 2. Server에 authorized_keys 파일을 생성한다. 3. Client에서 Public key를 복사한다. 4. Server의 authorized_keys에 붙여 넣는다. 5. Client의 Private Key를 .pem 확장자로 변경한다. 6. Client에서 key 테스트를 진행하여 연결을 확인한다. 구체적인 방..

[Spring Boot] 정적 파일 로드 시 URL에 Jsessionid 붙는 경우 해결

프로젝트에서 배포된 QA 환경의 로그인 화면이 최초 로딩 시에 화면 깨짐 현상이 발생했다. 새로고침이나 재접속할 경우에는 정상적으로 로딩이 되는 이상한 현상이 지속됐다. 1. 원인 파악 😵 처음에는 css의 경로가 문제라 판단되어 절대경로로도 바꾸고 '/'을 붙여도 보며 시도해보았으나 현상은 동일했다. 한 시간동안 삽질한 끝에 원인을 파악했는데, 개발자 도구 (F12)로 HTML의 Element를 보니 URL 뒤에 jsessionid가 붙어있었다!! 이는 Tomcat 서버에서 Spring Framework에서 태그를 사용할 경우 최초 호출시 URL에 Jsessionid가 붙여지는 현상 때문이였다. 이는 버그가 아닌 의도적으로 설계된 것이다. (Tymeleaf 템플릿 엔진을 사용중이였다) 그럼 왜 이렇게 ..

[Trouble Shooting] HTTP 리다이렉션 시 POST, PUT, DELETE (CUD)가 GET으로 바뀌는 문제점

HTTP의 POST, PUT, DELETE의 경우 HTTPS로 리다이렉션 시 GET으로 바뀐다. 이는 HTTP의 특성인데, 이를 알게된 계기와 해결 방법을 아래에 기술한다. 1. 문제 발생 🤬 쿠버네티스 각 Pod의 서비스 간 API 통신을 테스트 하기 위해 Postman으로 CRUD API 테스트를 진행했다. (Local에 WAS를 띄우고 Pod에 배포된 다른 서비스를 Postman으로 콜하는 방식 ) 그러나 Postman에서 HTTP로 POST, PUT, DELETE 요청할 경우 405로 Response 받고, GET의 경우 정상적(200)으로 Response를 받았다. Ingress Controller의 로그를 확인하니 HTTP의 POST, PUT, DELETE의 요청들이 HTTPS의 GET로 변경..

Trouble Shooting 2023.10.23

[Spring Batch] Spring Batch 5.0 migration Guide - initial Database schema updates

Spring Batch 5.0 migration Guide - initial Database schema updates Spring Batch가 5.0으로 버전 업하면서 여러 사항들이 변경 됐다. 자세한 내용은 아래 첨부한 링크에서 확인! 그 중 Spring Batch의 메타 데이터 저장 테이블의 Schema가 변경되어 Migration하거나, 초기 시작일 경우 생성하는 방법에 대해 기술하고자 한다. Spring Batch가 제공하는 배치 메타 데이터 저장 테이블에 대한 정보는 아래 첨부한 링크에서 확인! 1. Schema Create 🚀 Spring Batch 작업을 처음 할 경우 Database에서 Schema에 대한 Create 쿼리는 아래와 같다. (Oracle 기준임. 다른 DBMS의 경우 아래..

[AWS] CloudWatch란?

CloudWatch란? Amazon CloudWatch는 AWS 리소스와 AWS에서 실시간으로 실행 중인 애플리케이션을 모니터링하는 서비스입니다. 지표를 감시해 알림을 보내거나 임계값을 위반한 경우 모니터링 중인 리소스를 자동으로 변경하는 경보를 생성할 수 있습니다. 다양한 이벤트들을 수집하여 로그파일로 저장합니다. ex) 경보의 예로 인스턴스 중지, Auto Scaling, Amazon SNS 작업 시작, 종료 등이 있습니다. 이벤트 : S3 버킷에 파일 업로드, 삭제, 접근 거부, RDS 접속 시도 등 CloudWatch 용어 정리 Namespace : 지표를 측정하기 위한 AWS 서비스 (EC2, RDS 등) Metric(지표) : 측정하고자 하는 지표 (CPU 자원 사용률 등) Dimension ..

AWS 2023.08.02

[AWS] CloudFront(CDN)이란?

CloudFront란? CloudFront는 AWS에서 제공하는 CDN 서비스입니다. 캐싱을 통해 사용자에게 좀 더 빠른 전송 속도를 제공함을 목적으로 합니다. CloudFront는 전 세계 이곳저곳에 Edge Server(Location)을 두고 Client에 가장 가까운 Edge Server를 찾아 Latency를 최소화시켜 빠른 데이터를 제공합니다. Origin Server : 원본 데이터를 가지고 있는 서버입니다. 보통 AWS에서의 Origin Server는 S3, EC2, Instance 입니다. Edge Server = Edge Location : AWS에서 실질적으로 제공하는 전 세계에 퍼져있는 서버입니다. Edge Server에는 요청 받은 데이터에 대해서 같은 요청에 대해서 빠르게 응답해..

AWS 2023.08.02
반응형