[Spring AOP] 로그 추적기 개발(ThreadLocal)
·
Spring/AOP
요구사항 분석만약, 새로운 회사에 입사했는데, 수 년간 운영중인 거대한 프로젝트에 투입되었다. 전체 소스 코드는 수 십만 라인 이고, 클래스 수도 수 백개 이상이다.나에게 처음 맡겨진 요구사항은 로그 추적기를 만드는 것이다. 하물며, 애플리케이션이 커지면서 점점 모니터링과 운영이 중요해지는 단계이다. 특히 최근 자주 병목이 발생하고 있다. 어떤 부 분에서 병목이 발생하는지, 그리고 어떤 부분에서 예외가 발생하는지를 로그를 통해 확인하는 것이 점점 중요해지고 있다. 기존에는 개발자가 문제가 발생한 다음에 관련 부분을 어렵게 찾아서 로그를 하나하나 직접 만들어서 남겼다. 로그를 미리 남겨둔다면 이런 부분을 손쉽게 찾을 수 있을 것이다. 이 부분을 개선하고 자동화 하는 것이 나의 미션이다.  요구사항모든 PU..
Spring Pagination 연습
·
Spring/JPA
이번 포스팅에는 Spring Pagination에 대해 다뤄 볼 것이다. 구글, 네이버 카페, 커뮤니티 등 어떤 웹에서도 페이징 처리가 된 웹 형태를 자주 찾아볼 수 있다. 그렇다면 이렇게 페이징 처리하는 이유가 뭘까? 수많은 데이터가 DB에 존재한다고 했을 때, 페이징 처리를 하지 않고 모든 데이터들을 한 번에 뿌려준다면 해당 데이터들을 DB로부터 가져오는데 엄청난 시간이 소요될 것이다. 또한, 해당 데이터 자체를 들고 있어야 하기에 메모리에도 부담이 클 것이다. 하물며 사용자들이 그 수많은 데이터들을 다 보게 하는 것도 용이하지 못하다. 그래서, 모든 데이터들의 개수에 대한 기준을 만들어 해당 개수만큼 가져오는 페이징 형태를 사용하는 것이다. 페이징 처리를 적절히 활용하여 정렬 기준과 정렬 방식(오름..
Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 8
·
프로젝트/토이 프로젝트
이번 포스팅에서는 AWS S3 테스트와 API 명세서를 작성한 과정을 담는다. 우선, AWS S3를 사용하기 위해 MockS3를 사용한다. 그 이유는 S3에 테스트를 위해 생성한 파일들이 계속 저장되기도 하고 프리티어 계정에는 GET/POST 요청이 횟수 제한이 있기 때문이다. 따라서, 관련된 설정을 해줘야 한다. MockAwsS3Config 기존 AmazonS3 대신 MockAwsS3Config를 사용한다. 이때 사용되는 @Primary는 동일한 빈이 있을 때 우선순위를 설정해준다. @Configuration public class MockAwsS3Config extends AwsS3Config { @Bean @Primary @Override public AmazonS3 amazonS3Client() ..
Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 7
·
프로젝트/토이 프로젝트
이번 포스팅에서는 AWS S3에 사용자의 프로필 이미지를 CRUD(?)한 과정을 담는다. AWS S3가 뭘까? AWS Simple Storage Service의 줄임말로 Object Storage 개념이 적용되었다고 생각하면 된다. 파일을 저장하고 불러오는 작업이 RESTful API를 통해 간단하고 뛰어난 보안성을 자랑한다. 장점 거의 무제한에 가까운 용량이다.(물론 용량 제한도 설정할 수 있다.) 보안성이 아주 좋다. 저렴한 비용 플랫 구조를 사용한 빠른 탐색 높은 객체 가용성 개인적으로 AWS S3는 학부연구생을 하며 Object Storage 개념의 Ceph에 관한 논문을 작성했기에 친숙했다. Object Storage 관련해서는 아래 포스팅을 참고 바란다. https://hdbstn3055.ti..
Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 5
·
프로젝트/토이 프로젝트
이번 글에서는 Order, Item에 관한 CRUD 구현과 관련 통합 테스트를 담은 내용이다. 하지만, 시작하기전에 앞 글에서 수정한 내용이 있다. 1. SecurityConfiguration 수정 주문과 관련된 사항들은 이메일 인증이 된 사용자들이 이용하는게 좋을 것 같다는 생각이 들어 관련하여 적용했다. public class SecurityConfiguration { ... @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ ... http.authorizeHttpRequests( authorize -> authorize.requestMatchers(EXCLUDE_URL.stream() .map(AntPa..
Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 4
·
프로젝트/토이 프로젝트
이번 글은 이메일 인증을 구현한 내용이다. Google SMTP를 활용하여 구현하였고 Spring에서 제공하는 API를 사용하였다. 이메일 인증의 흐름 사용자는 회원가입 후 이메일 인증을 해야 기타 작업을 할 수 있다. 사용자는 서버에 사용자의 이메일로 인증 번호 전송을 요청한다. 서버는 랜덤 인증 번호를 생성한 뒤 인증 번호를 Redis에 저장한다. 사용자의 이메일로 해당 인증 번호가 전송한다. 클라이언트는 서버에 인증 번호에 대한 검증을 요청한다. 만약 인증번호와 Redis에 저장된 값이 같다면 true를 반환한다. 구글 SMTP 계정 설정 이메일 전송을 위해선 SMTP 설정을 해야하기에 구글 계정 설정을 해줘야 한다. 구글 로그인 -> 프로필 이미지 -> Google 계정 관리 -> 검색창에 "앱 ..