### 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 직렬화 시 예상치 못한 데이터 로딩이나 순환 참조 문제..
아래는 spring-boot-starter-validation (Hibernate Validator 기반 Bean Validation API)에서 자주 사용되는 어노테이션들과 그 설명을 정리한 표입니다.어노테이션 설명@NotNull값이 null 이 아니어야 합니다. (빈 문자열이나 컬렉션은 허용됨)@Null값이 반드시 null 이어야 합니다.@NotEmpty문자열, 배열, 컬렉션 등이 null 이거나 비어 있지 않아야 합니다. (길이가 0이면 실패)@NotBlank문자열이 null 이 아니며, 공백(trim 후)이 아닌 실제 문자가 있어야 합니다.@Size문자열, 배열, 컬렉션 등의 길이나 크기를 제한합니다. min과 max 속성을 통해 범위를 지정합니다.@Min숫자 값이 지정한 최소값 이상이어야 합니다..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cTtiPX/btsL8dGsUYB/jHESReg5tgMM6whWdtrW7K/img.png)
다국어(Internationalization, i18n)를 적용하기 위해서는 다음과 같은 단계로 진행할 수 있습니다. 아래는 단계별로 필요한 설정과 코드 예제를 제공합니다.1. 메시지 프로퍼티 파일 생성먼저, 기본 메시지 파일과 다국어에 대응하는 메시지 파일을 작성합니다.예를 들어, 다음과 같이 메시지 파일들을 작성합니다. src/main/resources/messages.properties (기본 언어 – 보통 영어)user.email.exists=Email already exists. src/main/resources/messages_ko.properties (한국어)user.email.exists=이미 존재하는 이메일입니다.필요에 따라 다른 언어의 파일도 추가할 수 있습니다.2. MessageSou..
Java의 Optional을 사용하면 null 체크를 명시적으로 하지 않고도 안전하게 값을 다룰 수 있습니다. 특히 체이닝(chaining) 기법을 통해 여러 단계의 연산을 한 줄로 연결할 수 있어 가독성이 좋고 오류 가능성을 줄일 수 있습니다. 아래에서 Optional 체인을 어떻게 사용하는지에 대해 자세히 설명하겠습니다.1. 기본 사용법Optional은 주로 메서드의 리턴값으로 사용되어, 반환값이 null일 가능성이 있을 때 클라이언트가 안전하게 처리할 수 있도록 도와줍니다. 예를 들어:public Optional findUserById(Long id) { // DB나 다른 소스에서 User를 조회한다고 가정 User user = ...; // 조회된 user 혹은 null retur..
- Total
- Today
- Yesterday
- 문자 자르기
- docker
- 람다식(lambda expression)
- java web-mvc
- MainActor
- system.io
- 특정 문자를 기준으로 자르기
- React
- java.sql
- 스프링 시큐리티(spring security)-http basic 인증
- nl2br
- REST API
- jstl(java standard tag library)-core
- .submit()
- jstl(java standard tag library)
- java-개발 환경 설정하기
- 제품 등록
- System.Diagnostics
- 진수 변환
- 메이븐(maven)
- 스프링 프레임워크(spring framework)
- jsp 오픈 소스
- In App Purchase
- error-java
- 스프링 프레임워크(spring framewordk)
- 스프링 시큐리티(spring security)
- 표현 언어(expression language)
- await
- 인텔리제이(intellij)
- 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 |