본문 바로가기

전체 글

(17)
[Skill] Spring 이벤트 예외 전파 예외 전파이벤트 리스너가 이벤트를 발생시켰을 때 예외가 발생하면 어떻게 될까요? 이벤트를 호출하는 곳의 예외 전파를 확인하기 위해 공통적으로 이벤트를 호출하기 전에 데이터를 변경하겠습니다. (commit이 아닙니다.)public void test() { //... description = "business_logic_desc"; applicationEventPublisher.publishEvent(new PipelineEvent(...));} 아래 예외 전파를 얘기할때 이벤트를 호출하는 메인 비즈니스 로직을 test메서드라 칭하겠습니다.BEFORE_COMMIT트랜잭션이 커밋 되기 전의 이벤트에서 예외가 발생한 경우입니다.@TransactionalEventListener(phase = Tran..
[Skill] @TransactionalEventListener 해당 글은 spring boot와 jdbc를 사용하고 있습니다. 비동기 동작으로 외부 API에서 상태를 가져와서 DB에 저장하는 기능 구현을 하면서 EventListener라는 Spring에서 제공하는 이벤트 기반 프로그래밍 기능을 알게 되었습니다. 구현하고있는 프로세스는 간략하게 아래와 같습니다.외부 API에 데이터의 ci.cd를 요청합니다.외부에 요청한 데이터의 상태를 진행중(running) 상태로 변경합니다.외부로 요청한 ci.cd의 상태가 유효해질때까지(성공 혹은 실패) 확인합니다.외부로의 요청이 성공하면 success, 실패하면 failed 상태로 변경하여 DB에 저장합니다. 고려해야할 점은 아래와 같습니다.외부 API 요청이 완료되는데 최대 10분 이상의 시간이 소요될 수 있습니다. (행위가 ..
[토이프로젝트] - 6. 인증 오늘은 로그인 관련 작업을 진행했습니다.로그인은 가장 기본적이면서도 중요한 기능입니다. 로그인을 구현하기 위해서는 단순히 이메일과 비밀번호를 비교해서 맞는지 확인하는 로직만 추가해서 하는 방법도 있지만, 이번에는 Spring Security라는 보안 프레임워크를 사용해서 구현해 볼 예정입니다. Spring Security는 인증, 인가등 보호 기능을 제공하는 프레임워크로, 애플리케이션 보호에 대한 기능을 자체적으로 구현할 필요없이 보안 관련 기능을 효율적이고 신속하게 구현할 수 있도록 도와줍니다. 단순 로그인 뿐만 아니라 로그인 프로세스를 타 사이트(네이버, 카카오 ...)에게 위임하는 OAuth도 쉽게 제공해 줄 수 있다는 장점이 있기 때문에 Spring Security를 선택하였습니다. Spring ..
[토이프로젝트] - 5. 멀티모듈 Bean 등록 대부분의 세팅은 다 끝냈다고 생각했습니다. scm_api에서는 Http 요청을 받는 부분(controller)과 요청 로직을 처리하는 부분(service)scm_domain에서는 도메인을 기준으로 도메인 관련 로직을 처리하는 부분(service), 디비와 도메인을 처리하는 부분(repository) 위와 같은 구조로 프로젝트 구조를 계획하고 있었습니다.(물론 개발하면서 이상하다고 생각이 들거나, 공부하다가 꺠우치면 바꿀수 있곘죠)1. 문제 아무튼 scm_api에서 요청 로직을 처리하는 AuthService가 있고 scm_api에서 도메인 비즈니스 로직을 처리하는 AccountService, 디비와 도메인을 처리하는 AccountRepository가 존재합니다. 실행을 시키면 정상적으로 데이터가 저장될 것..
[토이프로젝트] - 4. Spring Boot 멀티 모듈 yml 설정 1. 멀티 모듈 yml 설정 프로젝트 구조상 배포 실행되는 모듈은 scm_api, 도메인과 관련된 로직을 관리하는 모듈은 scm_domain입니다.그렇기 때문에 main 클래스는 scm_api에 존재하게 되는데요.앞서 말씀드렸다 싶이 main 클래스가 scm_api에 존재하기 때문에 환경 변수 등을 application.yml 파일에 등록하는 경우 scm_api의 resource에 있는 yml파일에 작성을 해야합니다. 하지만 scm_api에는 swagger와 같은 환경 변수가 필요하고, scm_domain에는 jpa와 같은 환경 변수가 필요하기 때문에 각각 분리해서 관리하는게 더 효율적이라고 생각했습니다. @SpringBootApplication@ComponentScan(basePackages = {"c..
[토이프로젝트] - 3. Vue - SpringBoot 연동 Spring Boot에 Vue 프로젝트를 빌드해서 Spring Boot 프로젝트 만 실행해도 API서버와 화면을 모두 사용할 수 있도록 구상하고 있습니다. Vue와 Spring Boot를 연동을 해보겠습니다.1. Vue 빌드Vue프로젝트를 실행시킬 명령어 스크립트는 package.json에 있습니다.serve명령어 : npm run serveVue프로젝트를 직접 실행시킬때는 8081 포트로 설정했습니다.build명령어 : npm run buildVue 프로젝트 빌드 스크립트입니다. Vue프로젝트를 빌드했을때 Spring Boot에 생성하려고 합니다.build 파일 생성 경로는 vue.config에서 설정해줄 수 있습니다. outputDir에 빌드 파일을 생성하려고 하는 상대 경로를 설정해줍니다. buil..
[토이프로젝트] - 2. Vue 설치 이번에는 화면 코드를 구성하는 scm_ui 프로젝트를 구성해보겠습니다.화면은 그나마 배우기 쉽다고 추천받은 vue.js를 선택했습니다.1.  node 설치brew install node2.  vue-cli 설치npm install -g @vue/cli 터미널에서 vue를 설치는 했지만 vue라는 명령어를 찾을수 없다는 에러가 발생했습니다.해당 문제는 시스템 환경 변수에서 vue cli가 설치된 경로가 등록되어있지 않아서 vue 명령어를 읽지 못하는 것이라고 합니다. macOS에서는 환경변수 설정을 하는 파일은 ~/.zshrc 경로입니다.vim ~/.zshrc 명령어를 이용해서 접근해서 npm-global을 통해 설치한 패키지를 읽을 수 있도록 해보곘습니다.export PATH에 위와 같이 등록하면, np..
[토이프로젝트] - 1. 멀티모듈 세팅 1. Spring Boot 프로젝트 생성SpringBoot 프로젝트를 만들때 intellij의 community 버전이라 spring initializer을 통해 프로젝트를 생성합니다.https://start.spring.io/ 2. 구조 SCM을 루트 모듈로 구성하고 Request와 Response를 보내주는 scm_api 서브 모듈, 도메인 기준 서비스를 제공할 scm_domain 서브 모듈, 화면 코드인 front 모듈로 3개의 서브 모듈을 생각하고 있습니다. spring initilizer를 통해 생성한 SCM프로젝트에서 서브 모듈을 만들어 보겠습니다. 3. 서브 모듈 설정모듈 생성intellij에서 Project Structure를 들어가서 Module을 생성해줍니다.JDK는 17, Build ..