아래는 @Valid와 @Validated를 어떻게 구분해서 사용하는지에 대한 샘플 코드입니다.@Valid는 JSR-380 표준 애너테이션으로, 주로 RequestBody나 ModelAttribute 등 Bean 객체의 필드 유효성 검증에 사용됩니다.@Validated는 Spring에서 제공하는 애너테이션으로, 메서드 레벨(@PathVariable, @RequestParam 등) 유효성 검증과 함께 그룹 기능을 지원합니다.단, 메서드 매개변수에 직접 제약 조건을 사용하려면 컨트롤러 클래스에 @Validated를 추가해야 합니다.UserDto.javapackage com.example.demo.dto;import jakarta.validation.constraints.Min;import jakarta.val..
캡슐화 강화외부에서 직접 필드에 접근하여 값을 변경하는 것을 막고, 엔티티 내부의 메서드를 통해서만 상태가 변경되도록 합니다.이를 통해 객체의 무결성을 보장하고, 잘못된 값이나 상태로의 변경을 예방할 수 있습니다.비즈니스 로직 통합수정 메서드 내부에 유효성 검사, 이벤트 발행, 로깅 등 부가적인 로직을 추가할 수 있습니다.단순히 값을 대입하는 것이 아니라, 도메인 규칙에 따라 상태 변경이 이루어지도록 강제할 수 있습니다.의도 명확화setTitle 같은 단순 setter 대신 updatePost(String title, String content)와 같이 메서드를 명명하면, 해당 메서드가 엔티티의 상태를 변경하는 명확한 의도를 표현합니다.이는 코드를 읽는 개발자에게 엔티티의 변경 방법과 의미를 보다 쉽게 ..
Java Stream API에서 stream(), map(), collect() 함수는 함수형 프로그래밍 패러다임을 활용하여 데이터를 처리할 때 사용됩니다. 이를 하나씩 설명해 드리겠습니다.1. stream()stream() 메서드는 Java의 컬렉션(Collection)에서 스트림(Stream)을 생성하는 역할을 합니다.스트림은 컬렉션의 요소를 하나씩 순회하면서 함수형 스타일로 처리할 수 있도록 합니다.스트림은 원본 컬렉션을 변경하지 않고 데이터를 처리할 수 있습니다.List names = List.of("Alice", "Bob", "Charlie");Stream nameStream = names.stream(); // 스트림 생성2. map()map() 메서드는 스트림의 각 요소를 변환(매핑) 하는..
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..
- Total
- Today
- Yesterday
- jstl(java standard tag library)-core
- React
- 특정 문자를 기준으로 자르기
- REST API
- 스프링 프레임워크(spring framework)
- 메이븐(maven)
- 스프링 시큐리티(spring security)
- docker
- 스프링 프레임워크(spring framewordk)
- 인텔리제이(intellij)
- 람다식(lambda expression)
- await
- 스프링 시큐리티(spring security)-http basic 인증
- .submit()
- 문자 자르기
- error-java
- jstl(java standard tag library)
- jsp 오픈 소스
- java.sql
- 진수 변환
- System.Diagnostics
- system.io
- java 키워드 정리
- MainActor
- java web-mvc
- 표현 언어(expression language)
- In App Purchase
- 제품 등록
- nl2br
- java-개발 환경 설정하기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |