개요실무에서 비즈니스 로직을 작성하며 코드 의존성을 줄일 수 있는 방법을 계속 고민해보았다.위에 대한 방안을 찾던 중 이벤트 기반 아키텍쳐 라는 개념을 알게되었다 이벤트 라는 단어는 생소하였지만 궁금해져서 공부한 내용을 적어보려고 한다 Event 란?이벤트라 함은 어플리케이션 내에서 발생한 요청 및 상태 변화를 의미하며 이를 다른 컴포넌트에 알리는 것을 이벤트라 정의한다. ex)1. 주문 취소 요청이 오면 -> 주문 취소 이벤트 발생2. 음식 주문 후 배달 받을 장소를 변경한다 -> 배달지 변경 이벤트 발생 이벤트 기반 아키텍처에는 이벤트를 중심으로 시스템이 동작하며, 이벤트를 발생시키는 발행자(publisher) , 이를 처리하는 구독자(subscriber) 가 존재한다 위 역할을 적절히 비즈니스 로직..
spring

들어가며 미니 프로젝트를 진행하며 원하는 기능에서 api 퍼포먼스(=성능) 가 생각했던 것 보다 나오지 않았다.-> Chrome 개발자도구 네트워크 탭의 통해 load 를 통해 api 응답이 몇초만에 왔는지 확인할 수 있었다. 그래서 위 api 성능을 더 잘내기 위해 어디서 시간초를 많이 소요하는지 체크를 해보고 싶었다.그래서 방법을 찾던 중에 Aop 를 사용하여 간단하게 로깅을 할 수 있다는 것을 알았다. 그래서 나중에 혹시또 사용할 수도 있으니 사용했던 방법을 기록해보려고 한다. build.gradle 추가 implementation 'org.springframework.boot:spring-boot-starter-aop' application.yml 로깅 추가logging: level: ..

들어가며Spring 어플리케이션을 사용해 무언가를 만들다보면 트랜잭션을 당연하게 사용한다.추가적으로 여러 사람에 코드를 보면 @Transactional 어노테이션이 붙어있는 코드를 보고는 한다. 나 또한 무의식 속에 @Transactional 을 서비스 계층에 있는 비즈니스 로직에 붙이고는 한다.대충 알기로 트랜잭션, 즉 CUD 작업이 일어나는 곳에 붙이면 된다. 정도만 알고 있었고 어떠한 역할을 하고, 왜 붙여야 하는지는 제대로 알지 못했다.이번 공부를 통해 확실하게 알아본 내용을 적어보려고 한다. 본론데이터를 관리할 때 가장 중요하게 여기는 점은 정확한 데이터를 유지하는 것이다 우리는 특정 실행 시나리오가 잘못되거나 일관되지 못한 데이터로 끝나 버리기를 원치 않는다.위 시나리오가 위배될 경우 당..

서론 매번 스프링 설정을 할 때 까먹는 것 같아 정리를 해둠.위 어노테이션은 jakarta.annotation API에 이미 작성이 되어있으므로 우리는 가져다가 사용만 하면된다. 자세한 내용 및 내부구현은 레퍼런스 문서를 보면 알 수 있다. 본론 @PostConstruct 는 서버가 실행될 때 빈으로 등록되 있는 인스턴스를 스프링 컨텍스트에 올려 초기화를 진행할 때, 위 어노테이션이 붙어 있는 메소드를 호출한다. 그리고 메소드에 등록되 있는 어떠한 작업을 실행한다.@Componentpublic class DBClear { @Autowired private UserRepository userRepository; @PostConstruct private void postConstruc..

들어가며오늘은 프로젝트에서 로그 메시지에 대한 내용을 수정하기 위한 작업을 해볼 예정입니다. 로그 메세지를 왜 수정해야 할까요? 이미 스프링부트 환경에서는 자동으로 로그메세지도 제공해주고,Error 면 Error, Info 면 Info 알아서 나오지 않나요? 라는 생각을 할 수 있습니다. 하지만 로그도 하나의 코드라는 생각으로 스프링에서 제공해주는 일반적인 로그가 아닌내가 알아보기 편한, 즉 가독성(=읽기 편한) 로그를 만들어주는 것 또한 중요하다고 생각합니다. 실질적으로 서비스를 운영하면, 다양한 환경에서 Error 및 Info 로그를 체크해야 할 일이 많습니다. 그 로그들을 편리함,가독성, 팀원 과 공통적인 설정, 여러가지 보안적인 부분 프로젝트 스펙을 클라이언트와 맞추기 위해서 로그 스펙을 설정..

안녕하세요오늘은 스프링 프레임워크에서 세션 및 쿠키를 다루는 방법에 대하여 알아보겠습니다. 세션과 쿠키는 클라이언트와 서버의 연결을 유지하는 방법입니다 우리가 사용하는 웹 브라우저에 서비스는 HTTP 프로토콜을 기반으로 통신을 합니다.그리고 그 HTTP 프로토콜은 클라이언트와 서버의 관계를 유지 하지 않는 특징이 있습니다. 그 대표적인 특징 2가지가무상태성 (Stateless)비연결성(Connctionless) 위 사진을 보면 한번 요청이오고 그 요청에 응답이 오면 바로 연결을 끊는다.만약에 그러면 로그인을 하는 상황이라면 어떨까요?로그인을 해서 여러 기능을 이용해야 하면은, API요청을 할 때마다 로그인을 해야할까요? 만약 실제로 그렇다면은...... 엄청나게 귀찮을 겁니다.매번 요청하고 연결이 끊기..

안녕하세요🖐 오늘은 비밀번호 유효성 검사에 대한 예제를 통하여 TDD에 대해서 공부를 해보았습니다. 비밀번호 유효성 검사 조건 길이가 8글자 이상 0부터 9사이의 숫자를 포함 대문자 포함 - 모든 규칙을 충족하면 STRONG - 2개의 규칙을 충족하면 NORMAL - 1개의 규칙을 충족하면 WEAK 위 조건을 만족하는 테스트 코드를 작성해야 합니다. 암호 검사를 하는 경우를 생각해봤을 때, 가장 쉽거나, 가장 예외적인 상황은 무엇일까? 모든 규칙을 충족하는 경우 모든 규칙을 충족하지 않는 경우 모든 규칙을 충족하지 않는 경우는 모든 조건을 다 걸어야하기 때문에, 로직이 복잡하게 짜인다. 그러나 모든 규칙을 충족하는 경우는 쉽게 테스트를 통과시킬 수 있습니다. 바로 시작해보겠습니다. 1) 모든 규칙을 충족..

안녕하세요🖐 오늘은 제가 토이프로젝트 시작에 앞서, 어떻게 패키지를 구성하고, 파일을 관리할지 고민을 하던 중에 스프링 계층 구조에 대해서 알게되어서 공부하게 되었습니다. 그 내용을 포스팅 해보겠습니다. 저는 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 라는 책을 보며, 스프링 계층구조에 대하여 자세히 알게되었습니다. 위 사진이 대표적인 스프링의 계층 구조라고 합니다. 각각의 계층은 계층마다 독립적으로 분리하여 구현하는 것이 가능해야하고, 각 계층에서 담당해야 할 기능들이 있다. Web Layer(= Presentation Layer) 우리가 흔히 사용하는 Controller와 View 영역입니다. 스프링을 사용하면서 MVC패턴을 들어보셨을 것이라고 생각합니다. 그 중에서 View와 Controlle..