Backend 61

Connection Pool과 Size 선정 기준 (with HikariCP)

🔍 1. 커넥션 풀(Connection Pool)이란?데이터베이스와 연결(Connection)을 미리 만들어 풀(Pool)에 보관해두고, 요청이 들어오면 즉시 꺼내서 사용하고 다시 반납하는 구조. ✅ 장점매번 DB 연결을 새로 만들지 않아도 돼서 속도 빠름DB 커넥션 수를 제한해 과부하 방지 🔍 2. HikariCP란?Spring Boot의 기본 커넥션 풀 구현체.빠르고 가벼운 커넥션 풀로, 성능이 뛰어나서 널리 쓰인다.📌 3. HikariCP 설정✅ 3-0. yaml 예시spring: datasource: hikari: maximum-pool-size: 30 minimum-idle: 30 idle-timeout: 60000 connection-timeo..

MSA 필수 개념

📌 1. 서비스 등록 & 통신 ✅ 1-1. Spring CloudSpring Framework를 기반으로 한 마이크로서비스 아키텍처(MSA)에서 사용할 수 있는 도구와 라이브러리 모음!!서비스 간 통신, 설정 관리, 로드밸런싱, 장애 처리, 메시징 등을 편리하게 지원 📊 주요 기능 / 구성 요소기능Spring Cloud 모듈설명서비스 등록 & 검색Eureka서비스가 어디에 있는지 등록하고 조회로드밸런싱Spring Cloud LoadBalancer클라이언트 측에서 요청을 여러 인스턴스로 분산API GatewaySpring Cloud Gateway단일 진입점에서 라우팅, 필터링, 로드밸런싱 지원설정 관리Spring Cloud Config분산 서비스의 공통 설정을 중앙에서 관리메시징Spring Cloud ..

JUnit 단위 테스트 적용, JaCoCo 커버리지 측정

📌 목차JUnit이란?JUnit 적용 방법JUnit 적용 예시DB 연동 단위 테스트 방법테스트 실행테스트 커버리지란?테스트 커버리지 측정 방법 - JaCoCo한글 경로 문제 해결 방법테스트 결과 확인 🎯 0.JUnit 단위 테스트 적용하기기존 테스트 코드를 작성하지 않고 직접 프로그램을 로컬에서 실행해서 테스트하고 있었다. => 코드 변경 시 마다 기능을 재테스트 하는데 시간이 소요되고, 테스터가 놓치는 부분이 있을 수 있음.이를 개선하기 위해 JUnit 기본 사용법을 알아보고 ‘일정 시스템’에 적용해보기로 했다!! 📌 1. JUnit이란?Java에서 가장 많이 쓰이는 단위 테스트 프레임워크역할: 테스트 작성 → 자동 실행 → 결과 확인Spring Boot에서는 spring-boot-starter-..

Backend/JAVA 2025.08.27

Stream API란? (for-loop와 비교)

📌 1. Stream API란?Stream API는 Java 8에서 도입된 기능으로, 컬렉션(List, Set 등)이나 배열의 데이터를 함수형 스타일로 처리할 수 있는 API. 간결하고 직관적인 코드를 작성할 수 있으며, 반복문보다 가독성이 좋고 병렬 처리도 지원한다. 📌 2. Stream의 특징원본 데이터를 변경하지 않음 (불변성 유지)중간 연산(Intermediate)과 최종 연산(Terminal)으로 나뉨병렬 처리(parallelStream()) 가능 📌 3. Stream API 기본 동작 흐름Stream API는 "데이터(Stream) 생성 → 중간 연산 (필터링, 변환 등) → 최종 연산 (리스트로 변환, 출력 등) " 의 구조로 작동한다. 📖 예제: 숫자 리스트에서 짝수만 골라 제곱 후..

Backend/JAVA 2025.08.09

[Spring, JSP] session 생성 차단

