Spring 17

JPA > 문제 해결

Caused by: org.hibernate.query.SemanticException: Fetch join has a 'with' clause (use a filter instead)Fetch join 시 with/on 절을 사용했더니 발생-> Where 절에서 필터링 해야함 페치 조인은 객체 그래프를 함께 로딩하기 위해 사용하는 건데, on 조건을 사용하면 연관 엔티티의 일부만 조인되므로, 영속성 컨텍스트에 불완전한 객체가 들어갈 수 있어 위험 이게 무슨말이냐면, Post 엔터티가 Comment 컬렉션 엔터티를 가지고 있을 때, JPQL에서 Comment의 deleted = false로 조회하였다면, 나중에 post.getComments()를 호출해도 deleted = true인 것은 조회되지 않음...

Spring/JPA 2025.05.26

Spring > 전역 예외 처리기의 최상위 예외 클래스 처리 메서드에서 잡지 못하는 예외가 있다?

문제@RestControllerAdvicepublic class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity handleException(Exception e) {... 위와 같은 전역 예외 처리기가 있다고 하자. 클라이언트에서 요청을 하였는데 400 응답 코드를 가진 응답을 받았는데, 서버에서는 로그가 찍히지 않는다. 클라이언트가 받은 응답에서는 원인을 나타내는 실마리가 없었다. 분석 및 해결서버 로그 레벨을 변경해보자logging: level: org.springframework.web.method.HandlerM..

Spring 2025.05.15

Spring > Cache > @Cacheable로 저장되는 데이터 자료구조

@Cacheable(cacheNames = "user") // @Cacheable("user")와 동일public User readUserById(String id) 이렇게 설정했고 메서드 호출 시 파라미터를 1로 넘겼다면, 레디스에 캐시 키는 어떻게 저장될까? > KEYS1) "user::1" 이때 해당 키는 레디스에 어떤 자료구조로 저장될까?> TYPE user::1string @Cacheable은 단순 key → value 캐싱 구조이며, 레디스에 저장될 때도 보통 직렬화된 객체를 문자열로 저장한다. 즉, @Cacheable로는 Redis의 Hash 구조를 직접 활용하지 못한다. RedisTemplate을 직접 사용해야 한다 HashOperations를 사용하여 저장한 경우는 아래와 같이 저장된다>..

Spring/Cache 2025.05.08

Spring > Logging > 서버의 파일 로그의 한글 깨짐

문제애플리케이션이 특정 예외를 던졌고 파일 로깅을 하였는데 아래와 같이 한글이 깨져서 나왔다Exception: ??? ?? ??????? 리눅스 시스템 Locale 확인$ localeLANG=ko_KR.UTF-8LC_CTYPE="ko_KR.UTF-8"LC_NUMERIC="ko_KR.UTF-8"LC_TIME="ko_KR.UTF-8"LC_COLLATE="ko_KR.UTF-8"LC_MONETARY="ko_KR.UTF-8"LC_MESSAGES="ko_KR.UTF-8"LC_PAPER="ko_KR.UTF-8"LC_NAME="ko_KR.UTF-8"LC_ADDRESS="ko_KR.UTF-8"LC_TELEPHONE="ko_KR.UTF-8"LC_MEASUREMENT="ko_KR.UTF-8"LC_IDENTIFICATION=..

Spring/Logging 2025.04.30

Spring Boot > Kafka > 카프카 시작하기

https://spring.io/projects/spring-kafka  사용 기술GradleJava 8Spring Boot 2여기서는 2.4.13 사용Spring Kafka위 버전을 사용하면 spring-kafka 2.6.12가 사용된다https://docs.spring.io/spring-kafka/docs/2.6.12/reference/html/Spring Kafka Test내장 카프카 브로커 사용을 위함  설치https://docs.spring.io/spring-kafka/docs/2.6.12/reference/html/#introduction build.gradleplugins { id "java" id "org.springframework.boot" version "2.4.13" ..

Spring/Kafka 2024.10.28

Spring Security > 사용자 테이블만 사용하는 애플리케이션에 체계적인 역할 기능을 추가해보자

현 상태user 테이블이 있다 권한 칼럼도 가지고 있다 사용자의 접근 권한 확인을 user 테이블에서 사용자 정보를 조회 후 권한 칼럼을 기준으로 관리자인지 아닌지를 코드에서 분기원하는 바user_authority 테이블을 만들어 사용자와 권한의 관계를 1:N으로 만들어 한 사용자가 여러 권한을 가지게 할 수도 있겠지만, 여기서는 간단히 세부적인 권한이 아닌 역할로 관리하며 1:1 관계를 유지하고, user 테이블을 그대로 사용하기로 한다  사용자 역할 클래스 생성@RequiredArgsConstructor@Getterpublic enum UserRole { ADMIN(FullName.ADMIN), SUPER_ADMIN(FullName.SUPER_ADMIN); private final S..

MyBatis-Spring-Boot-Starter > 멀티 모듈 프로젝트에서 다양한 방식으로 사용해보기

동기새 Spring Boot 프로젝트를 만들어 MyBatis-Spring-Boot-Starter을 적용할 때는 쉬운데, Spring MVC 프로젝트를 부트로 전환할 때 기본기가 부족해서 그런지 잘 되지 않아 학습 프로젝트를 만들어가며 이해해보려고 한다  사용 기술GradleJava 8Spring Boot 2여기서는 2.7.18 사용H2 DB내장 DB를 사용해 테스트mybatis-spring-boot-autoconfigure  mybatis-spring-boot-autoconfigure 적용https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure 사용 버전에 따라 MyBatis-Spring, Spring Boot 버전이 결정되니 적..

Spring/MyBatis 2024.04.18

Spring Boot > Fully executable jar 실행 시 MyBatis 에러

에러 내용 Caused by: java.lang.ClassNotFoundException: Cannot find class: 별칭 at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200) 환경 org.mybatis.spring.boot:mybatis-spring-boot-starter 의존성 사용 SqlSessionFactory 빈을 직접 등록해서 사용 원인 SqlSessionFactory 빈을 별도로 등록하지 않고 스프링 부트 자동 설정을 통해 빈이 등록되도록 하면 문제가 없다 org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure 의존성의 MybatisAuto..

Spring/Spring Boot 2024.04.18

Spring Boot > Boot 1을 Boot 2로 전환

3/27/2024, Gradle 기준 정확히는 1.5.22.RELEASE를 2 최신 버전(2.7.x)으로 전환하는 것이다 Boot 1의 최신 버전(1.5.x)까지 올린다 의존성 목록: https://docs.spring.io/spring-boot/docs/1.5.x/reference/html/appendix-dependency-versions.html Java 6+와 Spring Framework 4.3.25을 요구한다 여기서는 이미 최신 버전을 사용하고 있어 건너띔 Boot 2의 첫 버전(2.0.0.RELEASE)으로 올린다 의존성 목록: https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/appendix-dependency-versions.ht..

Spring/Spring Boot 2024.03.25