컴퓨터과학/Spring 8

[Spring] 스프링 MSA 개발하기 - 2: 개별 서비스 모듈구조 설정

🤔 들어가며 MSA의 개별 서비스 개발에 앞서 서비스마다 모듈 구조를 어떻게 구성하는것이 좋을지 고민하며 작성한 글이다. 🏢 멀티 모듈 구조 설계 멀티 모듈 구조란 독립적인 프로젝트들을 묶어 모듈로 사용하는 구조를 말한다. 어떤 형태의 모듈 구조를 구성할 까 고민할 때 다음과 같은 것들을 고려하였다. - 각 서비스는 개별의 DB를 가지며 독립된 서비스 형태를 가진다. - 각 서비스는 프론트, 백오피스 api로 구분된다. - 프론트 및 백오피스 서비스에서는 같은 영속성 엔티티들을 사용한다. - 각 서비스는 batch 기능을 가질 수 있다. 위의 사항들을 고려하여 설계한 모듈 구조는 다음과 같다. -: 모듈 사용자 서비스 - front - api (스프링 어플리케이션) - service (비즈니스 로직) -..

[spring boot] Async 비동기 메소드 사용하기

💡 들어가며 Spring boot 프레임워크를 이용한 rest api 서버에 FCM을 이용한 푸시알림 서비스, 이메일 인증 서비스를 구현하게 되었는데 앞서말한 2가지 기능처럼 외부 api 통신 등의 네트워크를 이용하면 꽤 긴 딜레이가 발생한다는걸 알게 되었습니다. 이와같은 딜레이를 어떻게 제거할까 고민해보았는데요, 곰곰히 생각해보니 푸시알림이나 이메일 전송등을 호출하는 로직은 해당 api의 핵심로직이 아니고 단순 알림을 위한 기능이였으므로 일단 api호출에 대한 응답을 먼저 넘기고, 스프링이 알아서 이메일을 보내든 푸시알림을 보내든 다른기능을 하도록 할 수 없을까? 하는 생각이 들어 방법을 알아보던중 비동기로 메소드를 실행할 수 있다는것을 알게 되었고 구현해보았습니다. 🤔 근데 비동기가 뭐지? 비동기..

Firebase Cloud Message(FCM) 스프링 부트 프로젝트에 적용하기

FCM이란?☁️ Firebase 클라우드 메시징(FCM)은 무료로 메시지를 안정적으로 전송할 수 있는 교차 플랫폼 메시징 솔루션입니다. - firebase 공식 홈페이지 참고문서 이 글에선 FCM에 대한 원리 설명, 설정보다 스프링 프로젝트에 적용하는 과정에 대해 설명하고자 한다. 초기설정 방법과 원리설명 등은 공식문서에 잘 정리되어 있으니 링크를 참고하길 바란다. 스프링 부트 프로젝트에 적용하기 요약 스프링 프로젝트에서의 FCM 사용 방법은 다음과 같다 1. 유저 테이블에 FCM 토큰 저장하는 컬럼 추가 2. 토큰 저장하는 REST API 생성 3. 특정 유저의 저장된 토큰으로 알림메시지 보내는 FCM 서비스 구현 + 4. 알림을 보내기 원하는 동작의 컨트롤러에서 비동기로 FCM 서비스 호출 + 5. ..

[Spring]Jenkins로 ec2 서버에 원격 배포하기 (publish over ssh 없이)

Jenkins - github 연동이 완료되었다고 가정합니다! 참고: Jenkins github와 연동하기 : https://goddaehee.tistory.com/258 (갓대희님 블로그) 기존 원격으로 ec2 서버에 jenkins로 빌드한 jar 파일을 배포하는 방법인 publish over ssh플러그인이 젠킨스 보안정책상 배포 중단되었습니다. (22.01.12) https://www.jenkins.io/security/advisory/2022-01-12/ Jenkins Security Advisory 2022-01-12 Jenkins Security Advisory 2022-01-12 This advisory announces vulnerabilities in the following Jenkin..

[Spring] 예외 발생은 어디서 해야할까?

