스프링21 [fix] Enum 값 추가 시 발생하는 'Data truncated for column' 오류 해결 방법 (feat: AttributeConverter) 상황Enum에 새로운 상수를 추가해 주고, ddl-auto로 프로그램을 제 빌드 하였지만 추가된 enum 상수를 찾지 못하고 java.sql.SQLException: Data truncated for column 에러가 발생했다. 이는 Hibernate6 부터 ddl-auto 기능이 기본적으로, 데이터베이스 스키마 일부만 업데이트 되도록 변경되었기 때문이다. 따라서 새로운 enum 상수를 추가해 주어도 스키마에 반영되지 않았다.내용test - enum, entity 생성 지금 상황에서는 animalType 테이블 구조를 살펴보면 Data Type에 CAT,DOG,LION 잘 저장된 것을 확인 할 수 있다. 하지만 여기서 AnimalType에 BIRD 를 추가한다면 어떻게 될까??? BIRD를 추가한 후 .. 2024. 11. 14. 인터셉터(Interceptor) 란? 현재 진행하는 예약 시스템 프로젝트에서는 Store 타입별로 미용실만 사용가능한 api, 식당만 사용 가능한 api등, 호텔만 사용가능한 api 등이 있다. 스토어 타입별로 컨트롤러를 점검하기 위해 인터셉터를 활용하기로 했다. 인터셉터가 무엇인지 알아보자. 인터셉터(Interceptor) 란?인터셉터는 디스패처 서블릿에서 클라이언트의 요청과 응답을 가로채어 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다. 이 기능은 주로 인증, 권한 검사, 로깅, 공통 로직 처리 등 반복적인 작업을 처리하는데 유용하다.공식문서 -> 링크 디스패처서블릭과 인터셉터 동작 순서클라이언트의 요청이 디스패처서블릿에 전달 되면 디스패처 서블릿은 핸들러 매핑을 통해 적절한 컨트롤러를 찾는다... 2024. 9. 23. 영속성 컨텍스트란? 영속성 컨텍스트란 무엇일까??? JPA를 사용하다면 Update 쿼리문을 작성하지 않았는데도 데이터가 수정되는 것을 알수 있다. 그것은 단순히 JPA 기능이라고 알고 있기 보다는 JPA가 어떻게 데이터베이스와 교류하는지 알아보자. 엔티티 매니저 팩토리 와 엔티티 매니저데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. 엔티티매니저 팩토리는 이름에서 알 수 있듯이 엔티티매니저를 생성하는 곳이다. 엔티티매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하지만 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 공유를 하면 안된다. 영속성 컨텍스트란?영속성 컨텍스트는 jpa 에서 엔티티메니저에 의해 관리되는 일종의 .. 2024. 9. 14. JWT의 동작원리 저번 시간에 JWT에 대해 알아보고 예약 도메인 프로젝트에 JWT를 적용시키기로 했다. 이제 JWT가 무엇인지 알았으니 JWT의 동작원리와 사용법을 알아보자.이 글에서는 마이그레이션 실습을 위해 일부로 현재 사용을 권장하지 않는 기술들을 포함하고 있다.Java11, SpringBoot 2.7.5, Spring Security 5.7.4 버전을 사용중임을 미리 알린다.또한 현재 학습을 위한 단계로 단일토큰 방식을 구현한다. 2024.09.11 - [스프링/security] - 스프링 시큐리티 JWT란 무엇일까? 왜 사용할까?JWT 인증 방식 시큐리티 동작 원리회원가입 : 회원가입 로직은 기존의 세션 방식과 JWT방식의 차이가 없다.로그인(인증) : 로그인 요청을 받은 후 세션 방식은 서버 세션이 유저 정보.. 2024. 9. 12. 스프링 시큐리티 JWT란 무엇일까? 왜 사용할까? 예약 도메인 프로젝트를 진행하면서 로그인 로직을 JWT 토큰을 사용해보자는 계획을 세웠다. 그러나 프로젝트를 진행하면서 많은 의문점이 생겼다.도대체 JWT를 왜 사용하는 것일까? Json Web Token JWT 는 Json Web Token의 약자이다. 개발 공부를 어느정도 진행하다 보면 Json과 Web은 지겹도록 들어보거나 사용해보았을 것이다.하지만 Token 은 Json과 Web보다는 조금 덜 익숙했다. 하지만 몇번 사용해 본 적이 있다. 그것은 바로 Git 이다. Git을 로컬에서 사용할때 인증 방식을 아이디와 비밀번호 방식에서 토큰 방식으로 변경되었다. 토큰 인증방식이 어떤 장점이 있길래? Token이란???Git에서 토큰 인증을 해본 경험이 있는 사람은 그래도 토큰이 인증방식에 사용되는거.. 2024. 9. 11. 스프링부트 2.7x 버전과 스프링 부트 3.xx 의 차이 예약 도메인 프로젝트를 진행하면서 Spring Boot 2.7x 버전에서 Spring Boot 3.xx 버전으로 마이그레이션을 진행하려 한다. 버전의 선택이유는 현재 사용하고 있는 3.x 버전과 이전 버전인 2.7x 버전에서 어떤 차이가 있는지 확인해 보기 위함이다. 프로젝트를 진행하려고 하는데 현재 버전을 낮추고 진행하고 있지만 평소에 3.x버전에서 사용하던데로 코드를 작성하고 있었다. JDK 8, 11, 16 지원 중단Spring Boot 3.0은 Java 17 이상만을 지원한다. 이전 버전의 JDK(Java 8, 11 등)는 Spring Boot 3.0x에서 사용할 수 없다. Java EE -> Jakarta EE 전환Spring Boot 2.7.x 까지는 Java EE(javax) 패키지를 .. 2024. 9. 7. 스프링 부트에 swagger 적용하기 예약 도메인 프로젝트에 Swagger를 적용하려고 한다. 프로젝트는 스프링부트 2.7.x -> 3.xx 로 마이그레이션을 진행할 예정이기에 이 글에서 Swagger는 스프링부트 2.7x 버전에 적용되는 글임을 미리 알린다. Swagger란?Swagger는 Api 설계 및 문서화를 위한 프레임 워크로 RESTful Api를 직관적이고 체계적으로 관리하는데 유용한 도구이다. Swagger는 주로 개발자가 API의 사용법을 쉽게 이해하고 테스트 할 수 있도록 도와주는 API문서화 도구로 활용되며 Swagger를 통해 API의 구조와 동작을 명확히 정의할 수 있기에 클라이언트 개발자와 서버 개발자간의 소통 문서로도 활용할 수 있을것 같다. 장점자동화 : API 코드만 작성하면 Swagger가 API문서를 자동으.. 2024. 9. 5. 스프링 통합테스트 진행하기 feat(MockMvc, Spring Security) 이번 프로젝트 목표중 하나인 Test Coverage 80% 이상을 유지하기 위해 테스트 코드 작성을 진행하려 한다. 단위테스트가 개별적인 기능을 검증하는 데 중점을 두는 반면 통합테스트는 시스템의 전체적인 동작을 검증하는 데 중점을 둔다. MockMvc란?Spring MVC 애플리케이션에서 컨트롤러 레이어를 테스트하기 위한 도구로, 서버를 실제로 띄우지 않고도 HTTP 요청과 응답을 시뮬레이션 할 수 있게 해 주는 도구다. 통합테스트 설정통합 테스트는 전체 애플리케이션 컨텍스트를 로드하여 테스트 하므로 @SpringBootTest 애노테이션을 사용해야 한다.또한 요청 응답을 테스트 할 수 있는 도구인 MockMvc 를 활용 할 것이다.@SpringBootTest // 전체 애플리케이션 로드@AutoC.. 2024. 9. 4. MyBatis 1차 캐시와 2차캐시 MyBatis에서는 1차 캐시와 2차캐시 두가지 레벨의 캐시를 제공한다. 1차 캐시는 공식문서에 잘 나와있지 않아 테스트코드를 통해 한번 확인해 보자.이글에서는 스프링부트 2.7x , java11 환경에서 테스트 함을 미리 알린다. 1차캐시 (Local cache)1차 캐시는 MyBatis 에서 별도의 설정을 하지 않아도 활성화 되어 있다. 1차캐시는 세션 내에서만 유효하고 같은 세션 내에서 동일한 쿼리를 여러번 실행할 경우 데이터 베이스에 다시 접근하지 않고 캐시된 결과를 사용한다. 트랜잭션을 적용한 cacheTest@Test@DisplayName("cacheTest")@Transactionalpublic void cacheTest1(){ Member member = Member.builder(.. 2024. 9. 1. MyBatis의 Mapper XML 파일 매핑 MyBatis의 Mapper가 지원하는 XML의 기본적인 기능들을 살펴볼것이다. 이 글의 내용은 MyBatis의 공식문서를 기반으로 작성 할 것이며 test코드는 자바11, 스프링 부트2.7 버전에서 테스트를 진행하는 것임을 미리 알린다.이번 설명에서는 select, insert, Result Maps에 대해 다룰 예정이다.resultMap의 디테일한 association 과 collection의 기능은 프로젝트 진행시 적절한 예시와 함께 자세히 설명하겠다.동적 SQL은 다음장에서 보도록 하자.Select먼저 select를 통해 Mapper인터페이스와 Mapper XML이 어떻게 매핑 되는지 살펴볼것이다. MyBatis에서는 SQL 쿼리문을 매퍼 인터페이스와 XML 파일에 정읜 매핑을 통해 실행한다. 이.. 2024. 9. 1. 이전 1 2 3 다음