DB를 조회할 때, 조회를 할때마다 테이블 전체를 조회하는 건 너무 비효율적이다. 수십, 수백 단위의 데이터에서는 별 문제가 안될 수 있지만, 수백, 수천만 이상의 데이터가 쌓여있을 때는 큰 문제가 된다. 이럴 때 INDEX를 사용한다. 1. INDEX 란? 데이터베이스에서 인덱스(INDEX)는 쓰기 속도가 느리고 저장 공간이 늘어나는 대신 검색 작업의 속도를 향상시키는 데이터 구조이다. 인덱스의 가장 큰 특징은 데이터들이 정렬이 되어있다는 점이다. 이 특징으로 인해 인덱스를 사용하면 DBMS(데이터베이스 관리 시스템)가 조건 검색을 할 때, 테이블에서 특정 데이터 행을 매우 빠르게 찾고 검색할 수 있다. WHERE 절 테이블의 레코드는 순서 없이 저장되기 때문에 특정 조건에 맞는 데이터를 찾아낼 때도 ..
내가 운영/개발 하는 서비스에선 사용자나, 구분이 필요한 무언가를 위해 13자리의 난수를 생성해 아이디를 부여한다. 난수 생성기를 올바르게 사용하지 못 한다면, 동일한 아이디가 생성되고, 그 아이디로 특정 데이터를 insert했을 때 DB에선 PK 에러가 발생한다. 빼도 박도 못하는 서버 에러다. 최근 로스트아크에서 카드 확률에 대한 논쟁이 있었었다. 영웅 카드 팩 230개를 개봉했다. 첫 개봉에서 사이카 카드 5장, 피요르긴 카드 5장이 등장했다. 190개를 개봉했지만 똑같이 사이카, 피요르긴 카드 5장씩만 나타났다. 스마일게이트의 설명에 따르면 해당 사례는 시스템 구조상 14억분의 1 확률로 발생할 수 있는 버그 현상이라고 설명했다. 출처 : 게임톡(https://www.gametoc.co.kr) 이..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/134240 2. 풀이 팰린드롬을 만드는 문제 칼로리 높은 것을 먼저먹기 때문에, 마지막 행렬의 index부터 처리하도록 한다. 매우 난이도가 낮은 문제다. 3. 코드 class Solution { public String solution(int[] food) { String answer = "0"; for(int i=food.length-1; i>=1;i--){ if(food[i] / 2 > 0) { String eatable = String.valueOf(i); for(int j =0; j
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/135808 2. 풀이 1. 우선순위 큐를 역순정렬되도록 정의 2. 우선순위 큐에 삽입한다. 반복문을 사용하긴 했지만, N번이기 때문에 별 문제는 없다. 3. while문을 통해 이익 계산식을 수행한다. - 역순 정렬을 했기 때문에, 한 상자에 들어가는 마지막 사과가 전체 가격을 결정한다. 4. 마지막 값만 관심이 있고 나머진 다 pop 처리 3. 코드 import java.util.Collections; import java.util.PriorityQueue; class Solution { public int solution(int k, int m, int[] score) { // 우선순위..
이전 글에 이어서 서버에서 HTTP 요청을 하는 방법에 대한 정리 글이다. 이전 글에선 JAVA에서 사용되는 API를 살펴봤다면, 이번에는 Spring에서 제공하는 방식에 대해 알아보려 한다. Spring Framework 에서는 HTTP 요청을 위해 대표적으로 세 가지 API를 지원한다. RestTemplate Spring 3부터 지원, 전통적인 blocking/동기식 HTTP request 기능 제공 AsyncRestTemplate Spring 4에 추가된 RestTemplate에 비동기 기능을 추가한 방식 WebClient Spring 5에 추가된 RestTemplate을 보완하기 위한 HTTP requests non-blocking/reactive 클라이언트 크게 RestTemplate/WebCl..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/118666 2. 풀이 성격 유형의 갯수가 많지 않기 때문에 하드 코딩하고 풀면 쉽다. 그리고 성격 유형의 점수를 직관적으로 구분하기 위해 모르겠음을 0점으로 fix 해서 result 행렬에 성격 유형 점수의 통계를 구했다. 3. 코드 class Solution { public String solution(String[] survey, int[] choices) { String answer = ""; int[] score = new int[]{-3,-2,-1,0,1,2,3}; String[] type = new String[]{"RT","CF","JM","AN"}; String[] rever..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/136798 2. 풀이 요약하면, number 까지의 모든 수의 약수를 구하고 limit과 비교하는 문제다. number의 최대가 10만이기 때문에, 일반적인 약수를 구하는 방법(이차원 for문과 나머지로 비교하는 공식으로 만든 방법)으로 구현하면 특정 테스트 케이스에서 timeout이 난다. 그래서 약수를 구하는 공식의 계산량을 줄이는 방법이 필요하다. 나는 아래와 같은 방식으로 구현했다. 1을 약수로 갖는 수에 count 추가 2를 약수로 갖는 수에 count 추가 3을 약수로 갖는 수에 count 추가 .... number를 약수로 갖는 수에 count 추가 이러면 number 이하의 ..
서버를 운영하다보면 다양한 API Endpoint를 만들게된다. 단순한 DB CRUD만 처리하는 경우도 있지만, 외부 API를 연동해 정보를 가져오는 경우도 있다. 이럴때 서버에서 Request를 만들어 외부 서버에 요청을 보내고 Response를 받아야한다. 자바와 스프링에서는 다양한 HTTP Request 만드는 방법을 제공한다. Java 내부에서도 제공하고, Spring Framework에서도 제공하고, 별도의 외부라이브러리를 쓸 수 도 있다. 우선 자바에서의 내용부터 정리한다. 1. HttpURLConnection HttpURLConnection은 Java에서 제공하는 표준 라이브러리이다. 때문에 외부 종속성이 필요하지 않다는 큰 장점이 있다. 상대적으로 사용하기 쉽고 요청할 수 있는 요청 유형과..
- Total
- Today
- Yesterday
- EKS
- Spring
- AOP
- Log
- openAI API
- springboot
- 티스토리챌린지
- ChatGPT
- Elastic cloud
- java
- 오블완
- JWT
- MySQL
- 후쿠오카
- CloudFront
- OpenAI
- 람다
- Kotlin
- GIT
- AWS
- docker
- 스프링부트
- OpenFeign
- serverless
- lambda
- terraform
- AWS EC2
- elasticsearch
- cache
- S3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |