들어가며나는 jsch 라이브러리를 사용하여 파일을 SFTP 를 통하여 다른 서버로 전송을 해야했다.ex) prod-server -> file-server 필자는 gradle 을 사용하여 아래 의존성을 추가하여 라이브러리를 사용하였다.implementation group: 'com.jcraft', name: 'jsch', version: '0.1.55' 간단하게 내 상황에 대하여 설명을 해보자면프론트에서 User 가 파일 업로드를 여러개 하였고 그 파일들을 서버로 전송 받아서위 파일들을 SFTP 세션을 생성해 파일 서버로 보내는 작업을 하고 있었다. 위 상황에서 추가적인 요구사항이 들어왔다.User 가 파일업로드 후 서버로 파일들을 전송할 때, User 가 업로드 한 파일이 아닌다른 서버에 존재하는 파일..
들어가며 미니 프로젝트를 진행하며 원하는 기능에서 api 퍼포먼스(=성능) 가 생각했던 것 보다 나오지 않았다.-> Chrome 개발자도구 네트워크 탭의 통해 load 를 통해 api 응답이 몇초만에 왔는지 확인할 수 있었다. 그래서 위 api 성능을 더 잘내기 위해 어디서 시간초를 많이 소요하는지 체크를 해보고 싶었다.그래서 방법을 찾던 중에 Aop 를 사용하여 간단하게 로깅을 할 수 있다는 것을 알았다. 그래서 나중에 혹시또 사용할 수도 있으니 사용했던 방법을 기록해보려고 한다. build.gradle 추가 implementation 'org.springframework.boot:spring-boot-starter-aop' application.yml 로깅 추가logging: level: ..
서론 매번 스프링 설정을 할 때 까먹는 것 같아 정리를 해둠.위 어노테이션은 jakarta.annotation API에 이미 작성이 되어있으므로 우리는 가져다가 사용만 하면된다. 자세한 내용 및 내부구현은 레퍼런스 문서를 보면 알 수 있다. 본론 @PostConstruct 는 서버가 실행될 때 빈으로 등록되 있는 인스턴스를 스프링 컨텍스트에 올려 초기화를 진행할 때, 위 어노테이션이 붙어 있는 메소드를 호출한다. 그리고 메소드에 등록되 있는 어떠한 작업을 실행한다.@Componentpublic class DBClear { @Autowired private UserRepository userRepository; @PostConstruct private void postConstruc..
들어가며오늘은 SpringBoot 환경에서 RabbitMQ 를 사용해서 비동기 이벤트 처리를 해보겠습니다. 참고로 오늘은 이벤트 발행자 와 수신자 딱 두가지 기능을 구현해볼 예정입니다. 메시지를 보내는 발행자 : Producer(=issuer)메시지를 받는 수신자 : Recevier(=consumer) 위 두가지 기능 구현을 위주로 이야기를 해보겠습니다. 서론비동기 처리를 알아보기 전에 간단한 개념설명을 해보겠습니다. RabbitMQ 는 무엇일까요?AMQP 를 구현한 오픈소스 메세지 브로커 이다.위 라이브러리를 사용하는 이유는 비동기 작업이 필요할 때 즉 많은 작업이 요청되어 처리를 해야 할 때 사용합니다. ❓그럼 AMQP 는 무엇일까요Advanced Message Queueing Protocol의 ..
들어가며오늘은 프로젝트에서 로그 메시지에 대한 내용을 수정하기 위한 작업을 해볼 예정입니다. 로그 메세지를 왜 수정해야 할까요? 이미 스프링부트 환경에서는 자동으로 로그메세지도 제공해주고,Error 면 Error, Info 면 Info 알아서 나오지 않나요? 라는 생각을 할 수 있습니다. 하지만 로그도 하나의 코드라는 생각으로 스프링에서 제공해주는 일반적인 로그가 아닌내가 알아보기 편한, 즉 가독성(=읽기 편한) 로그를 만들어주는 것 또한 중요하다고 생각합니다. 실질적으로 서비스를 운영하면, 다양한 환경에서 Error 및 Info 로그를 체크해야 할 일이 많습니다. 그 로그들을 편리함,가독성, 팀원 과 공통적인 설정, 여러가지 보안적인 부분 프로젝트 스펙을 클라이언트와 맞추기 위해서 로그 스펙을 설정..
안녕하세요✋오늘은 JWT Token에 대해서 간단하게 알아보려고 합니다. JWT Token은 보통 로그인 로직을 짤 때 많이 활용하고는 합니다.Spring Security에서 JWT 를 사용하기 위해서 공부를 해보았고아래 내용을 보면서 기본 개념이랑 어떻게 활용하는지에 대해서 더 알아보겠습니다. 📌 기본 개념JWT(JSON Web Token) 은 웹 표준으로써 데이터의 JSON 객체를 사용하여 가볍고 자가 수용적인 방식으로 정보를 안전하게 전달할 수 있도록 전달할 수 있도록 설계된 토큰 기반의 인증 방식입니다. 토큰이라는 개념이 생소할 수도 있습니다. 일단 내용을 쭉 읽으시면서 자연스럽게 알 수 있습니다. JWT는 URL, HTTP Header, Cookie, HTML Form..
안녕하세요🖐 오늘은 제가 토이프로젝트 시작에 앞서, 어떻게 패키지를 구성하고, 파일을 관리할지 고민을 하던 중에 스프링 계층 구조에 대해서 알게되어서 공부하게 되었습니다. 그 내용을 포스팅 해보겠습니다. 저는 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 라는 책을 보며, 스프링 계층구조에 대하여 자세히 알게되었습니다. 위 사진이 대표적인 스프링의 계층 구조라고 합니다. 각각의 계층은 계층마다 독립적으로 분리하여 구현하는 것이 가능해야하고, 각 계층에서 담당해야 할 기능들이 있다. Web Layer(= Presentation Layer) 우리가 흔히 사용하는 Controller와 View 영역입니다. 스프링을 사용하면서 MVC패턴을 들어보셨을 것이라고 생각합니다. 그 중에서 View와 Controlle..
안녕하세요🖐 오늘은 스프링부트에서 의존성 주입에 대하여 알아볼 것 입니다. 스프링에서 중요한 개념인 Spring Core 관련된 내용은 꼭 알고서 개발을 시작해야 합니다. 대표적으로 POJO, AOP, DI 등 중요 개념들이 있습니다. 그 중에서 오늘은 DI에 대하여 알아보겠습니다. 의존성 주입은 스프링 을 사용하는 백엔드 개발자라고 하면은 개발시 자주 사용하고 있을 것 입니다. 저도 개발을 하면서 객체에 의존성 주입을 하는 상황이 자주 있습니다. 항상 궁금했습니다. 어떻게 이 방식으로 Bean에 의존성이 주입이 되고, 내가 원하는 객체에서 메소드를 사용하고 또 어떠한 방법들이 있을까? 그래서 이번 기회에 의존성주입(Dependency Injection) 에 대하여 자세하게 알아보았습니다. 모든 글은 W..