일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 다대일
- 백트래킹
- 스토어드 프로시저
- eager
- 스프링 폼
- 동적sql
- FetchType
- 데코레이터
- 다대다
- BOJ
- 연관관계
- 즉시로딩
- 지연로딩
- CHECK OPTION
- shared lock
- 유니크제약조건
- fetch
- PS
- 낙관적락
- exclusive lock
- SQL프로그래밍
- dfs
- 비관적락
- 연결리스트
- 힙
- JPQL
- execute
- 이진탐색
- 일대다
- querydsl
- Today
- Total
목록전체 글 (556)
흰 스타렉스에서 내가 내리지
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cEfodA/btsF1c7Tait/dKZVSiZ416uwWmVhrA0MRK/img.png)
문제 원인 파악 Github Actions 로, 도커 이미지를 빌드한 후, ECS 에 자동 배포를 하고 있다. ECS 는 EC2 t2.micro(프리티어) 를 기반으로 동작중이다. CD 중에 memory 부족 에러가 발생하여 배포에 실패하였다. 해결 전에는 CPU 부족이 아닌 메모리 부족이라고 에러 메시지가 떴었다 why?? - (Rolling Update) 나는 ECS 에서 "롤링 업데이트 (Rolling Update)" 라고 불리는 업데이트 전략을 사용하고 있다. 롤링 업데이트 전략은, 서비스를 업데이트할 때 ECS 가 자동으로 새 버전의 태스크 인스턴스를 시작하고, 새 인스턴스가 정상적으로 시작되고 서비스에 트래픽을 성공적으로 수용할 수 있음을 확인한 후에 기존 버전의 태스크 인스턴스를 순차적으로 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b7vUtO/btsFTdeQoh8/QxTJj9KEP8rjPGhuQ8jvVk/img.png)
pytesseract 는 Python 에서 사용할 수 있는 OCR (광학 문자 인식) 도구이다. Tesseract-OCR 엔진을 기반으로 하며, 이미지에서 텍스트를 추출하는 데 사용된다. 설치하고 사용하기 위해서는 먼저 Tesseract-OCR 엔진이 시스템에 설치되어 있어야 한다. Mac 에서는 Homebrew 를 사용하여 Tesseract-OCR 엔진을 설치한다. brew install tesseract Tesseract-OCR 엔진이 설치되었다면, Python 환경에 pytesseract 를 설치한다. pip 명령어를 사용한다. pip3 install pytesseract pip3 install pillow from PIL import Image import pytesseract import cv2..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/chgx0r/btsFNnHonwl/ZqA1x6PzG0J1kLkIkNg7E1/img.png)
프롤로그 : 블로그를 처음 열었을 때 보이는 화면 프롤로그 관리로 들어간다. 1. 글 강조 2. 이미지 강조 를 선택할 수 있다. 카테고리 생성- 계층구조 가능 이게 뭐냐면, 이거 보여주냐 마냐 이다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bR6Bjj/btsFOlvqdIb/UkbakLxDrM7sOn2VJwWZuk/img.png)
결과물 총 10개의 위젯을 넣어줄 건데, 이전 글에서는 위젯 한 개당 하나의 링크를 넣어주는 형태여서 위젯 코드에 a 태그와 img 태그를 사용했었다. 오늘은 사용하지 않는 위젯도 생기기 때문에 여백 위젯코드를 만들어본다. 이런 식으로 하면, 내가 원하는 높이로 빈 위젯을 넣기가 수월해진다. 높이가 600짜리 5개, 170짜리 5개 위젯을 만들어서 넣어 보겠다. 위젯 소스를 넣어주고, 높이 부분을 600으로 한다. 이걸 5개 만든다. 그리고 상단에 5개 배치 이제 아래쪽에는 높이가 170 인 위젯을 5개 만들어본다. 그리고 높이 600 짜리 위젯 아래 배치를 해준다. 적용을 누르고 블로그로 돌아가보면, 아래와 같이 위젯이 적용되어 있는 것을 볼 수 있다. 이제 이전 글에서 했던것..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bg31dK/btsFK5A1VUs/fPgFeKjKgcCcrKZojC6vP0/img.png)
결과물 위쪽에 내 메뉴에서 스킨 변경을 클릭하면 다양한 스킨으로 바꿀 수 있다. 여기서 '하이라이트' 스킨을 적용한다. 스킨은 우리가 디자인해서 바꿀거라 아무거나 설정해도 된다.초기 세팅 그대로 있어도 상관없다.그러나 레이아웃은 바꿔줘야 한다.왼쪽 탭에서 '레이아웃-위젯 설정을 누른다.' 홈페이지형 블로그를 만들기 위해 레이아웃을 오른쪽에서 두 번째 있는 걸로 설정을 해준다. 남겨두고, 블로그에 글쓰기 하러간다. 제목은 투명위젯이라 하고, 저장해둔 투명위젯 두 가지를 사진으로 첨부해둔다.구분하기 쉽게 사진 설명에 사이즈도 적어두었다. 글을 발행할때는, 비공개로 해서 나만 볼 수 있게 한다. 우리는 여기에 올려둔 투명위젯에 이미지 주소를 사용할 것이다. 우리는 여기에 올려둔 투명위젯에 이..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/btLurv/btsFJH7rZao/SVOKSm4S6UTZLb7e51o8hk/img.png)
테이블에서 데이터를 랜덤으로 10개 추출해야 하는 상황. JPQL 에서는 LIMIT 키워드를 지원하지 않는다. 그래서 나는 지금껏 Native Query 로 작성해왔다. JPQL 로 할 방법이 없을까 탐색하던 중, JPQL 로 구현하는 방법을 찾았다. 우선, 1. RAND() 부분과 2. LIMIT 부분으로 나누어 구현해야 한다. 1. RAND() JPQL 의 FUNCTION 을 이용한다. 2. LIMIT N JPQL 에서는 LIMIT 키워드를 제공하지 않기 때문에, JPA query method 의 결과를 제한하는 방식으로 구현한다. 이를 위해 Pageable 을 인자로 넘겨주는 방식을 택했다. Pageable 인스턴스는 PageRequest.of() 메서드를 이용하여 생성했다. pageNumber 는..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bNKFty/btsFF3o5a7Y/TQXqGNPE8D09sTRsYqss6k/img.png)
응답시간(Response Time) 클라이언트가 서버에 요청을 하고 그 요청에 대한 응답을 받을 때까지 걸린 시간을 의미한다. 응답 시간은 아래의 두가지로 분류 가능하다. 처리 시간(Processing Time) : 실제 서버가 요청을 처리하는데 걸린 시간 대기 시간(Latency Time) : 클라이언트와 서버간에 데이터를 주고 받는데 걸리는 시간 응답시간(Respose Time) = [동시 사용자 수 / 초당 요청 수(TPS)] - 인지시간(Think Time) TPS(Throughput) 서버가 초당 처리할 수 있는 요청의 개수를 나타낸다. TPS 가 높을 수록 초당 처리할 수 있는 요청의 수가 많다. 초당 요청 수(TPS) = 동시 사용자 수 / 응답시간(Response Time) + 인지시간(T..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/npDh8/btsFFZAqzXk/O7NBnXonj0KfgqAMebG10K/img.png)
해결 방법 : sudo rm /usr/local/bin/docker-credential-osxkeychain sudo vi ~/.docker/config.json "credsStore": "" 으로 수정 후 도커를 재시작한다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bMdTl8/btsEP6APUPe/PNBlxkCVGFNPr6dbTNe5DK/img.png)
들어가며 API 하나에 쿼리가 너무 많이 발생하여, 이를 어떻게 하면 한 두번으로 줄일 수 있을까? 하고 8시간 동안 삽질한 후기다. ERD Folder 에는 Term 이 여러개 들어있다. Convert 해서 Folder 의 컬럼에 리스트 문자열로 저장했기 때문에, 직접적으로 연관관계는 없다. Term 은 Comment 들을 가지고 있고, Comment 와 Comment_like 가 1대다 관계이다. 구현하고자 하는 API : 1. FolderId 를 통해 Folder 에 들어있는 TermId 들을 불러온다. 2. 각각의 Term 에 대해서, Term 세부 정보와 Comment 들, 그리고 각각의 Comment 는 Comment_Like 와 Join 하여 좋아요 여부를 불러와야 한다. 처음에 대충 짜본 ..
# findById 를 사용했을 경우 Term termPS = termRepository.findById(requestDto.getTermId()) .orElseThrow(); Member memberPS = memberRepository.findById(memberId) .orElseThrow(); // 북마크 테이블을 업데이트 합니다. Optional termBookmarkOptional = termBookmarkRepository.findByTermAndMember(termPS, memberPS); if (termBookmarkOptional.isEmpty()){ termBookmarkRepository.save(TermBookmark.of(termPS, memberPS)); }else{ termB..