전체 글

카테고리 없음

QueryDSL (복잡한 검색기능 시)

build.gradle에 (spring 3. x)->dependencies { // Querydsl implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" }-----------------------------------QuerydslConfig.java호환성: 모든 버전 공통 (패키지..

카테고리 없음

동시성

[Redisson 분산락]{RedisConfig.java (global/config/)}package com.toss.assignment.global.config;import org.redisson.Redisson;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class RedisConf..

카테고리 없음

주제별 도메인

주제핵심 키워드 (임팩트 포인트)비즈니스 로직의 핵심간편 송금동시성(Lock), 정합성, 트랜잭션A 잔액 감소와 B 잔액 증가가 '원자적'으로 일어나는가? 동시에 10건이 들어와도 정답인가?포인트/쿠폰선착순, Redis, 처리 속도100명 선착순인데 101명이 받아가지는 않는가? DB 부하를 줄이기 위해 Redis를 썼는가?내 차 자산외부 API, 캐싱, 에러 핸들링외부 기관 API가 느리거나 죽었을 때 내 서버도 죽는가? (Timeout, Fallback 처리)---------------------------------2. 시나리오별 흐름 및 준비사항① 간편 송금 (DB 중심)흐름: 요청 → 계좌 존재 확인 → 잔액 검증 → 출금 계좌 락(Lock) → 출금 → 입금 계좌 락 → 입금 → 이력 기록준비..

카테고리 없음

주석 템플릿

Java @Servicepublic class TransferService { // ========================================== // [1] 송금 핵심 비즈니스 로직 // ========================================== public void transfer(...) { ... } private void validateBalance(...) { ... } // 송금에 부속된 private 메서드는 바로 아래 배치 // ========================================== // [2] 이력 조회 및 관리 기능 // ==============================..

카테고리 없음

db 템플릿

[h2 접속법]H2 Console 접속: 앱 실행 후 브라우저에서 http://localhost:8080/h2-console로 접속하세요.-----------------------------------------------------------[applicatoin.yml]{H2}spring: datasource: url: jdbc:h2:mem:testdb;MODE=MySQL # MySQL 모드로 작동하게 설정 driver-class-name: org.h2.Driver username: sa password: h2: console: enabled: true--------------------------------h2에서 MySQL로 변한다고해도. 크게..

카테고리 없음

아키텍처 템플릿

[알아둔 템플릿] src/main/java/com/toss/assignment/├── domain/ # [핵심] 비즈니스 로직 단위 분리│ └── account/ # 예시: 휴일/송금 등 도메인 명│ ├── controller/ # 클라이언트 접점 (RestController)│ ├── service/ ├── TransferService.java # @Service (비즈니스 로직, 트랜잭션) └── TransferLockFacade.java # [중요] Redis 분산락 적용용 Facade │ ├── reposit..

카테고리 없음

설정 템플릿

4. 도커 환경에서 주의할 점 (가성비 팁)localhost 문제: 내 서버(App)를 도커 컨테이너로 띄우면, application.yml에서 DB 주소를 localhost가 아니라 서비스 명으로 써야 합니다. (예: url: jdbc:mysql://db:3306/mydb------------------------------------------------[build.gradle]plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4'}group = 'com.toss'version = '0.0.1-SNAPSHOT'sourceCompa..

카테고리 없음

도커 템플릿

프로젝트 루트(build.gradle 옆)에 docker-compose.yml------------------------------3. 터미널 명령어로 도커 제어하기 (블로그 박제용)VDI 터미널에서 당황하지 말고 아래 명령어를 순서대로 치세요.실행 (가장 많이 씀):docker-compose up -d(해설: 설정파일대로 컨테이너들을 백그라운드에서 실행해라.)상태 확인:docker ps(해설: 지금 DB랑 Redis가 잘 떠 있는지 목록을 확인해라.)로그 확인 (오류 날 때):docker-compose logs -f [서비스명](해설: DB가 왜 안 뜨는지 실시간 로그를 보여달라.)중지 및 삭제:docker-compose down(해설: 다 썼으니 컨테이너를 내리고 깨끗이 지워라.)-----------..

카테고리 없음

online-store 커밋 기록

이렇게 커밋 기록을 따로 하게된 이유-> 실수로 aws엑세스키, db비번을 application.properties에 올린후 깃허브에 올린 보안문제 발생-> 비번 변경, 엑세스키 폐기후 재발급. -> 문제 재발생을 막기위해 gitignore에 application.properties추가후 커밋푸쉬.-> secretkey가 코드에 있어서 푸쉬 거부.->bfg를 이용해 application.properties에 대한 과거커밋내용만 수정하려 시도-> 커밋기록 자체가 날아간 사태 발생. 배운점-> 로컬, 원격에 commit기록이 있고, 그 버전으로 돌아갈수 있기에 버전관리는 이정도면 될줄 알았으나,bfg같은 위험한걸 할때는 원격레퍼지에 백업용 레퍼지를 만들어야 하겠다는것과 조심성을 배우게 된 기회였습니다. 참고..

Orchestration

[Orchestration -ECS] ECS로 배포하기 (kubernetes류)

1. nginx류와 서버코드 2개 이미지 빌드해서 도커에 넣기2. 그거 도커허브에 올리기(도커허브에서 통신함)3. aws의 ecs에서 클러스터 생성3.1 인프라선택 -> 대충 ec2 / fargate선택인데 우리 주니어 개발자는 자원 별로 안쓰니깐 fargate로 필요한만큼 빌려씁시다4. 테스크정의도커 compose같은 파일입니다. 형식 정해두기.대충 저희는 실행만 해보고, 영구적인 운영이 목적이 아니기에 안좋은 cpu와 메모리도 2gb만 써줍니다4.1 상태확인(healthcheck)CMD-SHELL, curl -f http://localhost:8080 || exit 1이런거 넣어서 5초마다 컨테이너 정상작동인지 체크기능도 넣기nginx도 쓸거면, 컨테이너 2개로 nginx컨테이너, 서버컨테이..

lis017
리스