전체 글 (47) 썸네일형 리스트형 [Spring boot] Transactional Outbox Pattern 으로 mileage 적립 구현해보기 전체 구성 흐름1. 트랜잭션 내 핵심 도메인 처리 (회원가입 / 주문 저장 등)예시: 회원가입 시 UserEntity를 저장한 직후이후 ApplicationEventPublisher.publishEvent(...)로 이벤트 발행eventPublisher.publishEvent(new UserSignedUpEvent(savedUser.getUserId())); 2.@TransactionalEventListener (AFTER_COMMIT)TransactionPhase.AFTER_COMMIT 설정으로, 메인 트랜잭션이 성공적으로 커밋된 후 실행됨이벤트 핸들러는 정책 테이블을 조회하고, Outbox 테이블에 이벤트 정보를 저장@TransactionalEventListener(phase = Transaction.. [Springboot + react] CICD 구축 _ github action_deploy.sh (프론트+백 단일 서버) 목표/상황스택: React(프론트) + Spring Boot(백엔드)요구SSL은 당장 안 씀서버는 8081 포트로 띄움프론트/백 각각 별도 GitHub 레포 관리지금은 프론트 빌드 결과를 스프링에서 정적 리소스로 서빙배포 형태(최종 결정)단일 디렉토리 방식: /home/company_name/project_name 아래에 다 모음백엔드 JAR: /home/company_name/project_name/project_name.jar로그: /home/company_name/project_name/project_name.log프론트 빌드: /home/company_name/project_name/frontend/프론트는 rsync로 해당 폴더에 업로드 → Spring이 서빙백엔드는 scp로 JAR 업로드 + .. [spring boot] Spring @Scheduled vs Quartz _ 사용법 이전글[spring boot] Quartz Job 란? Spring @Scheduled@EnableScheduling을 메인 클래스나 설정 클래스에 붙여야 함@SpringBootApplication@EnableSchedulingpublic class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); }}원하는 메서드 위에 @Scheduled 붙여주면 끝예제@Componentpublic class SimpleScheduler { // 10초마다 실행 @Scheduled(fixedRate = 10000) public void runEvery10Sec() { .. [spring boot] Quartz Job 란? Quartz란?언어: Java 기반으로 작성된 오픈소스 스케줄러 라이브러리용도: 특정 시간이나 주기에 맞춰 작업(Job)을 실행할 수 있게 해줌활용 범위: 단순 반복 작업(cron)부터, 여러 Job을 조합한 복잡한 워크플로우까지 지원Quartz Job이란?Quartz에서 실행할 “작업 단위”org.quartz.Job 인터페이스를 구현해야 하며, execute(JobExecutionContext context) 메소드 안에 실행할 로직을 정의스케줄러는 Job과 Trigger를 매핑해서, 특정 시점에 Job이 실행되도록 함예시public class CompleteReservationJob implements Job { @Autowired private SqlSession sqlSession; .. spring boot & next http 통신 커넥트 controller@RestController@CrossOriginpublic class TestController { @GetMapping("/api/hello") public String testConnection() { System.out.println("연결"); return "연결 성공"; }} porxyConfig (CorsFilter 설정)// http 통신 연결import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration.. 호스팅 서버(카페 에 무료 SSL 인증서 발급하고 적용하기 (https) https://app.zerossl.com/dashboard Log In - ZeroSSLEnter Credentials Log In No account yet? Get started for freeapp.zerossl.com 위 사이트에서 인증서 발급 진행할 예정이다.Ner Certificate 클릭 후 나오는 정보 입력해주면 된다. 도메인 정보 작성 적용일은 무료 플랜인 3달로 적용 추가 기능은 선택시 유료 옵션이기 때문에 패스하고 next step 선택하기 CSR 자동생성 true로 놓고 다음 단계로 자동으로 무료 플랜으로 선택 된 부분 확인 가능하다 인증 절차 선택 창으로 나는 DNS로 인증선택했다.그러면 인증을 위한 DNS 정보가 복사할 수 있게 나오는데 복사해두자 카페 24 로 이동해서 .. [Java + Spring Boot] Transactional Outbox Pattern 으로 mileage 적립 로직 설계에 대한 고찰 마일리지 설계에 들어가면서서론신규 기능으로 마일리지 시스템을 도입해야 하는 상황이 생겼다. 처음에는 서비스 로직 내에서 직접 마일리지를 적립하는 방식으로 구현하려고 했다. 예를 들어, 회원가입을 하면 축하 마일리지를 곧바로 지급하는 구조였다. 하지만 이 방식에는 치명적인 문제가 있다. 회원가입 도중 오류가 발생하면 회원 정보는 저장되지 않았는데 마일리지는 이미 적립된 상태가 된다. 반대로, 마일리지 적립 도중 예외가 발생하면 전체 회원가입 트랜잭션까지 롤백되는 문제가 발생한다. 트랜잭션으로 묶어 처리할 수도 있으나, 마일리지는 본질적으로 “부가 기능”이기 때문에 메인 플로우와 얽히는 구조는 좋지 않다고 생각했다. 본론 보편적으로 자주 쓰이는 방식들을 조사한 결과, 세 가지 방식을 검토했다.직접 호출 방식.. [Linux System] 리눅스 환경에서 유저 생성 후 접속하기 작년 쯤에 과제하면서 노션에 정리 해둔 글이 있어서 노션 정리하는 겸 해당 글을 올려본다. 리눅스 환경을 구축하기 위해 docker에 우분투 이미지를 기반으로 컨테이너를 생성해서 해당 환경에서 실습을 진행하도록 하겠다.docker -v. 위의 명령어로 현재 mac OS에 깔려있는 도커 버전을 확인 할 수 있다. docker run -it ubuntu bash 위의 명령어를 통해 우분투환경 컨테이너를 생성 docker desktop으로 확인해보면 정상적으로 컨테이너 생성된 것을 확인할 수 있다. 컨테이너에 접속해서 유저를 생성해보자유저 생성중 문제가 발생했다.docker 우분투 환경에서는 유저이름을 한글로 설정할 수 없다는 문제가 있었다.문제를 확인해보니, Ubuntu Docker 이미지에서.. 이전 1 2 3 4 ··· 6 다음