일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 스프링 핵심 원리
- 자바 ORM 표준 JPA 프로그래밍 7장
- 스프링 컨테이너와 스프링 빈
- KotlinInAction
- 20055
- Kotlin In Action
- 20055 컨베이어 벨트 위의 로봇
- 코틸린인액션
- 백준
- 스프링 핵심 원리 - 기본편
- Kotlin in action 10장
- 기능개발 python
- 백준 13460 Python
- Kotlin in action 3장
- Kotlin
- 객체 지향 설계와 스프링
- kotlin in action 정리
- spring
- 고급매핑
- Python
- Kotlin in action 6장
- 컨베이어 벨트 위의 로봇 Python
- Kotlin in action 5장
- 스프링 핵심 원리 이해
- 13460 구슬탈출 2
- 싱글톤 컨테이너
- 코틀린인액션
- 코틀린
- 백준 20055 컨베이어 벨트 위의 로봇
- 7장 고급매핑
- Today
- Total
기록하는 습관
문제 www.acmicpc.net/problem/2346 코드 from collections import deque N = int(input()) q = deque([(num, idx) for idx, num in enumerate(map(int, input().split()))]) answer = [] while q: num, idx = q.popleft() answer.append(idx+1) if q and num > 0: q.rotate(-1 * (num-1)) elif q and num < 0: q.rotate(-1 * num) print(" ".join(map(str,answer))) 풀이 1. 첫번째 숫자는 우선적으로 popleft()를 통해 꺼낸다. 2-1. q에 풍선이 남아있고, num이..
1. nGrinder 이슈해결 nGrinder에서 run_agent.bat 실행 시 에러 발생. 특정 위치에 jvm.dll이 없다는 뜻이므로 해당 위치에 jvm.dll 파일을 복사하여 해결함. (참고 : https://kingle1024.tistory.com/206) Can't not set headers 에러 발생 → 헤더 설정이 제대로 되지 않아서 발생하는 이슈. 우리 경우는 헤더에 인증 토큰을 넣어 전달해야 하는데 전달이 제대로 되지 않음. 배열 객체로 헤더를 설정해주고 request.GET에 url과 headers를 넣어줌. (참고: https://gist.github.com/ihoneymon/a83b22a42795b349c389a883a7bbf356) GET content detail에 대한 성..
#1 추천 피드 캐싱을 쓰는 이유는? -> 유동적인 값을 커서로 사용할 수 없는 페이징 방식 때문이다. 그래서 캐싱된 데이터만 api 호출 시 pull 하는 방식으로 변경 10분 단위로 카테고리 별 좋아요 기준으로 내림차순 정렬된 게시글들을 캐싱 // 채택 !! 정렬된 데이터를 캐싱 해 놓으면 유저들에게 해당하는 카테고리의 데이터를 바로 줄 수 있으며, Redis에서 Sorted Set 자료구조를 통해 데이터를 효율적으로 관리 가능하기 때문이다. 카테고리 별로 전체 content 중 범위를 나누어 n개의 content를 캐싱하고, 캐싱된 contents 범위 안에서 pull(read)할때 마다 유동적으로 바뀐 좋아요 수를 기준으로 정렬해서 read 시켜준다. * batch vs ca..
실시간 랭킹 업데이트 프로세스 ** user1 -> user2 Ranking 관계를 여러 개 둘 경우 Ranking { score: 최종 점수, like: 좋아요 개수, comment: 댓글 개수, follow: follow 여부, date: 날짜 } like, comment, 개수를 넣은 이유는 total 점수 뿐만 아니라, 나중에 like, comment 별로도 실시간랭킹을 줄 수 있게 하기 위해. User1 -> user2 에게 like, comment action을 한다면 user1 -> user2 FOLLOW 관계가 있으면 user1 -> user2에게 해당 date의 RANKING Relation이 존재하는지 확인 있으면 like, comment, total score 점수 업데이트. 없으면 ..
실시간 친밀도 랭킹 ** MQ를 프로젝트에 도입하게 된 이유 친밀도 랭킹을 계산하는 것은 사용자에게 즉각적으로 실시간 응답이 되지 않아도 되는 프로세스로, 백엔드에서 비동기적으로 처리할 수 있는 배치 프로세스이다. 처음엔 하루 주기의 배치 프로세스로 작업을 하려고 했지만 큐를 활용해 최대한 배치 작업들을 실시간 업데이트를 하며 효율적으로 처리하고자 했다. 좋아요/댓글 프로세스에서 score 계산까지 같이 하는 것이 가장 좋지만, 사용자가 많아지고 좋아요/댓글 요청이 많아질수록 Ranking 계산 때문에 delay가 생길 수 있으므로 성능 상 문제가 생길 수 있다. 따라서, MQ를 도입하여 좋아요, 댓글 계산 요청을 MQ에 보내 사용자가 바로 다음 액션을 취할 수 있도록 하고 계산 처리는 MQ에서 꺼내 별..
Node.js 와 MySQL 연동 시 오류 Client does not support authentication protocol requested by server; consider upgrading MySQL client 이런 오류가 떴다. 찾아보니 MySQL 8.0 부터 외부접속 시 로컬 비밀번호가 아니라 암호화된 다른 비밀번호를 사용하도록 바뀌었다. 그래서 나는 msi server reconfigure에서 auth를 legacy로 바꿔준 뒤, ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; FLUSH PRIVILEGES; ALTER USER 'devcamp'@'localhost' IDENTIFIED WITH mys..
1. MySQL 유저 생성하기 관리자 명령 프롬프트를 켜고 mysql -u root -p 를 입력하여 root 계정으로 접속한다. 2. user 생성하기 create user '아이디' identified by '비밀번호'; 3. 권한 부여하기 grant all privileges on *.* to '아이디'@'%'; 4. 이후 일반 계정으로 접속하기 mysql -u devcamp -p 5. show databases 현재 devcamp 계정에는 다음과 같은 데이터베이스들이 있는 것을 확인할 수 있다. 6. 데이터베이스 생성하기 create database if not exists 데이터베이스명; 7. 만든 데이터베이스 사용하기 use 데이터베이스명;