728x90

BE 6

[BE] Amazon Linux 2023 no module named 'dnf' 에러

https://xelloss111.tistory.com/67 sudo alterna" data-og-host="xelloss111.tistory.com" data-og-source-url="https://xelloss111.tistory.com/67" data-og-url="https://xelloss111.tistory.com/67" data-og-image="https://blog.kakaocdn.net/dna/hQdW0/hyZQ7yrRyj/AAAAAAAAAAAAAAAAAAAAAMMChvPvkX7ntAe89eudXns18NwzowKdo_k0aHGq5RqP/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1788188399&allow_ip=&allow_referer=&signature=ClJ8WLlqECyULqEZJhX1OKwR6yg%3D

BE 2026.01.06

[BE] PermittedSubclasses requires ASM9

https://tobuymacbookpro.tistory.com/entry/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85-PermittedSubclasses-requires-ASM9-%EC%97%90%EB%9F%AC [트러블슈팅] PermittedSubclasses requires ASM9 에러김영한 선생님 자바 코드를 스프링부트 3.1.5로 업글하면서 발생한 문제. gradle 버전 충돌 문제다 프로젝트 이름/gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-7.tobuymacbookpro.tistory.comgradle ver..

BE 2026.01.06

[BE] Spring AOP

Spring에서 AOP는 트랜잭션, 로깅, 보안, 성능 모니터링 등공통 로직을 한 곳에서 관리하기 위한 핵심 기술이다.@Transactional도, @Async, @Cacheable도 내부적으로는 AOP 위에서 돌아간다.1️⃣ AOP란?AOP(Aspect Oriented Programming, 관점 지향 프로그래밍) 은비즈니스 로직과 직접 관련은 없지만여러 모듈에서 공통적으로 필요한 기능(부가 기능) 을한 곳에서 관리할 수 있게 해주는 프로그래밍 방식이다.💡 예시로그 출력실행 시간 측정트랜잭션 관리예외 처리인증/인가 (Security)이런 기능을 흩어진 관심사(Cross-Cutting Concern) 라고 부른다.2️⃣ AOP가 필요한 이유기존에는 이런 공통 기능을 각 메서드마다 직접 작성해야 했다.p..

BE 2025.11.06

[BE] @Transactional 동작 원리

1️⃣ @Transactional의 역할@Transactional은 이름 그대로 트랜잭션 경계를 정의한다.메서드 실행 전후로 Spring이 자동으로 다음을 수행한다.트랜잭션 시작 (connection.setAutoCommit(false))비즈니스 로직 실행정상 종료 시 → Commit예외 발생 시 → Rollback즉, 개발자는 “트랜잭션 경계를 직접 관리하지 않고”,선언적 트랜잭션(declarative transaction) 방식으로 처리할 수 있다.2️⃣ 내부 동작 구조 — AOP Proxy 기반@Transactional은 단순한 어노테이션이 아니다.스프링은 이를 인식해 AOP Proxy 객체를 생성한다.동작 순서스프링이 Bean을 생성할 때, @Transactional이 붙은 클래스를 스캔한다.해당..

BE 2025.11.06

[BE] JPA N+1 문제 완벽 정리 — 왜 생기고 어떻게 해결할까

처음엔 잘 작동하던 코드가 데이터가 많아지면서 갑자기 느려지기 시작한다면,그 배경엔 종종 N+1 쿼리가 숨어 있다.1️⃣ N+1 문제란?간단히 말해,한 번의 조회로 충분한 데이터를 가져오지 못하고,연관된 데이터를 가져오느라 추가 쿼리가 N번 더 실행되는 문제다.예를 들어 이런 코드가 있다고 해보자. List members = em.createQuery("select m from Member m", Member.class).getResultList();for (Member member : members) { System.out.println(member.getTeam().getName());}이 코드는 언뜻 보면 문제가 없어 보이지만, 실제 실행되는 SQL을 보면 이렇다.select * from me..

BE 2025.11.06
728x90