분류 전체보기 319

nginx 프록시 설정값

server { listen 443 ssl; // 수신 포트 설정 server_name mydomain.com; // 해당 블록을 처리할 도메인 지정 ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; // 서버 인증서 지정 ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; // 개인키 파일 지정 location {...}location /path { // 요청 경로 분할 proxy_pass http://[컨테이너 or ip]:[port]; // 요청 전달 대상 서버(컨테이너/IP) 지정 proxy_set_header Host $ho..

Back-End/work 2025.11.10

HTTPS 적용 후 grafana & Prometheus No-data

cloudflare로 HTTPS를 적용하고, spring security에서 https 사용을 강제하였더니prometheus가 spring metrics를 가져오지 못하는 상황이 발생하였다. spring의 https 사용 강제를 해제하면 간단하게 해결되지만웬만하면 https 요청만 받아 안전성을 유지하고 싶었다. 또한 grafana도 https로 접근하고 싶다. 따라서 번거롭지만 문제를 찾아서 세팅해보자. grafanagrafana의 https 적용은 간단했다.nginx를 사용하므로 스프링과 같은 도메인 하위 경로로 접근 가능하게 한다.docker로 nginx와 grafana, prometheus를 설치했으므로 아래와 같이 세팅한다. nginx.conf location /grafana/ { ..

Back-End/work 2025.11.10

최적의 행렬 곱셈 [자바]

🧫 문제 분석✔️ 출처최적의 행렬 곱셈 level 3📖 문제 DP로 풀은 문제행렬의 곱을 복습하자면 A(3X5) 와 B(5X7)의 크기의 행렬이 있을때 구 행렬을 곱하면AB = 3X5X7 이된다. 행렬 A, B, C... 이렇게 있을 때ABCD를 만드는 조합은ABC DAB CDA BCD 이렇게 3가지 가 있고ABCDE는 A BCDEAB CDEABC DEABCD E4가지가 있다 여기서 규칙성을 찾을 수 있고 이를 점화식으로 나타낼 수 있다.시작과 끝을 지정하고, 중간을 지정해서 분할한 후 최소값을 찾는 것이다.// A: s,mid까지 곱한 행렬의 행 크기, B: mid+1,e 까지 곱한 행렬의 열 크기DP[s][e] = min(DP[s][mid] + DP[mid+1][e] + multiply(A..

programmers/Lv 3 2025.11.10

MYSQL DB 명 변경

기존 데이터베이스(스키마)의 이름을 잘 못 지어서 변경하는 방법에 대해서 정리하려 한다. mysqldump를 이용해서 모든 데이터를 백업한 뒤새로운 스키마(데이터베이스)를 생성하고 백업한 데이터를 덤프한다. -- 데이터 백업 (덤프)mysqldump -u [사용자명] -p [기존_데이터베이스명] > backup.sql-- 변경할 이름의 새 DB 생성CREATE DATABASE [새 DB 명]-- OR mysql -u [사용자명] -p -e "CREATE DATABASE [새 DB 명]"-- 백업한 덤프 데이터 복원mysql -u root -p [새 DB 명] 데이터 백업과 복원에 관한 공부도 할 수 있어서 좋은 경험을 했다.

Back-End/DB 2025.11.07

CloudFlare Proxy IP 대역폭 보안그룹 설정

AWS에 서버를 배포하고 Cloudflare를 리버스 프록시로 구성하였다.이를 통해 HTTPS 통신을 가능하게하였다. 그런데 AWS 보안 그룹에서 IP 대역을 모든 주소로 받으니 걱정이 되었다.따라서 최소한 CloudFlare의 트래픽만 받기위해 CloudFlare에서 제공하는 IP 대역을 보안 그룹에 인바운드 규칙에 적용하려했다.하지만 수동으로 하긴 어렵다. 따라서 AWS의 Lambda와 EventBrige를 사용하여 자동화한다. 1. Lambda의 최소한의 EC2 보안 그룹 접근 권한을 설정Lambda가 AWS 내 모든 리소스에 접근하게 둘 수는 없다.따라서 GPT의 도움을 받아 인라인으로 액세스 정책을 만든다. 1-1. IAM 정책으로 이동 1-2. 정책 생성 - (JSON) 선택{ "Ver..

Back-End 2025.11.07

2차원 동전 뒤집기 [자바]

🧫 문제 분석✔️ 출처2차원 동전 뒤집기 level 3📖 문제 DFS 로 풀었지만 정석은 bitmask인듯하다. 행 기준으로 현재 행을 뒤집는 경우와 뒤집지 않는 경우를 탐색하여 뒤집는 행을 갖는 조합을 만들고 열 기준으로도 조합을 만들어서 최종적으로 조합을 적용해 동전들을 뒤집고, target과 비교해서 맞다면 뒤집기 카운트와 비교해서 최솟값을 찾는다. 이문제를 풀면서행과 열을 왔다갔다하면서 뒤집어야 나올 수 있는 target이 있을 줄 알았는데 그게 아니였다. 궁금해서 gpt 에게 물어봤다.begin[i][j] ^ R[i] ^ C[j] == target[i][j] 🔅 문제 풀이import java.util.*;class Solution { static int[][] otarg..

programmers/Lv 3 2025.11.07

외래키 설정에 대해

외래키 꼭 필요한가?프로젝트를 하면서 '외래키 설정이 꼭 필요한가?' 라는 의문을 갖게 되었다.물론 내 프로젝트처럼 소규모는 데이터 정합성과 무결성을 위해서 사용해도 성능상 큰 문제는 없다. 그럼에도 불편한 점이 존재한다. 초반 프로젝트를 막 설계하고 적용한 후 변경사항이 없을 수가 없고, 이로 인해 테이블을 변경하게 되는데부모 테이블을 삭제하려니 FK 조건때문에 막히고, 테스트 시 현재 테스트에서 관심사가 아닌 연관관계가 설정된 테이블의 데이터도 함께 넣어줘야하므로 생각보다 번거롭다고 느꼈다. 특정 부모를 참조하는 자식데이터들의 대량 insert 발생 (ex 댓글) 데이터무결성 (Integrity) : “데이터 자체가 논리적으로 올바른가?” — 잘못된 값이 들어오지 않도록 보호하는 제약..

Back-End/DB 2025.11.04

길 찾기 게임 [자바]

🧫 문제 분석✔️ 출처길 찾기 게임 level 3📖 문제생각보다 재밌는 문제였다. 입력으로 노드의 좌표값만 주어지고 해당 조건에 맞게 이진트리를 만들어야하는데 최상위 루트 부터 시작해서 자식노드를 추가하는 식으로 생각했다. 따라서 y값을 기준으로 내림차순 정렬하고, 같다면 x값을 기준으로 오름차순 정렬한다. 좀 복잡한데 코드를 보면 그나마 이해가 된다. 자식을 추가할때 주의할 점은다른 노드가 자식으로 가져야할 노드를 자식노드로 설정하게 될 때도 있다.이를 방지하기 위해서는 추가가능한 범위를 지정해줘야한다. 즉, 각 서브트리의 범위 x의 범위를 지정해서 해당 범위 안에 든 노드라면 자식으로 추가하는 것이다.범위는 트리 구성 조건 5,6번을 참고하면 된다. 예시) 위와 같은 케이스가 발생할 수 있다..

programmers/Kakao 2025.10.29

셔틀버스 [자바]

🧫 문제 분석✔️ 출처[1차] 셔틀버스 level 3📖 문제 시간 문제콘이 셔틀을 타되 최대한 늦게 탈 수 있도록 하면된다. 같은 시각대에 타면 해당 시각대의 맨 마지막에 타게되는 점을 조심하면 된다. 각 회차별 시간대에 따라 탈 수 있는 인원들을 태우고현재 셔틀에 탄 인원이 다 같은 시각이면 (해당 시각 - 1분) 에 타고시각이 다 다르면 (제일 늦은 시각의 -1분)에 타면 된다. 🔅 문제 풀이import java.util.*;class Solution { // 도착 시간중 제일 늦은 시각 //같은 시각에 도착한 크루 중 대기열에서 제일 뒤 // 23:59분 전까지 public String solution(int n, int t, int m, String[] t..

programmers/Kakao 2025.10.23

디스크 컨트롤러 [자바]

🧫 문제 분석✔️ 출처디스크 컨트롤러 level 3📖 문제 우선순위 큐를 이용한 시간 관련 문제 입력이 요청 시간 순으로 들어오는게 아니라서 요청 시간별로 정렬해주고우선순위 큐는 문제에서 말한대로 정렬해준다. 현재 시간에 요청된 작업이 있다면 우선순위 큐에 넣고 작업을 꺼내서 처리한다. 만약 작업이 없다면, 즉, 현재 시간까지 요청된 작업이 없다면 현재 작업 인덱스의 작업 요청 시간으로 현재시간을 변경한다. 🔅 문제 풀이import java.util.*;class Solution { class Job { int num, req, cost; public Job(int num, int req, int cost) { this.num..

programmers/Lv 3 2025.10.22