매개변수 타입으로 primitive인 long과 참조형인 Long을 선택할 때 고려해야 할 기준은 다음과 같습니다:null 허용 여부long: null 값을 가질 수 없으며, 기본값이 0입니다.→ 매개변수가 반드시 값이 있어야 하거나, null 상태를 허용하지 않는 경우 사용합니다.Long: null 값을 허용할 수 있습니다.→ 값이 없음을 명시적으로 표현해야 하거나, 데이터베이스 엔티티의 ID 등 초기에는 null인 상태를 허용해야 하는 경우 사용합니다.자동 박싱/언박싱primitive인 long은 연산에서 성능상 유리하지만, Long과의 비교나 컬렉션(Generics)에서는 자동 박싱/언박싱이 일어나므로 주의해야 합니다.프레임워크 및 라이브러리 요구사항JPA 등 ORM에서는 기본 키를 Long (또는..
Spring Boot JPA에서 첫 번째 메소드가 동작하지 않고 두 번째 메소드가 정상적으로 동작하는 이유는 메소드 네이밍 규칙과 JPQL 쿼리의 차이 때문입니다.첫 번째 방식:@Modifying@Transactionalvoid deleteAllByPostId(Long postId);이 방식은 메소드 이름 기반 쿼리(method name query strategy)를 사용합니다. 하지만 여기서 문제는 JPA가 PostComment 엔티티에서 postId라는 필드를 직접 찾으려고 시도한다는 점입니다.실제로는 PostComment 엔티티가 아마도 다음과 같은 구조일 것입니다:class PostComment { @Id private Long id; @ManyToOne private..
아래는 @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에서 사용할 수 있음🔹 단점:보안 취약점..
- Total
- Today
- Yesterday
- jstl(java standard tag library)-core
- java web-mvc
- MainActor
- jstl(java standard tag library)
- 특정 문자를 기준으로 자르기
- await
- 인텔리제이(intellij)
- java.sql
- In App Purchase
- nl2br
- docker
- 스프링 프레임워크(spring framewordk)
- 문자 자르기
- java-개발 환경 설정하기
- .submit()
- 진수 변환
- 람다식(lambda expression)
- jsp 오픈 소스
- 제품 등록
- 스프링 프레임워크(spring framework)
- REST API
- System.Diagnostics
- java 키워드 정리
- React
- 메이븐(maven)
- error-java
- 스프링 시큐리티(spring security)-http basic 인증
- 표현 언어(expression language)
- 스프링 시큐리티(spring security)
- system.io
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |