[StudyWithMe] 유저의 사업자 검수 요청을 처리하며 - 1
·
프로젝트/StudyWithMe
이번 포스팅 및 다음 포스팅에서는 유저의 사업자 검수 요청과 관련된`StudyWithMe` 프로젝트에서의 `ApplicationEventPublisher` 사용`ApplicationEventPublisher` 사용과 관련된 테스트 코드에서 `@Transactional`를 제거과정에 관해 설명하려고 한다.  ApplicationEventPublihser우선, `ApplicationEventPublisher`가 뭘까? `ApplicationEventPublisher`Spring의 `ApplicationContext`가 상속하는 인터페이스 중 하나디자인 패턴중 하나인 옵저버 패턴(Observer Pattern)의 구현체옵저버 패턴객체의 상태 변화를 관찰하는 옵저버들의 목록을 객체에 등록하고 상태 변화가 있을때..
[AWS] ECR + ECS + ALB + Route53 + Spring + Github Actions - 2
·
DevOps/AWS
우리는 저번 포스팅에서 네트워크 구성까지 진행해 보았다. 이제는 `ALB`와 Route53을 이용한 인증서 설정을 구현해보자.  로드 밸런서를 사용하는 이유는 뭘까?앞 포스팅에서 ECS 클러스터 및 서비스를 생성하며 느낄 수 있었겠지만,`AWS ECS Fargate` 사용시 아주 쉽게 무중단 배포가 가능해지며 원하는 태스크, 컨테이너, 서비스를 생성할 수 있다. 즉, `Scale-Out`이 굉장히 간단하게 구현이 된다는 것을 알 수 있다. 하지만, `Scale Out`만 잘돼선 의미가 없다. 결국 다양한 서비스 및 컨테이너가 효율적으로 사용이 되며, 트래픽 분산이 되고, 무중단 배포를 구현하려면`ALB`와 같은 로드 밸런서가 필요하다.  만약, Spring 서버를 `Scale-Out`을 했다고 가정하자...
[AWS] ECR + ECS + ALB + Route53 + Spring + Github Actions - 1
·
DevOps/AWS
사이드 프로젝트에 참가하게 되어 기존의 `EC2`를 사용한 방법대신 `ECS`를 사용한 배포를 진행했다.  우선, `Amazon ECS on Fargate`가 뭘까?AWS Fargate는 EC2 인스턴스와 달리 서버리스 방식으로 Amazon ECS에서 컨테이너를실행할 수 있도록 도와주는 서비스이다. Amazon ECS on Fargate를 사용하면 컨테이너를 실행하기 위해 가상 머신 서버의 클러스터를`프로비저닝`하거나 구성하고,  관리할 필요가 없다. 또한, 서버 사용량을 고려하여 유형을 선택하거나, 클러스터를 조정해야 할 시점을 고민하거나 클러스터 패킹을최적화 할 필요가 없어지는 AWS 컨테이너 생성 및 관리 서비스이다. 무중단 배포(블루/그린, 롤링)도 알아서 해주기에 굉장히 편리하다는 장점이 있다...
[Spring AOP] 로그 추적기 개발(ThreadLocal)
·
Spring/AOP
요구사항 분석만약, 새로운 회사에 입사했는데, 수 년간 운영중인 거대한 프로젝트에 투입되었다. 전체 소스 코드는 수 십만 라인 이고, 클래스 수도 수 백개 이상이다.나에게 처음 맡겨진 요구사항은 로그 추적기를 만드는 것이다. 하물며, 애플리케이션이 커지면서 점점 모니터링과 운영이 중요해지는 단계이다. 특히 최근 자주 병목이 발생하고 있다. 어떤 부 분에서 병목이 발생하는지, 그리고 어떤 부분에서 예외가 발생하는지를 로그를 통해 확인하는 것이 점점 중요해지고 있다. 기존에는 개발자가 문제가 발생한 다음에 관련 부분을 어렵게 찾아서 로그를 하나하나 직접 만들어서 남겼다. 로그를 미리 남겨둔다면 이런 부분을 손쉽게 찾을 수 있을 것이다. 이 부분을 개선하고 자동화 하는 것이 나의 미션이다.  요구사항모든 PU..
[QueryDSL] QueryDSL이란?
·
Spring/JPA
QueryDSL이란? 우선, DSL은 Domain Specific Language의 줄임말이다. 뜻은 특정 영역에 특화된 언어이다. 그렇기 때문에 QueryDSL은 쿼리 생성에 특화된 프레임워크이다. 우리가 QueryDSL를 사용하면 좋은 점이 무엇이 있을까? 그것에 관한 설명을 하기 전에 JPA와 JPQL에 관한 문제점에 대해 잠깐 알아보자. JPA JPA는 객체지향 어플리케이션과 RDBMS 사이의 패러다임 불일치를 해결해주는 역할을 하는 프레임워크이다. JPA 덕분에 우리는 객체지향 관점으로 개발할 수 있게 되고 JPA 프레임워크는 자동으로 SQL 쿼리문을 생성해준다. SQL문이 JPA에 의해 자동으로 생성되기에 개발자는 SQL 관점에서 프로그래밍을 하지 않아도 된다. 하지만, 그렇다하더라도 완전한 ..
[Spring] Spring에서 로그를 설정하는 방법
·
Spring/유용한 정보
로그란?컴퓨터의 처리 내용이나 이용 상황을 시간의 흐름에 따라 기록개인용 컴퓨터 통신에서 통신 내용의 기록, 그 파일을 로그 파일통나무 목선 log on(승선), log out(하선)으로 유래목적시스템 보안이나 유지보수 목적사고가 발생했을 때 데이터의 복원이나 사고 원인의 규명에 도움해킹 등의 사건이 발생했을 때, 로그 파일을 분석하여 사건의 원인 파악로그를 설정하기에 앞서 로그는 로그 레벨로 나누어져 있다.먼저, 로그 레벨에 관해 간단하게 알아보자.로그 레벨이란?로그 레벨은 로그 메시지의 중요도를 나타내는 수준을 의미로그 레벨은 로깅 시스템에서 사용되며, 로그 메시지의 중요도에 따라 해당 메시지를 기록할지 결정로그 레벨TRACE가장 상세한 로그 레벨로, 애플리케이션의 실행 흐름과 디버깅 정보를 상세히 ..