본문 바로가기

전체 글85

Docker Compose 파일 관련 # 1. 컨테이너 실행 (백그라운드 모드)docker-compose up -d# 2. 컨테이너 상태 확인docker-compose ps# 3. 로그 확인docker-compose logs # 전체 로그docker-compose logs -f # 실시간 로그docker-compose logs elasticsearch # 특정 서비스 로그# 4. 컨테이너 중지docker-compose stop# 5. 컨테이너 시작docker-compose start# 6. 컨테이너 재시작docker-compose restart# 7. 컨테이너 삭제 (볼륨 유지)docker-compose down# 8. 컨테이너 및 볼륨 모두 삭제docker-compose down -v# 9. 특정 서비스만 재시작doc.. 2025. 1. 8.
Swagger Swagger 가이드API 명세의 필요성프로젝트에서 Frontend와 Backend 개발자 간의 원활한 협업을 위해서는 API 명세가 필수적입니다. API 명세는 엔드포인트, 요청/응답 형식, 데이터 구조 등을 명확하게 정의하여 개발 과정에서의 혼란을 줄이고 생산성을 향상시킵니다. 또한 API 문서화를 통해 새로운 팀원의 온보딩 시간을 단축하고, 프로젝트 유지보수성을 높일 수 있습니다.Swagger 소개Swagger(현재는 OpenAPI Specification)는 REST API를 설계, 문서화, 테스트할 수 있는 오픈소스 프레임워크입니다. Java 기반의 Spring Boot 프로젝트에서는 Springfox 또는 SpringDoc 라이브러리를 통해 Swagger를 쉽게 통합할 수 있습니다. Swagg.. 2025. 1. 5.
JWT JWT (JSON Web Token) 구조JWT는 세 부분으로 구성되어 있으며, 각 부분은 점(.)으로 구분됩니다:xxxxx.yyyyy.zzzzz1. Header (헤더)토큰의 타입(typ)과 사용된 암호화 알고리즘(alg)을 정의Base64Url로 인코딩됨예시:{ "alg": "HS256", "typ": "JWT"}2. Payload (페이로드)전달하려는 데이터를 포함Claims(클레임)이라고 불리는 정보의 조각들을 포함Base64Url로 인코딩됨예시:{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022, "exp": 1516239022}주요 클레임 종류Registered Claims: 미리 정의된 클레임 (iss, sub, exp, i.. 2025. 1. 4.
스프링 시큐리티 - JWT와 유저 인증 절차 Spring Security와 JWT 인증 구현 상세 가이드1. JWT (JSON Web Token) 개요1.1 특징자가수용적(Self-contained): 필요한 모든 정보를 토큰 자체에 포함Stateless: 서버에 상태 저장 불필요Base64URL 인코딩된 문자열 형태1.2 장점서버 확장성 증가: 세션 저장/관리 불필요다중 서버 환경에서 효율적모바일 애플리케이션 통합 용이CORS 문제 해결 용이1.3 단점토큰 크기: 모든 요청에 추가 overhead저장된 정보 변경 불가: 토큰 재발급 필요토큰 탈취 시 즉각 무효화 어려움2. 구현 상세2.1 JWT 구조 및 생성 (JwtProvider)@Componentpublic class JwtProvider { private final Key key = .. 2024. 12. 25.
리액트 - Async&Await&Promise Async/Await/Promise 정리1. 기본 개념Promise비동기 작업의 결과를 담는 객체상태: pending(대기) -> fulfilled(성공) 또는 rejected(실패)체이닝으로 연속 작업 가능async/awaitasync: Promise를 반환하는 비동기 함수 선언await: Promise 완료까지 대기try-catch로 에러 처리2. 실행 패턴순차 실행await로 순서 보장이 필요한 작업 처리예) 질문 조회 후 답변 목록 조회병렬 실행Promise.all()로 독립적인 작업 동시 실행예) 프로필과 작성 글 목록 동시 조회혼합 실행순차 실행과 병렬 실행 조합예) 질문 조회 후 답변/댓글 동시 조회3. Promise 메서드기본 메서드.then() - 성공 처리.catch() - 에러 처리... 2024. 12. 23.
리액트 - Outlet React Router의 Outlet 이해하기Outlet이란?Outlet은 React Router v6에서 도입된 컴포넌트로, 부모 라우트가 자식 라우트 엘리먼트를 렌더링할 수 있게 해주는 도구입니다. 중첩 라우팅을 구현할 때 특히 유용합니다.Outlet의 주요 특징부모 라우트의 레이아웃 내에서 자식 라우트의 컴포넌트를 렌더링할 위치를 지정할 수 있습니다공통 레이아웃을 유지하면서 특정 부분만 동적으로 변경할 수 있습니다코드의 재사용성을 높이고 구조를 더 깔끔하게 만들 수 있습니다기본 사용 예제// App.jsximport { BrowserRouter, Routes, Route } from 'react-router-dom';import Layout from './Layout';import Home from.. 2024. 12. 23.
스프링 - JPA 다대일 처리 JPA 일대다(OneToMany) 관계 처리 방법1. 페치 조인특징한 번의 쿼리로 연관된 엔티티를 모두 조회일대다 페치 조인은 하나만 사용 가능 (데이터 정합성 문제)페이징과 함께 사용하면 메모리에서 페이징 처리 (성능 이슈)예시 코드.leftJoin(question.answerList).fetchJoin()2. 배치 사이즈특징지연 로딩 시 IN 쿼리를 통해 N+1 문제 해결설정한 배치 사이즈만큼 IN 쿼리로 한 번에 조회페이징과 함께 사용 가능 (실제 DB에서 페이징)네트워크 통신 횟수 감소 설정 방법// 엔티티에 직접 설정@BatchSize(size = 100)private List answerList;// 또는 application.yml에 글로벌 설정spring: jpa: propertie.. 2024. 12. 22.
스프링 - OSIV OSIV (Open Session In View)개념영속성 컨텍스트와 데이터베이스 커넥션을 View 렌더링이 끝나는 시점까지 유지하는 패턴사용 고려사항OSIV true장점: 지연 로딩이 가능하여 엔티티 그래프 탐색이 자유로움단점: 데이터베이스 커넥션을 오래 점유사용: 실시간 트래픽이 적은 ADMIN 페이지OSIV false장점: 데이터베이스 커넥션 사용 시간 최소화단점: View 렌더링 시점에 지연 로딩 불가능사용: 실시간 트래픽이 많은 API 서버서버 분리 운영API 서버 (Production)OSIV=false 설정무중단 배포높은 가용성 유지ADMIN 서버OSIV=true 설정일시적인 중단 허용복잡한 화면 구성에 용이OSIV false 시 코드 패턴// 비즈니스 로직용 서비스@Service@Trans.. 2024. 12. 22.