- springboot
- join
- spring boot
- PYTHON
- string
- mysql
- 1차원 배열
- DI
- spring security 6
- SSL
- Docker
- nginx
- AWS
- 데이터베이스
- 스프링
- jpa
- hibernate
- 자바
- 문자열
- sql
- @transactional
- 프로그래머스
- spring
- static
- 스프링부트
- java
- spring mvc
- select
- ORM
- Django
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
목록Java & Kotlin/Spring (58)
개발하는 자몽
⚠️이 포스트는 지식 공유보다는 본인이 나중에 다시 보기 위해 작성하는 기록용입니다... build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' implementation 'org.springframework.boot:spring-boot-starter-security' ...} application.ymlspring: security.oauth2: client.registration: kakao: client-name: Kakao client-id: ${CLIENT_ID} client-secret: ${..
일반적으로 Spring 애플리케이션에서 application.yml에 정의된 값을 static 변수에서 사용할 수 없다. 따라서 Spring에서 제공하는 `@Value` 애노테이션으로 설정 파일에 정의된 값을 static 변수에 주입하면 에러가 발생한다. Java의 static 변수는 아래 시점에 메모리에 저장된다. 스프링 컨테이너(Application Context)가 로드되기 전 == 객체 생성 이전 == 의존성 주입을 받기 전 하지만 `@Value`는 의존 관계 주입 시점(인스턴스 수준)에서 동작한다. 이로 인해 의존성 주입을 받기 전에 메모리에 저장되는 static 변수에는 값을 주입할 수 없다. 이는 더 나아가서 클래스 레벨에도 동일하게 적용할 수 있다. `@Component` 애노테이션이..
상황1:N 관계가 얽혀있는 엔티티를 대상으로 Spring Data JPA를 이용해서 Pagination 조회를 하니 말로만 듣던 N+1 상황이 발생했다. 처음에는 일반적인 해결 방법인 Fetch Join을 사용하려고 했다. 더불어 중복을 방지하기 위해 `DISTINCT` 추가하려고 했다. 그러나 1:N 관계의 컬렉션을 Fetch Join 하면서 동시에 Pagination을 사용하는 것은 OutOfMemoryError가 발생할 수 있고, 이로 인해 `DISTINCT`를 적용할 수 없다고 한다. 그래서 찾은 다른 방법 중 가장 빠르고 쉬운 방법은 Batch Size를 설정하는 것이었다. 하이버네이트 Batch Size 하이버네이트에서 제공하는 `@BatchSize` 애노테이션이나 `batch_size`..
에러 원인정말... 바보같은... 실수였다... 오류가 났던 테스트 코드는 아래와 같다. ... @PersistenceContext EntityManager em; @Test void test() { UserEntity userEntity = UserEntity.builder() .nickname("test") .email("test@example.com") .build(); userEntity = userRepository.save(userEntity); userService.sumTotalAmount(userEntity, 10_000L); ..
@Embeddable, @Embedded`@Embeddable` 애노테이션이 있는 클래스는 기본 생성자가 필요함임베디드 타입은 값 타입에 속하는데, 이러한 값 타입은 여러 엔티티에서 공유하면 side effect를 일으킬 수 있다.따라서 불변 객체(Immutable Object)로 설정하여 이러한 문제를 방지하는 것이 좋다.`@Embeddable` 클래스에 수정자(setter)를 생성하지 않고 생성자만 두어, 생성자로만 값을 설정하게 한다수정자가 없으므로 해당 임베디드 값 타입을 필드로 갖고 있는(@Embedded) 엔티티에서는 특정 값만 수정하는 것이 불가능. 객체를 새로 생성해야 함. public static void main(String args[]) { Address address = new..
상황`Required reuqest body is missing`라는 문구와 함께 `HttpMessageNotReadableException` 타입의 에러가 발생했다. `Controller`에 존재하는 메서드에서 `request body`를 인식하지 못하는 것으로 확인했다.@RestControllerpublic class RestController { @PostMapping("/aaa") public ResponseEntity aaa(@RequestBody @Valid final RequestDto dto) { ... return ResponseEntity.status(HttpStatus.CREATED).build(); } ...}해당 메서드에 `@RequestBody..
Notice Spring Boot 3.2.5, Spring Security 6.2.5 기반으로 작성한 글입니다. 아래 포스팅들을 먼저 보면 좋습니다.Spring Security 6 - Architecture → Security Exception 처리하기[Spring Security] 토큰 기반 로그인/로그아웃 구현하기 이 글의 목표는 Spring Security에서 토큰 기반 인증을 진행할 때 발생한 예외를 `@RestControllerAdvice`로 처리하는 것입니다. 시큐리티 예외 처리 구현Spring Security에서 예외 처리는 다음과 같은 아키텍처로 이루어진다. FilterChainSpring Security는 `FilterChain`으로 구성되어 있으며, 각 필터는 요청을 처리하거나..
Notice Spring Boot 3.2.5, Spring Security 6.2.5 기반으로 작성한 글입니다. 지난 포스팅에서 이어집니다.[Spring Security]토큰 기반 로그인/로그아웃 구현하기 역할과 권한사용자의 역할(role)과 권한(permission/authority)을 구현하여 기능 접근에 제약을 둘 수 있다. 만일 권한이 없는 기능에 접근하면 403 Forbidden이 발생한다. 역할 및 권한 구현 시 다음과 같은 것들을 고려해야 한다. 한 역할은 여러 개의 권한을 가질 수 있다.여러 명의 사용자는 여러 개의 역할을 가질 수 있다. → 다대다 관계역할을 하나의 Entity로 두어 구현할 수 있지만, 이 경우에 고려할 것이 많아진다. 다대다 관계 매핑 → `@ManyToMany`중..
Notice Spring Boot 3.2.5, Spring Security 6.2.5 기반으로 작성한 글입니다. Notice 24.07.06 로그인 구현 부분 `JwtAuthenticationFilter` 잘못된 내용 수정 Spring Security Authentication ArchitectureSpring Security를 기반으로 보안 관련 기능을 구현하기 위해서는 위의 그림을 이해해야 한다. 아래는 로그인을 예시로 한 Spring Security 인증 과정이다. 1. 사용자가 로그인 정보와 함께 인증을 요청한다. 2. `AuthenticationFilter`가 요청을 가로채어 인증에 사용될 UsernamePasswordAuthenticationToken 객체를 생성한다....public ..
Spring Security 6 - Architecture 공식 문서를 번역했습니다. 필요에 의해 설명을 추가한 부분도 있습니다. Architecture :: Spring SecurityThe Security Filters are inserted into the FilterChainProxy with the SecurityFilterChain API. Those filters can be used for a number of different purposes, like authentication, authorization, exploit protection, and more. The filters are executed in a specdocs.spring.io 🔖목차🔖Spring Security..