특정 책에 관심이 있어 클릭해서 상세페이지에 들어갔을 때, 클릭했던 책을 거래한 사람이 함께 거래했던 책을 추가적으로 보여주고 싶었다.유사한 관심사를 가진 사용자에게 함께 거래한 책을 추천함으로써 거래율을 증가시킬 수 있을 것이라 기대했기 때문이다. 주문을 할 때에 아래처럼 값을 보내주고 있다.orderList를 그대로 DB에 저장하고 싶지만, DB에 객체를 넣어줘야해서 보기가 불편할 것 같았다. { "renterUserId" : 1, "userName": "John Doe", "phoneNumber": "1234567890", "address": "123 Main St, Cityville, ST 12345", "deliveryMemo": "Leave at the front ..
Project
기존 양방향JPA 연관관계를 사용하여 사용자가 거래내역을 조회했을 때, 거래했던 상품들을 보여주고자 했다.Rental 클래스에 주문내역을 보여주고, RentalProducts에서 한 주문내역에 대한 제품들을 보여주도록 관계를 만들었다.💡 양방향 매핑 규칙객체의 두 관계중 하나를 연관관계의 주인으로 지정연관관계의 주인만이 외래 키를 관리(등록, 수정)주인이 아닌쪽은 읽기만 가능주인은 mappedBy 속성 사용X주인이 아니면 mappedBy 속성으로 주인 지정💡 연관 관계의 주인(Owner) 지정 방법외래키가 있는 곳을 주인으로 지정할것!→ Rental의 객체에서 값을 바꿨는데, RENTALPRODUCTS테이블에 쿼리문이 나가면 혼란스럽다. @OneToMany, @ManyToOne을 사용하여 양방향 매..
상황재고가 1개 남은 도서를 2명의 대여자가 대여 버튼을 동시에 눌렀을 때 재고를 초과하는 상황이 발생을 방지하고자 한다. 예를 들어, 선착순 쿠폰을 100개만 발급하고자 하는 경우랑 비슷하다고 보면 될 것같다. user가 대여 버튼을 누르면 Kafka를 이용하여 product-service로 대여 데이터를 전송한다. USER-SERIVCE// UserController@PostMapping("/addDeliveryOrder/{userId}")public void addDeliveryOrder(@PathVariable Long userId, @RequestBody RequestAddDeliveryOrder requestAddDeliveryOrder) { productService.addDelive..
처음에 설계했던 것과 달리 바뀐 부분도 보완하고누구나 어떤 프로젝트인지 개요만 보고이 구조 그림을 본다면 돌아가는 흐름을 바로 파악할 수 있는 구조를 그리고 싶었다. 아무래도 MSA로 프로젝트를 만들었다보니 많은 서비스가 분산되어 있어서어떻게 보기좋게 만들어야 할지 고민이 되었다. 검색해도 시스템에 대한 구성도뿐이라 참고하는 데에 도움이 되지 않았다. 구조를 그려내는 다양한 방법이 있다것을 알게 되었고내가 원하던 것은 어플리케이션 구성도라는 것이었다! 시스템 구성도정의: 하드웨어와 소프트웨어의 연결 구조를 보여주는 그림.목적: 시스템 전체의 구성 요소와 그들 간의 관계를 이해.초점: 하드웨어, 네트워크 장치, 서버 등의 상호 연결. 소프트웨어 구성도정의: 소프트웨어 내부 구조를 시각적으로 나타낸 그..
기존에는 아래 표처럼 user 1명이 제품을 찜하면 1행에 1개의 상품이 들어가도록 했다.그렇게 findAll로 1번 유저 찾아오기로 찜목록을 확인했다.1명의 uesr가 100개의 상품을 찜하면 100개의 행이 생긴다.이처럼 이렇게 할 경우에는 DB차지가 심하다는 걸 깨달았다. 그래서 새롭게 알게되어 다른 방법으로 찜 상품 폴더를 만들어 보고자 한다.아래처럼 1행에 1개의 상품을 넣는 것이 아니라, 배열을 만들어 찜 상품을 추가할 때는 product_id 필드만 수정하면 되는 방향으로 해보려고 한다. user_id product_id1112132122 puroduct_id에 넣을 때, 배열을 만들어 [1, 2, 3] 이렇게 넣는다.하지만 저장할 때는 Gson라이브러리를 사용해 Json형태로 저장하고..
컴퓨터를 포맷하게 되면서 모든 세팅을 새롭해 해야했다.그러면서 db파일 세팅, 데이터 넣기 등 다 하나하나 설정을 해줘야 했다.프로그램이 실행될 때 mysql 데이터베이스 파일과 더미데이터를 자동으로 넣고 싶었다. 결론은 Docker를 실행할 때 mysql 데이터베이스 파일을 만들고 더미데이터를 넣는 것으로 해결했다. mysql.yml 파일을 만들어서 두고더보기version: '3'services: mysql: image: mysql:latest container_name: my-mysql restart: always environment: MYSQL_ROOT_PASSWORD: 1234 ports: - "3306:3306" volumes: ..
에러 상황 Git bash에서 mysql에 들어가려고 했지만 아래처럼 오류가 뜬다.the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty' 이 오류는 일반적으로 Window환경에서 Git bash 또는 Cygwin과 같은 Unix 호환 쉘을 사용할 때 나타난다.특히, docker, kubectl, 또는 mysql과 같은 상호작용이 필요한 CLI 프로그램을 실행할 때 발생할 수 있다.이 메시지는 터미널이 TTY(Teletypewriter)를 인식하지 못한다는 것을 의미한다. 💡 TTY(Teletypewriter)원래 물리적인 전신 타자기를 의미하지만, 현대 컴퓨팅에서는 터미널 인터페이..
에러 상황사용자가 도서를 등록할 때, 도서 제목만 입력해도 관련 도서명이 검색되도록 하고 싶었다.도서 DB가 필요했다.도서 목록은 알라딘 등 다양한 도서 구매 사이트에서 엑셀로 제공해주었다. 엑셀 파일을 csv파일로 바꾸고 doker에 등록해둔 mysql로 도서 DB를 넣고자 했다. 먼저 파일에 대한 테이블을 만들고 이 안에 데이터를 넣으면 된다.CREATE TABLE book ( PRIMARY KEY (순번), 순번 INT, 구분 VARCHAR(20), 상품명 VARCHAR(255), ItemId VARCHAR(20)..
MSA 프로젝트를 진행하다 보니 마이크로서비스간 통신을 할 때에 Feign Client 과 Kafka 중 어떤 것을 적용해야 하는지 고민 생겼다. 둘다 마이크로서비스 간의 통신은 잘 해주지만, 이 둘의 어디에 적용해야 목적에 알맞게 사용하는 것인지 헷갈렸다.우선 내가 찾아 본 결과.. 💡 Feign ClientFeign Client는 마이크로 서비스간의 통신을 추상화 시켜놓은 객체이다.마이크로서비스 간의 통신을 위해 다른 서비스의 주소나 포트 등의 정보를 직접 입력하지 않고, 서비스의 이름(아이디)를 이용하여 통신할 수 있도록 해준다. 💡 KafkaKafka는 마이크로서비스간의 통신을 처리한다기 보다 데이터를 Kafka의 저장소(Topic)에 순차적으로 저장해 주는 목적을 가지고 있다. 정리 ..
에러 상황@GetMapping("/findByID/{userId}")public ResponseEntity findByID(@PathVariable("userId") Long userId) { Optional userEntity = userService.findByUserId(userId); if (userEntity.isEmpty()) { return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); } ResponseUser returnValue = new ModelMapper().map(userEntity, ResponseUser.class); return ResponseEntity.status(HttpStatus...