스프링에서 예외발생은 어느 계층에서 이루어져야할까? Controller? Service? Repository? ... 결론부터 말하자면 모든 계층에서 발생할 수 있다. 단, 예외의 유형을 정의하는것은 바람직하다. 가령 권한(401)에 대한 검증은 컨트롤러, 유효성(404)에 대한 검증은 서비스 처럼 말이다. 객체지향적 관점으로 봤을 때 해당 클래스가 객체로써 올바르게 작동할 수있는가? 를 따져보아 개발자가 직접 선택하면 된다. Question.만약 권한에 대한 검증을 서비스에서 한다면? Answer. 권한에 대한 검증을 서비스에서 진행한다면 해당 서비스를 다른 컨트롤러 또는 서비스에서 이용함에 있어 권한문제를 통과하지 못할 수 있다는 불확실성이 생긴다. 반드시 권한이 있는 유저가 그 서비스 메소드를 호출..

[Spring] DTO의 객체변환은 어느 계층에서 하는것이 적절할까?

스프링 프로젝트를 진행하다보니 DTO 객체를 사용하는 계층이 정확히 정의되지 않았다 는 문제점을 발견하고 어느 계층까지 DTO를 전달하는것이 맞을까? (어느 계층에 DTO를 엔티티로 변환하는 로직이 존재해야하는가) -> 이 로직을 컨트롤러, 서비스, 리포지토리 어느계층에 두어야 하는가? 를 고민하게 되었다. PROBLEM. DTO 와 엔티티(VO)간의 변환 로직을 어느 계층에 두는것이 적절할까? 별 생각없이 컨트롤러에서 DTO를 엔티티로 변환하여 서비스로 넘기는 방식으로 구현하고보니 지나치게 많은 로직이 컨트롤러에 포함되어있음을 알게되었다. 사용자 인터페이스의 역할을 하는 컨트롤러에 서비스에 있어야할 로직들이 포함되는 문제가 발생한다. but DTO를 서비스단으로 넘긴다면? 우선 서비스는 리포지토리를 D..

[Spring] 페이지 리로드(새로고침)시 발생하는 데이터 중복전송 현상 방지

문제확인 웹페이지를 이용하다보면 서버에 데이터가 중복으로 전송되는 현상이 발생한다. 예로 로그인 실패 직후 새로고침을 하면 이전에 진행된 데이터 전송 프로세스가 반복돼서 실행되며 이로인해 불필요한 연산이 진행되고, 뷰로 로그인 실패에 관한 정보를 다시 전송하게된다. (로그인 실패 → 잘못된 아이디 입력 alert표시 → 새로고침 → 다시 잘못된 아이디 입력 alert ... ) 원리 이러한 현상을 어떻게 방지할지 고민하다가 새로고침시 호출되는 컨트롤러(핸들러)는 최종으로 리다이렉트된 컨트롤러임을 알게되었고, 이 작동방식을 이용해 문제를 해결하였다. 실행 이를 위해선 최초 데이터 수신 컨트롤러와 리다이렉트 이후 뷰로 데이터를 전송하는 컨트롤러를 구분하였다. 1. 데이터 수신 컨트롤러 @PostMapping..

[Spring] 스프링(Spring) 이란?

웹(Web)이라는 분야를 공부하기로 결정하고 학습 루트를 탐색하다보면 가장 많이 나오는 키워드중 하나는 스프링이다. 물론 요즘에는 스프링 이외에도 노드js(Node,js) 자식뻘인 스프링부트 등 다양한 프레임워크가 존재하지만, 아직까지 인기있는 현역 프레임워크라는 사실은 틀림없다. 01. 스프링이란? "스프링은 웹사이트 개발을 위한 백엔드 프레임워크이다" 백엔드 (Back-end): 웹 개발 프로세스를 프론트(Front-end), 백엔드(Back-end)로 구분하는데, 일반적으로 서버단에서 동작하는 프로그램(DB, API서버 ..)을 다루는 프로세스를 백엔드 라고 한다. 프레임워크 (Framework): 프로그램 설계에 있어 미리 구축되어있는 뼈대 라고 이해하면 쉽다. 백엔드 프로세스를 구축하는데 있어 ..

반응형