목록2023/12 (18)
나의 개발일지
드디어 부트캠프의 마지막 과정인 협업 프로젝트에 들어섰다. 이전에 나 혼자만 github 형상 관리를 하던 것에서 이젠 팀원들과 하게 되었다. 정신 바짝 차리고 잘못 올리지 않게 주의해야겠다. 1. [Fork 복제] 팀 Remote Repository ➡️ 내 Remote Repository 일단 팀장님이 만들어놓은 remote repository에서 fork를 누르면 아래와 같은 화면이 뜬다. 리포지토리 이름을 입력하고 아래 체크박스의 체크를 해제했는데 이는 팀장님이 만들어놓은 main을 포함한 develope 브랜치를 갖고올 수 있게 한다. (체크 할 경우 main 브랜치만 가져오게 됨) 2. [Clone] 내 Remote Reposiotry ➡️ 내 Local Repository 통상적인 Local..
개인 프로젝트를 진행하면서 상품 정보는 미리 db에 넣어주고 사용하기 위해서 data.sql을 사용해 데이터를 넣어주었는데 DB에 제대로 입력이 되지 않았다. insert into mail_template (ID, TEMPLATE_ID, TITLE, CONTENTS) values (1, 'expiredate_remain_3_day', '펀딩 상품 마감일 3일 전 안내' ,'{USER_NAME}님의 {FUNDING_ID}항목의 펀딩 마감일이 3일 남았습니다.'), (2, 'funding_expired', '펀딩 상품 마감 안내' ,'{USER_NAME}님의 {FUNDING_ID}펀딩이 완료되었습니다.배송 받을 주소를 확인해주세요.'); insert into product(id, price, product_..
내 프로젝트에서 스켸줄러가 이용될 구간은 많은데 우선은 친구 요청을 거절했을 때 하루에 한 번씩 REJECT 항목을 찾아 제거 해주려고 한다. 그러기 위해서는 일단 Friend 테이블에 updated_at 컬럼을 추가해야한다. 스켸줄링 기능 구현 1. main application에 @EnableScheduling 추가 2. scheduler를 사용할 Class에 @Component, Method에 @Scheduled추가. @Scheduled 규칙 -> Method는 void타입 -> Method는 매개변수 사용 불가 요렇게 해주면 됨. 참고로 @Component 꼭 해줘야 된다 ! cron 규칙에 따라 원하는 시간 작성하면 끝
동시성이란 ? 어떤 두 사건이 같은 시간에 일어나는 것을 이르는 말 나의 경우는 여러군데서 동시성 이슈가 발생할 수 있다. 현재까지 구현한 기능에서 보면 A->B에게 , B->A에게 동시에 친구요청을 거는 일이 발생한다면 동시성 이슈가 발생하게 된다. Y ?) - A가 B에게 친구요청을 걸었을 때 WAIT 상태의 Friend 컬럼 생성. - A->B 요청이 처리되기 전의 상태로 B가 A에게 친구요청을 걸었을 때 똑같이 WAIT상태의 컬럼 생성. 정상적으로 A->B, B->A 요청이 순차적으로 들어왔다면 B가 A에게 친구요청을 걸수 없다. (이미 상대에게 요청이 들어온 건에 대해서 자신이 또 상대에게 요청을 걸 수 없게 해놨으므로) 위와 같은 상황을 경쟁 상태라고 한다. 경쟁상태(race condition..
트랜잭션이란 ? 트랜잭션은 쪼갤 수 없는 작업의 단위로 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미. 여기서 작업의 단위는 질의어 한문장이 아니다 ! 작업 단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것 ex) 사용자 A가 사용자 B에게 송금시 1. A의 계좌에서 금액 차감 : update로 A의 잔고 변경 2. B의 계죄에 금액 추가 : update로 B의 잔고 변경 작업 단위 : 출금 update + 입금 update를 통틀어 하나의 트랜잭션 이라고 함. =>> 두 쿼리문이 모두 성공적으로 완료되어야만 하나의 작업 완료 트랜잭션의 특징 ACID 트랜잭션의 특징 4가지는 원자성(Atomicity), 일관성(Consistency),..
Pageable : 페이징을 제공하는 인터페이스 getPageNumber() : 현재 페이지 번호를 반환(0부터 시작) getPageSize() : 한 페이지당 최대 항목 수를 반환 getOffset() : 현재 페이지의 시작 위치를 반환 getSort() : 정렬 정보를 반환 next() : 다음 페이지 정보를 반환 previous() : 이전 페이지 정보를 반환 * Pageable을 이용하면 페이지 번호, 페이지당 항목 수, 정렬 정보등을 지정할 수 있다. * Pageable로 지정한 정보들을 가지고 Page 객체를 반환할 수 있고, Page 객체는 조회된 데이터와 페이지 정보를 함께 갖게 된다. PagRequset : Spring Data JPA에서 제공하는 Pageable 구현체 중 하나로, 페이..
해줘야 할 일은 크게 3가지 1. 인덱스 생성 2. 데이터 저장 3. 검색 API 요청 * Elasaticsearch의 Client 자바에서 ES API를 이용하기 위해서 ES에서 만들어 놓은 클라이언트가 필요함. ES 7버전까지 Client는 HighLevelClient와 LowLevelClient가 있음. HighLevelClient는 API를 추상화시켜 놓아서 SDK 형식으로 사용할 수 있음. ES 8버전으로 넘어오면서 이 기능이 더이상 사용되지 않음. Elasticsearch 연결 build.greadle에 아래의 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' Elasticsearch 구..
이전 포스팅에서 따로따로 docker image 다운받고 실행시켜줬는데 이걸 docker-compose를 이용해서 한 번에 실행시키도록 했다. Docker Compose? 여러 개의 컨테이너들을 관리, 실행하기 위한 툴로 각각 독립된 컨테이너의 실행을 정의. yml 포맷으로 작성되고 여러 컨테이너들을 한 번에 관리할 수 있게 도와줌. 작성 법 : 프로젝트 루트 경로에 파일을 만들고 실행 설정을 적어둠. 터미널에서 도커 명령어를 사용하여 컨테이너를 실행하거나 종료시킴. : yml 파일은 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의의 4가지 항목으로 구성. 많이 사용하는 것은 서비스 정의이고, 볼륨과 네트워크는 서비스로 생성된 컨테이너에 선택적으로 사용. : yml파일에서 들여쓰기 할 때 탭은..