본문 바로가기

백엔드62

MAIL로 첨부파일 JPG를 보내는 과정에서의 문제들 먼저, 로직을 설명하고자 한다 상품 구매 (MEMBER) -> 구매완료 상태로 변경, 검증 (PRODUCT) -> 검증 이후, MEMBER에서 MEMBER의 정보 변경-> 그 이후! 카카오로 로그인 한 대상이 아닌 경우 Mail을 전송한다. 이 'MAIL로 판매자가 GCP에 등록했던 URL의 파일을 첨부파일로 구매자에게 보내는 과정'에서 배운 점들을 정리하고자 한다.  가장 문제가 많이 생긴 부분 . MULTIFILEEXCPETION이 가장 큰 문제가 되었다. 이를 해결위해 CTRL+ENTER(내가 가장 주로 사용하는 방법이다), 그리고 웹을 열심히 활용했다. URL url = new URL(productRepository.findImageRealByProductId(paymentsReqList.get(.. 2024. 5. 16.
Spring에서 동시성 test # 현재 문제가 되었던 부분은, 상품을 조회하는 도중에 상품을 삭제하는 부분(수정도 마찬가지이다)에 대한 부분이었다. 이를 위해, 상품을 조회하는 도중에 상품을 삭제하는 동시성 문제에 대한 test 코드를 작성하도록 하겠다. @Test public void testDeleteProductAndThenFind() throws InterruptedException { // Given Long productId = 1234L; String userEmail = "test@naver.com"; Product product = new Product(productId, "Test Product", 100, "aGVsbG8gd29ybGQ=".getBytes(), "aGVsbG8gd29ybGQ=".getBytes(),.. 2024. 3. 29.
동기, 비동기 / WEBFLUX, MONO 프로젝트를 진행하며, 비동기적으로 진행하자는 팀 의견(많은 사람들이 요청할 것이라는 가정), 그리고 PORTONE의 SRC를 직접 받아서 사용하는 형태로 인해 그 형태의 틀을 따라야 하는데, 그 틀이 비동기였던 이유로 전 과정을 비동기적으로 진행하게 되었다. 동기/ 비동기 동기: 작업 a,b,c가 있다면, a이후 , a의 종료를 기다리고 b -> c를 진행한다 비동기: a이후, a의 종료 동안 b를 진행하고, b가 종료되면 callback되어 그 떄로 돌아가고, 그 이후 b,c를 진행한다. 이 돌아가는 것, 즉 일꾼을 쓰레드(프로세스의 작업단위가 된다) 라고 한다. WEBFLUX란? implementation 'org.springframework.boot:spring-boot-starter-webflux.. 2024. 2. 23.
WEBFLUX 프로젝트에서 결제요청(정책상 문제로, 사용 카드 정보를 개인이 저장할 수 없어 open api를 호출해야만 한다) 에 대한 문제로 인하여 , webflux를 자주 사용하게 되었다. 그 과정에서 모르는 내용이 계속 등장하여, 이렇게 정리하게 되었다. WEBCLINET는, REST API를 위한 것으로 , 마치 REQUEST를 보내는 CLIENT처럼 동작할 수 있다. 1. 간단한 생성 webclient.create(String baseurl)로 생성할 수 있다. 2. 기타 다른 정보를 추가하려면, builder.build를 사용하자 private final WebClient webClient = WebClient.builder().baseUrl("https://api.portone.io").build(); .. 2024. 2. 18.
MYSQL - SPRING 연동 다시 진행하니 까먹은 내용들이 많이 있어서.. 이렇게 진행해 보겠다. 1. MYSQL이 자동으로 실행되어야 하는데, 그렇지 않은 경우가 있다. 그럴땐, 해당 위치에서 생성해주자. 2. 내가 연결한 DB나 USER등을 생성해주어야 한다. mysql -u root -p MYSQL에 ROOT 계정으로 접근한다. CREATE DATABASE newdb CREATE USER jihyukcoding GRANT ALL PRIVILEGES ON newdb TO jihyukcoding; newdb라는 database를 생성하고 (table이 아니다!) jihyukcoding이라는 사용자를 만들어서, 모든 newdb의 권한 (table의 생성 , 삭제 .. curd등등) 을 부여했다. 이제 jihyukcoding으로 접근.. 2024. 1. 30.
Multi Thread로 처리하기 주어진 상황 : 사실, 많은 데이터도 아니다. 하지만 더 많다고 가정하고, 이런 데이터를 넣어야 하는 상황이다. 1. 매핑할 데이터가 필요하다! 2. 이를 직접 생성자를 불러서 넣는것보단, field mapping을 하자 : 생성자를 안쓰고 이렇게 설정해준 이유는? 이제, config를 설정하자 3. data를 읽어오는 reader! amountdto를 일겅오며, 그 이름을 지정했다. setmapper는 위에서 설정한대로, 각 라인의 분할은 linetokenizer로 분할하였다. 4. 중간 과정 processor! 사실은 이보다 복잡한 process가 생길 수 있다. (전처리 등등) 5. writer! 이 부분이, 간단한 예시이다. 지금은 outputfile에 저장하는 정도로 마무리 되었지만, 실제로는 .. 2024. 1. 15.
Spring Batch Exception 목표 : 문제 발성시 최대한 빠른 exception을 발생. 이와 같이, job을 진행할때 ( step은 chunk단위가 아닌 tasklet으로 초 간단하게 진행했다) 실제 job의 진행중, step 진행 이전 exception을 발생시켜 그 전에 종료되게끔 유도하였다. 목표 : job의 실행 전후로 job상태를 확인하는 joblistener 생성 현재는 로그만을 발생시키게 만들었으며, 여기서 처리도 가능하다 . File의 data를 읽어서 이를 작성하고 삽입하는 방식은 , 해당 블로그께서 잘 정리해 주셨다. https://velog.io/@foodsmith96/%EC%A0%95%EC%88%98%EC%9B%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98-9-Fla.. 2024. 1. 15.
logging시 주의 1. 프로퍼티 설정 2. 의존성 3. 주의! log level. log.info//debug 등. 2024. 1. 15.
Spring Batch Test @ExtendWith는 beforeEach,AfterEach등을 사용한다. @ActiveProfiles는 test 연동시 profile로 설정한다. (test용 프로퍼티를 사용하기 위하여) @ContextConfiguration은, 해당 config들의 설정을 load함을 의미한다. Test에서 주로 사용하는 autowired 방식. 허나 .. 주의해야 할 것이 2개 있다. 1. 간단함을 위해 autowired를 쓴것이다. (생성자를 주로 필요로 하지 않기 떄문에 ) 2. teardown은, 모든 test 실행후 plaintext를 지워주는 것인데, 지금 dbms를 test용은 h2로 , 별도로 지정해두었다 . 그렇지 않고 둘다 mysql을 쓴다면, 이러한 방식으로 진행해선 안된다. 그 이후는 간단하다 .. 2024. 1. 15.
Spring Batch 활용 1. 개발 환경 : java, docker, mysql 2. 기술 스택 : Spring boot, Spring boot batch, spring boot data jpa, junit, lombok, gradle (groovy 기반 build) Docker Container를 띄우는 법. 이후, 터미널에 docker-compose up -d로 , docker를 띄운다 (image를 보고 docker가 해당 내용을 띄운다. 이미 결정되어 있는 mysql 을썻다 ) docker가, 컨테이너를 띄웠다! 왜 docker를 사용할까? 만약에 spring batch를 그냥 원래 하던대로 하면, local db에 이를 저장하는 것이다. 이를 남이 쓰려면 인텔리제이 설치 -> mysql workbench 세팅 .. 등등.. 2024. 1. 14.