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숫자 값이 지정한 최소값 이상이어야 합니다..

다국어(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..
JWT 설정 방법단계: JwtProvider 생성단계: JwtAuthenticationFilter 생성단계: SecurityConfig 생성단계: 인증 및 토큰 생성 단계: JwtProvider 생성 application.properties 설정# JWT 설정jwt.secret=SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cjwt.expirationMillis=86400000 pom.xml 설정 io.jsonwebtoken jjwt-api 0.12.3 io.jsonwebtoken jjwt-impl 0.12.3 runtime io.jsonwebtoken jjwt-jackson 0.12.3 runtime JwtProv..
`record`는 **Java 16부터 정식 도입된 특별한 클래스 타입**으로, **데이터 전달용 객체를 간결하게 정의**하기 위해 만들어졌습니다. 기존의 `Class` 작성 방식보다 훨씬 적은 코드로 **불변(immutable) 데이터 객체**를 생성할 수 있습니다.---### ✨ **record의 3대 특징**1. **불변성**: 모든 필드가 `final`로 자동 설정2. **자동 메서드 생성**: 생성자, `equals()`, `hashCode()`, `toString()` 자동 구현3. **간결한 문법**: 데이터 구조를 선언하는 데 집중---### 📍 **기존 Class vs record 비교**#### 1. **전통적인 DTO 클래스 (Before)**public class LoginRequ..
Spring MVC에서 Service 레이어를 interface와 implements로 나누는 이유와 장점을 설명해드리겠습니다.1. 느슨한 결합도 (Loose Coupling)- interface를 사용하면 실제 구현체(implements)와 이를 사용하는 클래스 간의 결합도가 낮아집니다.- 예를 들어, Controller는 ServiceImpl의 구체적인 내용을 알 필요 없이 interface만 알면 됩니다.2. 유연성과 확장성public interface UserService { User findUser(Long id);}public class UserServiceImpl implements UserService { public User findUser(Long id) { //..
- Total
- Today
- Yesterday
- 제품 등록
- java web-mvc
- java 키워드 정리
- 람다식(lambda expression)
- jsp 오픈 소스
- error-java
- await
- system.io
- In App Purchase
- MainActor
- .submit()
- java.sql
- 스프링 시큐리티(spring security)
- nl2br
- 표현 언어(expression language)
- 진수 변환
- 인텔리제이(intellij)
- 문자 자르기
- java-개발 환경 설정하기
- jstl(java standard tag library)-core
- 스프링 프레임워크(spring framewordk)
- REST API
- React
- 특정 문자를 기준으로 자르기
- 스프링 프레임워크(spring framework)
- docker
- System.Diagnostics
- 스프링 시큐리티(spring security)-http basic 인증
- jstl(java standard tag library)
- 메이븐(maven)
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |