Backend 65

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

로컬에서 Secure Cookie 테스트: Https 설정

Secure Cookie가 동작하는지 테스트가 필요한데 그러기 위해서 https 설정부터하는 과정이다!!통신하는 서버 2개 다 https설정 해야한다.📌 1. OpenSSL을 이용한 인증서 및 키 생성 과정 # 1. 개인키 생성genrsa -out my_private.key 2048# 2. CSR 생성 (← 여기서 config 지정!)req -new -key my_private.key -out my_cert.csr -config "C:\Users\dddzr\Documents\Tools\openssl-0.9.8k_X64\openssl.cnf" 🔹 경로 생략 시 기본 경로에서 찾는다: Unable to load config info from c:openssl/ssl/openssl.cnf * req 명령..

[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(boot X) 정적 리소스 처리 흐름

📌 1. 필수 설정정적 리소스를 사용하려면 반드시 설정해야 할 파일✅ 1-1. web.xml 설정 (DispatcherServlet 매핑) appServlet org.springframework.web.servlet.DispatcherServlet 1 appServlet / 이 설정으로 인해 /thumb-images/** 같은 정적 요청도 DispatcherServlet을 거치게 됨 ✅ 1-2. servlet-context.xml (또는 dispatcher-servlet.xml) 설정 -->file: 접두사는 절대경로 기반을 의미classpath:는 WAR 내부 리소스를 가리킴 (자주 쓰는 /static/, /public/ 등 포함)📌 2. 환경별 경로 차이 설정환경설정 예..

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

OpenFeign: MSA 서비스 간 통신

📌MSA에서의 HTTP 클라이언트 사용MSA 환경에서는 각 서비스가 독립적으로 동작하며, 서로의 API를 호출해야 한다. 이때 다양한 HTTP 클라이언트를 사용할 수 있으며, 성능과 유지보수를 고려해 적절한 방식을 선택해야 한다. ✅ HTTP 클라이언트는 MSA에서만 사용할까?➡️ 아니다! 일반적인 모놀리식 아키텍처에서도 다른 외부 API 호출을 위해 HTTP 클라이언트를 사용한다.➡️ 하지만 MSA에서는 서비스 간 통신이 필수적이므로, OpenFeign 같은 라이브러리가 특히 많이 사용된다. ✅ 일반적인 API 호출과의 차이점은?➡️ 보통 API 호출은 단순한 HTTP 요청이지만, MSA에서는 더 세밀한 HTTP 클라이언트 설정이 필요하다.서비스 디스커버리(Eureka) 를 이용한 동적 URL 매핑로..

JPA vs MyBatis

JPA와 MyBatis는 Java 애플리케이션에서 데이터베이스와 통신하기 위한 대표적인 persistence 프레임워크로, 각각 자동화된 ORM 방식(JPA)과 SQL 중심의 매퍼 방식(MyBatis)을 제공한다. 🔥 JPA vs MyBatis 비교✔ JPA는 객체 중심 설계와 생산성 강화에 좋음✔ MyBatis는 SQL 최적화와 복잡한 쿼리에 강점✔ 대부분의 프로젝트는 JPA + QueryDSL을 기본으로 사용하면서, 성능이 중요한 부분만 MyBatis로 처리!비교 항목🏆 JPA (Hibernate, Spring Data JPA)🔥 MyBatis개발 생산성✅자동 매핑, CRUD 자동 생성 → 생산성 높음❌SQL 직접 작성 필요 → 생산성 낮음SQL 최적화❌복잡한 쿼리는 어렵고 성능 튜닝 필요 ✅S..

Backend/JAVA 2025.04.10