forEach와 stream() 메서드는 둘 다 컬렉션의 요소를 반복(iterate)하는 기능을 제공하지만, 동작 방식과 목적이 다릅니다.✅ forEach vs. stream() 차이점 요약구분 forEach stream()목적단순 반복(iteration) 수행데이터 변환 및 가공반환값없음 (void)변환된 스트림을 반환병렬 처리parallelStream().forEach() 사용 가능하지만, 비순차적 실행 가능성 있음parallelStream()을 활용하면 병렬 처리가 안정적으로 가능사용 예로그 출력, 데이터 출력 등필터링, 변환, 수집 등 데이터 가공원본 컬렉션 변경 여부원본 컬렉션 수정 가능원본 컬렉션을 변경하지 않음 (불변성 유지)1️⃣ forEach : 단순 반복(iteration)forEach..
아래는 React와 TypeScript를 사용하여 로그인 후 인증 정보를 관리하는 예시 코드입니다. 이 예제에서는 Context API와 커스텀 훅을 사용해 전역 인증 상태를 관리하며, localStorage에 토큰을 저장해 새로고침 시에도 인증 정보를 유지할 수 있도록 합니다.1. 인증 Context 및 Provider 생성먼저, 인증 정보를 담을 Context와 Provider를 만듭니다.파일: src/contexts/AuthContext.tsximport React, { createContext, useState, useEffect, ReactNode } from 'react';// 사용자 정보 타입 정의 (필요에 따라 확장 가능)interface User { id: number; name: s..
아래는 React Router와 앞서 만든 인증 로직(예: Context, useAuth 훅 등)을 활용하여, 페이지에 진입하기 전에 인증 여부를 확인하고 인증되지 않은 경우 경고창을 띄운 후 로그인 페이지로 리다이렉트하는 예시입니다.1. ProtectedRoute 컴포넌트 만들기설명:ProtectedRoute 컴포넌트는 자식 컴포넌트를 렌더링하기 전에 useAuth를 통해 로그인 여부를 체크합니다. 인증되지 않은 상태라면 alert 창을 띄운 후 로그인 페이지로 이동시킵니다.파일: src/components/ProtectedRoute.tsximport React from 'react';import { Navigate } from 'react-router-dom';import { useAuth } fro..
### 1️⃣ **기본 동작 방식** (예제 코드 기준)```javareturn ResponseEntity.ok(Map.of( "token", token, "email", userDetails.getUsername()));```- **현재 구현**: 토큰을 응답 **Body**에 포함하여 전송- **클라이언트의 책임**: - 로그인 응답에서 토큰을 추출 → **로컬 저장소** (localStorage, sessionStorage, Cookie 등)에 저장 - **매 요청 시** `Authorization: Bearer ` 헤더를 **수동 설정**---### 2️⃣ **자동 헤더 설정이 필요한가요?**- **서버 측**: 토큰 생성만 담당- **클라이언트 측**: 토큰 저장 및 헤더 설정을..
✅ 1. 모든 도메인 허용 (*)모든 도메인에서 요청을 허용하려면 setAllowedOrigins(List.of("*"))을 사용할 수 있습니다.하지만, setAllowCredentials(true)와 함께 사용할 수 없습니다.즉, setAllowCredentials(true)를 설정한 상태에서 setAllowedOrigins("*")을 사용하면 Spring Boot가 예외를 발생시킵니다.configuration.setAllowedOrigins(List.of("*")); // 모든 도메인 허용configuration.setAllowCredentials(false); // credentials 허용 비활성화🔹 장점:빠른 테스트 및 제한 없는 접근이 가능공용 API에서 사용할 수 있음🔹 단점:보안 취약점..
📌 @JoinColumn을 생성하면서도 외래 키(Foreign Key)는 생성하지 않는 방법JPA에서는 기본적으로 @JoinColumn을 사용하면 자동으로 외래 키(FK) 가 생성됩니다.하지만, 외래 키를 생성하지 않으면서도 조인을 유지하는 방법이 있습니다.1️⃣ 방법: @JoinColumn과 함께 @ForeignKey(NO_CONSTRAINT) 사용JPA에서는 @ForeignKey(value = ConstraintMode.NO_CONSTRAINT) 를 사용하면 외래 키 제약 조건(FK)을 생성하지 않도록 설정할 수 있습니다.🔹 예제 코드@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) ..
1️⃣ 기본 개념✅ @ElementCollectionJPA에서는 일반 엔티티가 아닌 값 타입(예: List, Set 등)을 저장할 때 사용합니다.별도의 테이블을 생성하여 관리합니다.예를 들어, 사용자(User)가 여러 개의 역할(Role) 을 가진다면, 역할을 따로 테이블에 저장해야 합니다.✅ fetch = FetchType.EAGEREAGER(즉시 로딩) : User 엔티티를 가져올 때 즉시 함께 가져옴기본적으로 @ElementCollection은 LAZY이므로 명시적으로 EAGER로 설정하면 즉시 로딩됨2️⃣ 예제 코드로 이해하기👎 @ElementCollection 없이 일반적인 필드로 저장하면?@Entitypublic class User { @Id @GeneratedValue(strat..
jakarta.transaction.Transactional (JTA 트랜잭션)JTA는 글로벌 트랜잭션을 다룰 때 사용됩니다.readOnly = true 속성을 지원하지 않습니다.분산 트랜잭션 환경(예: 여러 DB 또는 메시지 브로커를 포함한 트랜잭션)에서 사용됩니다.org.springframework.transaction.annotation.Transactional (Spring 트랜잭션)Spring에서 제공하는 트랜잭션 관리 기능을 사용할 수 있습니다.readOnly = true 지원 → DB에서 불필요한 flush() 호출을 방지하여 성능을 최적화할 수 있습니다.Spring의 TransactionManager를 통해 AOP 기반 트랜잭션 관리가 가능합니다.
아래는 Spring Boot 기반 RESTful 애플리케이션 개발 시 자주 사용되는 어노테이션들을 설명과 함께 정리한 표입니다.@GetMappingHTTP GET 요청 전용 매핑 어노테이션으로, @RequestMapping(method = RequestMethod.GET)의 단축 표현입니다.데이터 조회, 검색, 목록 반환 등 GET 방식의 요청을 처리할 때 사용합니다.@PostMappingHTTP POST 요청 전용 매핑 어노테이션으로, @RequestMapping(method = RequestMethod.POST)의 단축 표현입니다.새 리소스 생성, 폼 데이터 제출 등 POST 방식의 요청을 처리할 때 사용합니다.@PutMappingHTTP PUT 요청 전용 매핑 어노테이션으로, @RequestMapp..
일반적으로 JPA 엔티티를 Controller에 직접 노출하는 것은 권장되지 않습니다. 그 이유는 다음과 같습니다.계층 간의 명확한 분리도메인 모델(Entity): 비즈니스 로직과 데이터베이스 매핑에 집중합니다.API 모델(DTO): 클라이언트와의 데이터 교환에 최적화된 모델입니다.이를 분리하면 내부 데이터 구조(엔티티)가 변경되어도 API 계약에는 영향을 주지 않아 유지보수가 쉬워집니다.보안 및 데이터 노출 관리엔티티에는 내부 구현에 필요한 정보나 민감한 데이터가 포함될 수 있습니다.DTO를 사용하면 클라이언트에 노출할 데이터를 명확하게 제한할 수 있습니다.직렬화 및 성능 이슈엔티티에 지연 로딩(lazy-loading) 관계가 있을 경우, JSON 직렬화 시 예상치 못한 데이터 로딩이나 순환 참조 문제..
- Total
- Today
- Yesterday
- java 키워드 정리
- 람다식(lambda expression)
- 문자 자르기
- React
- REST API
- jstl(java standard tag library)-core
- system.io
- System.Diagnostics
- 인텔리제이(intellij)
- jsp 오픈 소스
- 스프링 시큐리티(spring security)
- await
- 표현 언어(expression language)
- java.sql
- .submit()
- 특정 문자를 기준으로 자르기
- error-java
- 스프링 프레임워크(spring framewordk)
- 스프링 시큐리티(spring security)-http basic 인증
- jstl(java standard tag library)
- In App Purchase
- docker
- java web-mvc
- 진수 변환
- 메이븐(maven)
- MainActor
- java-개발 환경 설정하기
- 제품 등록
- 스프링 프레임워크(spring framework)
- nl2br
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |