| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- DI
- Routing Key
- JPQL
- Web
- @Transactional
- Spring Container
- JWT
- dockerhub
- 쿠버네티스
- redis
- kafka
- 컨테이너
- docker compose
- @ComponentScan
- AWS
- 페이징
- JPA
- DLQ
- 지연 로딩
- Spring Data JPA
- JdbcTemplate
- Spring
- docker
- Dead Letter Queue
- 서블릿 컨테이너
- mybatis
- CORS
- MSA
- securitycontextholderfilter
- 스프링 부트
- Today
- Total
목록2026/01 (9)
look-forest
SpringBoot에서 시스템 환경변수를 사용하려면 어떻게 할까?@RestControllerpublic class AppController { @Value("${My_ACCOUNT:default}") private String myAccount; @Value("${My_PASSWORD:default}") private String myPassword; @GetMapping("/") public String home(){ return "my account is " + myAccount + " and password is " + myPassword; }}백엔드(Spring Boot) 서버에 환경변수 등록해 사용하기매니페스트 파일에 환경 변수를 등록하기-> 컨테이너 자체의 환경 변수로 설정하는 것이다apiV..
디플로이먼트(Deployment)란?파드를 묶음으로 쉽게 관리할 수 있는 기능이다.실무에서는 보토 서버를 작동시킬 때 파드를 수동 배포하지 않고. 디플로이먼트를 활용한다.그리고 앞서 파드를 여러개 띄울 때의 한계를 살펴보았듯이, 여러 파드를 띄우거나 관리하는데 디플로이먼트가 유용하다. 디플로이먼트의 장점파드의 수를 지정하는 대로 여러 개의 파드를 쉽게 생성할 수 있음파드가 비정상적으로 종료된 경우, 알아서 새로 파드를 생성해 파드 수를 유지한다.동일한 구성의 여러 파드를 일괄적으로 일시 중지, 삭제, 업데이트 하기 쉽다.디플로이먼트의 구조디플로이먼트가 레플리카셋을 관리하고, 레플리카셋이 여러 파드를 관리하는 구조이다.레플리카(Replica): 복제본레플리카셋(ReplicaSet): 복제본끼리의 묶음[예제..
파드(Pod)란?도커에서는 하나의 프로그램을 실행시키는 단위를 컨테이너라고 한다.쿠버네티스에서는 하나의 프로그램을 실행시키는 단위를 파드(Pod)라고 한다.일반적으로 하나의 파드가 하나의 (도커)컨테이너를 가진다.(여러 컨테이너 가질 수도 있긴하다) 쿠버네티스도 도커처럼 이미지를 기반으로 파드를 띄워 실행시킨다.서버를 파드로 띄워보기파드를 생성할 때, CLI를 활용하는 방법이 있고, yaml 파일을 활용하는 방법이 있다.보통 현업에서는 일일이 CLI를 치지않고 yaml 파일을 활용하는 경우가 많다.이러한 yaml 파일을 보고 매니페스트 파일(Manifest File)이라고 부른다.매니페스트 파일이란, 쿠버네티스에서 다양한 리소스(파드, 서비스, 볼륨 등)를 생성하고 관리하기 위해 사용하는 파일이다.(Do..
쿠버네티스(Kubernetes)란?Docker로 생성한 다수의 컨테이너를 효율적으로 배포, 확장 및 관리(Container Orchestration) 하기 위한 오픈 소스 시스템.Docker compose처럼 다수의 컨테이너를 쉽게 관리하기 위해 활용하며, 보다 더 많은 컨테이너를 다룰 때 사용한다. 장점컨테이너 관리 자동화 (배포, 확장, 업데이트)부하 분산 (로드밸런싱)쉬운 스케일링셀프 힐링 (자동 재부팅) 설치 방법실무에서 직접 쿠버네티스를 설치할 일은 많지 않으므로, Docker Desktop을 활용해 쉽게 설치해서 사용하자. 쿠버네티스에 명령어를 입력할 수 있게 해주는 CLI 툴인 kubectl(Kubernetes Control)도 설치하자. 참고 자료 & 이미지 출처비전공자도 이해할 수 있는 ..
댓글 기능을 통해 계층형 구조에서 어떻게 페이징을 처리할 수 있는지 알아보자. 댓글 계층 구조를 데이터베이스에 표현하는 주요 설계 방식은 2가지로 나눌 수 있는데,depth에 따라 Adjacency List(최대 2 depth)와 Path Enumeration(무한 depth)로 나눌 수 있고, 각 방식은 데이터 구조가 다르다.댓글 목록 조회 - 최대 2 depth Adjacency List (인접 리스트) 방식단순히 시간 순으로 나열할 수 없다. 계층에 대한 고려가 필요하다.단순히 댓글의 생성 시간(commentId)로 정렬하면 안된다. 계층 관계에서는 더 늦게 작성된 대댓글이 먼저 노출될 수 있기 때문. 댓글이 조회되는 규칙을 살펴보자.1. 상위 댓글은 하위 댓글(대댓글)보다 반드시 먼저 생성된다.2..
게시글 CRUD API를 만들고, 대용량 데이터를 조회하는 상황을 가정하자.테이블 구조는 다음과 같다.분산 데이터베이스를 가정하기 때문에 게시글이 N개의 샤드로 분산되는 상황을 고려한다.Shard Key = board_id (게시판 단위로 게시글 목록을 조회하므로)Hash-based Sharding이라고 가정Primary Key는 오름차순 유니크 숫자를 애플리케이션에서 직접 생성한다. (Snowflake, TSID 등)페이징대규모 데이터에서 게시글 목록 조회는 왜 복잡할까?모든 데이터를 한 번에 보여줄 수 없다. (메모리, 네트워크, 성능 상 제약)=> 페이징 필요 페이징 처리를 하려면?디스크에 저장된 모든 데이터를 메모리로 가져오고, 특정 페이지만 추출하는 것은 비효율적디스크 I/O 비용메모리 용량 초..
분산 데이터베이스 환경에서는 PK를 어떻게 생성하면 좋을까?나는 당연히 auto_increment가 간단하고 좋을 것이라고 생각했다. 후보DB auto_increment유니크 문자열 or 숫자유니크 정렬 문자열유니크 정렬 숫자DB auto_increment문제점1. 분산 데이터베이스 환경에서 DB auto_increment를 쓸 경우, PK가 중복될 수 있기 때문에 식별자의 유일성이 보장되지 않는다!2. 클라이언트 측에 노출하면 보안 문제(데이터 개수 또는 특정 시점의 식별자 예측 가능) ex) 방금 가입했더니 user_id가 1000이라면 -> 1000명의 회원이 있음 유추 가능 장점간단하므로 다음 상황에서 유리보안적인 문제를 크게 고려하지 않는 상황단일 DB를 사용하거나 애플리케이션에서 PK ..
데이터베이스 트래픽을 분산하는 방법(Sharding), 고가용성을 확보하는 방법(Replica)을 알아보자.분산 데이터베이스서비스가 활성화 되면서 DB에 저장할 데이터와 트래픽이 많아졌다.먼저 Scale-Up을 적용했으나 얼마 후 서비스가 더욱 활성화되면서 단일 DB로 처리하기엔 부담이 커졌다.Scale-Out을 적용해 DB를 하나 더 늘렸다. 그렇다면, 데이터는 각 DB에 어떻게 분산될 수 있을까?Sharding샤딩을 이용해 데이터를 여러 DB에 분산할 수 있다.Sharding: 데이터를 여러 데이터베이스에 분산하여 저장하는 기술Shard: 샤딩된 각각의 데이터 단위샤딩을 이용하면각 샤드에 데이터가 분산 저장되므로 성능 및 공간 이점이 생긴다.하지만, 데이터의 분리로 인해 조인 및 트랜잭션 관리가 복잡..