jwt 방식 로그인을 사용하기 때문에 세션을 생성하지 않도록 Spring Security 에서 아래와 같이 설정했다.근데도 JSESSIONID가 생기고 있었다. 나는 jsp를 사용하는게 문제였다!!📌 1. 목적: 완전한 무상태(Stateless) 서버 만들기Spring Security에서 SessionCreationPolicy.STATELESS를 설정JWT 기반 인증이나 토큰 기반 인증을 쓸 때는 세션이 필요 없으므로, JSESSIONID 쿠키도 없어야 정상.http .cors(Customizer.withDefaults()) .csrf(csrf -> csrf.disable()) .sessionManagement(session -> session .sessionCreation..

[Spring] (프로젝트 외부) 정적 리소스 처리

📌0. 서블릿 컨테이너 기본 동작 자원이 프로젝트 내부 /resources 또는 /static 밑에 있을 때✅ 0-1. Spring MVC (레거시 설정, xml 기반)DispatcherServlet을 /에 매핑하면 모든 요청이 DispatcherServlet으로 감.정적 리소스도 DispatcherServlet을 거치게 됨 → 그래서 Spring이 ResourceHttpRequestHandler를 통해 다시 정적 리소스 처리를 해줘야 함.✅ 0-2. Spring Boot 동작 원리스프링부트는 자동으로 ResourceHandlerRegistry를 등록해서, 별도 mvc:resources를 안 써도 정적 리소스 핸들러가 붙음.기본 매핑 경로:classpath:/static/classpath:/public..

Spring boot 예외 처리: @ControllerAdvice, @ExceptionHandler, ResponseStatusException

기존에 controller에서 예외 catch해서 직접 처리하는 방식을 자주 사용했었다.@GetMapping("/user/{id}")public ResponseEntity getUser(@PathVariable Long id) { try { User user = userService.findById(id); return ResponseEntity.ok(new ApiResponse("SUCCESS", "조회 성공", user)); } catch (UserNotFoundException e) { return ResponseEntity.status(HttpStatus.NOT_FOUND) .body(new ApiResponse("FAIL..

ICal을 이용한 외부 캘린더 연동

ICal 방식을 사용하여 외부 캘린더를 구독하고자 했는데 java 라이브러리인 ical4j가 버전에 따라 달라진게 많은 것 같아서 4.x 기준으로 기록을 남긴다!! 🔍 1. ICal 이란?iCal 또는 iCalendar는 전자 일정 정보를 교환하기 위한 표준 포맷.텍스트 기반 포맷 (.ics 파일)으로 여러 캘린더 기능을 제공하는 서비스에서 제공함. 대신 이 방식으로 연동하면 조회만 가능하다!!그리고 텍스트 파일이라 데이터 많으면 들고오고 파싱하는게 오래 걸릴 수 있음. 📌2. ICal Url 가져오기Ical Url을 제공하는 타 시스템에서 url 정보를 가져온다.예) 구글 캘린더Public은 공개캘린더인 경우 이용 가능, secret 주소를 복사 한다. 🔍 3. ical4j란?ical4j는 Jav..

Backend/API 2025.07.26

[Google API] 구글 캘린더 연동

캘린더 시스템에서 google 캘린더 연동을 위해 API연동을 했다. 📌1. Google Cloud에 프로젝트 생성https://console.cloud.google.com/ Google 클라우드 플랫폼로그인 Google 클라우드 플랫폼으로 이동accounts.google.com 등록하는 건 캡쳐를 못 했는데ClientID랑 시크릿키를 발급받으면 됩니다! 📌2. 프로젝트 코드 수정2.1. 의존성 추가pom.xml org.springframework.boot spring-boot-starter-oauth2-client com.google.api-client google..

Backend/API 2025.07.26

[Google API] 구글 앱 인증 받기

📌 1. 인증이 필요한 이유 ✅ 1.1. 구글 클라우드에서 제공하는 calendar API를 사용함.Calendar API는 구글에서 “비공개 Google 사용자 데이터에 대한 액세스 권한을 부여하는 민감한 범위” 라고 판단하는 API임. (readonly인 경우에도)Google Calendar를 사용하여 액세스할 수 있는 모든 캘린더 보기, 수정, 공유, 영구 삭제 ✅ 1.2. 사용자 유형을 외부로 설정함.사용자 유형외부: 구글 계정이 있는 모든 사용자 대상내부: 구글 클라우드 조직과 연결된 프로젝트에서 내부 사용자 구성. ✅ 1.3. 민감한 범위 API 사용 + 사용자 유형이 외부인 경우Oauth 동의 화면에서 아래 화면(안전하지 않은 앱으로 이동)을 띄우지 않기 위해서는구글 인증이 필..

Backend/API 2025.07.26