Back-End 61

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

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

외래키 설정에 대해

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

Back-End/DB 2025.11.04

geojson을 스프링을 통해서 MySQL에 넣어보자

https://github.com/vuski/admdongkor GitHub - vuski/admdongkor: 대한민국 행정동 경계 파일대한민국 행정동 경계 파일. Contribute to vuski/admdongkor development by creating an account on GitHub.github.com우리나라 행정동 경계는 이미 다른 분이 만드셔서 이를 활용하였다. json 파일을 열어서 분석해보자 제일 위의 사직동을 예시로 보겠다.{ "type": "FeatureCollection", "name": "20250401", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84..

Back-End/work 2025.10.01

Real My SQL 8.0 [공간 데이터]

최근 당근의 지역기반 데이터 조회에 대한 궁금증이 생겨서 어떻게 공간데이터를 처리하는 지 알아보기위해먼저 공간 데이터에 대한 학습이 필요하여 정리하게 되었다. 공간 데이터 타입mysql 서버는 OpenGIS에서 제시하는 표준을 준수OpenGIS에서 제공하는 WKT(Well Known Text), WKB(Well Known Binary)를 이용해공간 데이터를 관리할 수 있게 지원 OpenGIS는 지리 공간 정보 기술의 개방형 표준이다. Open Geospatial Consortium(OGC)에서 개발한 지리 공간 데이터 및 서비스에 대한 일련의 기술 사양을 의미한다. WKT : 공간데이터를 글자로 적음, EX) POINT(1,1) 데이터 타입 GEOMETRY는 슈퍼 타입으로 셋 중 아무거나 다 받을 수..

Back-End/DB 2025.09.25

Real MySQL 8.0 [실행계획 : Extra 칼럼]

내용이 많아 따로 글을 나눠서 작성한다. Extra 칼럼쿼리 실행 계획에서 성능에 관련된 중요한 내용이 자주 표시됨 const row not foundconst 접근 방법으로 테이블을 읽었지만 실제로 해당 테이블에 레코드가 1개도 없다면 표시Deleting all rows 테이블의 모든 레코드를 삭제하는 기능을 제공하는 경우 (Where 없이 모두 삭제)8.0부터 삭제되고, where 없이 삭제를 권장하지 않음, Truncate Table 사용distinct중복제거, 중복된 값들은 읽지 않고 무시함 FirstMach(table)IN(subquery) 형태의 세미 조인 을 EXISTS(subquery) 형태로 튜닝한 것과 비슷하게 실행되며, 서브 쿼리를 조인으로 처리하며, 일치하는 레코드 1건만 찾으면 더..

Back-End/DB 2025.09.03

Real MySQL 8.0 [실행계획]

대부분 DBMS는 많은 데이터를 안전하게 저장 및 관리 사용자가 원하는 데이터 빠르게 조회가 주 목적 이를 달성하기 위해 옵티마이저가 사용자의 쿼리를 최적으로 처리될 수 있게 하는 쿼리의 실행 계획을 수립할 수 있어야함 EXPLAIN 명령으로 옵티마이저가 수립한 실행 계획 확인 MYSQL 5.7버전까지 테이블과 인덱스에 대한 개괄적인 정보를 가지고 실행계획을 수립함 8.0부터 히스토그램 도입 히스토그램 : 인덱스되지 않은 칼럼들, 인덱스된 칼럼들의 데이터 분포도 통계 정보는 단순히 인덱스된 칼럼의 유니크한 값의 개수 정도만 가져 옵티마이저가 최적의 실행계획을 수립하기에는 많이 부족 실제 인덱스의 일부 페이지를 랜덤으로 가져와 참조하는 방식 사용 8.0부터 칼럼 데이터 분포도를 참조 가능한 히스토그램 정보..

Back-End/DB 2025.09.01

락에 대하여

흔히 DB에서 동시성 제어를 위해 사용하는 락에 대해서 다시 공부할 필요가 있어정리하고 이해한다. 락은 말 그대로 잠금이다. 동시성 제어를 위해 사용되며 3가지 종류가 있다.비관적 락(Pessimistic Lock)낙관적 락(Optimistic Lock)분산 락(Distrubuted Lock) 비관적 락DB나 멀티 스레드 환경에서 여러 사용자가 동시에 동일 레코드에 접근할 때 충돌을 방지하기 위해미리 락을 거는 방식으로, 사실상 의미그대로 잠금을 거는 것이다. 동시 접근이 많을 경우, 충돌이 많이 일어날 경우 사용한다. 비관적 락 종류Shared Lock(공유 락, S-Lock)데이터 읽기 시 사용 하는 락여러 트랜잭션이 동시 공유락 가능 (동시 읽기 허용)배타 락이 걸리면 동시 접근 불가Exclusi..

Back-End/DB 2025.08.20