반응형

전체 글 310

[Spring] 스프링 AOP (Spring AOP)란 무엇인가? 프록시 기반 AOP, @AOP

스프링 AOP (Aspect Oriented Programming) : 관점 지향 프로그래밍AOP는 관점 지향 프로그래밍의 약자이다.객체 지향 프로그래밍 (OOP)이 '클래스 단위'로 관심사를 분리했다면, (AOP)는 '관심사 단위'로 분리하여 횡단 관심사 (Cross-Cutting Concern)를 모듈화할 수 있게 해줍니다. 횡단 괌심사(Cross-Cutting Concern)란? 애플리케이션의 여러 모듈에 공통적으로 적용되어야 하는 기능.예: 로깅, 보안, 트랜잭션, 성능 모니터링, 예외 처리 등.이들을 비지니스 로직에서 분리하지 않으면, 코드 중복과 유지보수 어려움이 발생. 용어 정리Aspect(관점) : 공통 기능(횡단 관심사)을 모듈화 한 것. ex) 트랜잭션 처리 모듈Join Point :..

IT 정보/Spring 2025.04.15

[매일메일] @Transactional은 private 메서드에서 동작할까? — Spring AOP의 진짜 동작 원리

private 메서드에서 트랜잭션은 동작할까?-> 아니요. 동작하지 않습니다 이유 1. Spring AOP는 프록시 기반이며, private 메서드는 프록시가 가로챌 수 없습니다.Spring AOP는 런타임에 프롤시 객체를 생성하여 부가기능(transactional, @Cashable, @Async)을 적용합니다.JDK 동적 프록시는 인터페이스 기반의 public 메서드에만 적용됩니다.CGLIB 프록시는 클래스 상속 기반으로 public, protected, package-private 까지만 적용됩니다.즉, private 메서드는 대상이 되지 않습니다. 이유 2 .Self-invocation 문제 (같은 클래스 내부 호출)클래스 내에서 자신의 메서드를 호출하면, 프록시를 거치지 않고 직접 호출됩니다.이..

[매일메일] 이미지 크기가 큰 경우 렌더링 속도 개선하는 방법 5가지!

렌더링 속도 개선하는 방법 5가지! 렌더링 속도 개선 방법 5가지이미지 포멧 최적화이미지 사이즈 조정css 스타일지연 로딩(Lazy Loading)CDN 이미지 포멧 최적화기존의 JPEG 또는 PNG 대신 WebP, AVIF 등의 고효율 이미지 포맷을 사용하면, 동일한 품질 수준에서 더 작은 용량의 이미지를 제공할 수 있습니다.단, 일부 구버전 브라우저에서는 최신 이미지 포멧(WebP, AVIF)을 지원하지 않기 때문에, 호환성 문제가 발생할 수 있습니다.// 위 구조를 통해 브라우저는 지원되는 최신 포맷(WebP 또는 AVIF)을 우선적으로 로드하고, // 그렇지 않을 경우 JPEG 등의 표준 포맷으로 자동 전환하는 방법 이미지 사이즈 조정실제 노출 화면에 비해 과도하게 큰 이미지 파일은 불..

[매일메일] 낙관적 업데이트란?

낙관적 업데이트낙관적 업데이트는 성공적인 상태 업데이트가 이뤄질 거라는 가정 하에 서버 응답 이전에 UI를 미리 업데이트하는 방법입니다. 사용자 요청을 서버가 성공적으로 처리할 거라고 미리 예상하고, UI를 즉각적으로 변경해서 사용자에게 빠른 반응을 보여줍니다.낙관적 업데이트의 대표적인 예시로 좋아요 기능을 들 수 있습니다. 예를 들어, 사용자가 좋아요 버튼을 클릭하면 서버 응답을 기다리지 않고, 화면에 바로 좋아요 클릭에 대한 상태를 보여주는 것입니다. 서버 응답이 성공적으로 돌아오면 그대로 두고, 혹시나 실패하면 UI에서 해당 좋아요 상태를 다시 해제하거나 오류 메시지를 보여주는 방식입니다.낙관적 업데이트의 장점은, 서버 응답 속도와 관계 없이 즉각적인 피드백을 제공해서 사용자들이 시스템을 빠르게 쓸..

[매일메일] Connection Timeout, Socket Timeout, Read Timeout의 차이점?

Connection TimeoutConnection Timeout 은 클라이언트가 서버에 연결을 시도할 때, 일정 시간 내에 연결이 이루어지지 않으면 발생하는 타임아웃입니다. TCP 소켓 통신에서 클라이언트와 서버가 연결될 때, 정확한 전송을 보장하기 위해 사전에 세션을 수립하는데, 이 과정을 3-way-handshake라고 합니다. Connection Timeout은 이 3-way-handshake가 일정 시간 내에 완료되지 않을 때 발생합니다. 즉, 서버의 장애나 응답 지연으로 인해 연결을 맺지 못하면 Connection Timeout이 발생합니다.정의 : 클라이언트가 서버와 연결을 시도할 때, 정해진 시간 안에 3-way-handshake가 완료되지 않았을 때 발생.원인 : 서버 다운, 방화벽 차단..

[프로그래머스] 389480 : 완전범죄 [JAVA] Lv.2

문제 풀이 설명 (summary)각 도둑 A,B 가 각각 흔적 누적 개수 이상이 되면 실패한다. A 도둑이 남긴 흔적의 누적개수의 최솟값을 리턴해야 하므로 깊이 우선 탐색을 활용하여 도달했을 때 A도둑의 누적 개수를 기록 하여, 기존값과 비교해서 작은값을 저장해서 관리초기값 그대로라면 -1 출력 문제 풀이 접근법DFS 방식 가능DP 방식 가능 풀이 코드 (Code)import java.util.ArrayDeque;public class Main { public static void main(String[] args) { int[][] info = new int[][]{{1,2},{2,3},{2,1}}; int n = 4; int m = 4; Syst..

[프로그래머스] 12980 : 산모양타일링 [JAVA] Lv.2

문제 풀이 설명 (summary)짝수인 경우 무조건 나누기홀수인 경우 -1 이동0이 될 때까지 반복 문제 풀이 접근법그리디 알고리즘(Greedy Algorithm)모든 상황에 순간이동이 무조건 우선적으로 실행하면 됨.현재 상황에 최적화 된 풀이로 진행 풀이 코드 (Code)public class Main { public static void main(String[] args) { int N = 6; System.out.println(solution(N)); } private static int solution(int s) { int ans = 0; while (s > 0) { if (s % 2 == 0) { ..

[알고리즘] BFS(queue) vs DFS (stack)

Deque / BFS / DFS 정리BFS (queue) -> add / poll : 먼저 들어온 데이터가 먼저 나가는 구조- FIFO (First In, First Out)- 삽입 (add): 데이터를 **뒤쪽(Rear)**에 추가.- 삭제 (poll): 데이터를 **앞쪽(Front)**에서 제거.DFS (stack) -> push / pop : 나중에 들어온 데이터가 먼저 나가는 구조- LIFO (Last In, First Out)- 삽입 (Push): 데이터를 **위쪽(Top)**에 추가.- 삭제 (Pop): 데이터를 **위쪽(Top)**에서 제거.-> BFS : Queue : 너비 우선 (Breadth) : 가까운 정점부터 탐색.-> DFS : Stack : 깊이 우선 (Depth) : 최대한 깊..

[개발 회고 #7] Vue.js + SpringBoot – 드디어 백엔드 시작, 진도군청 통합조직도 프로젝트

드디어 기다리던 백엔드 업무를 처음으로 맡게 되었습니다. 진도군청 통합조직도 구축 프로젝트에 참여하면서Vue.js와 Spring Boot를 함께 다루는 기회를 얻었습니다. 프론트엔드를 주로 담당했지만, 내가 필요로 하는 API는 직접 백엔드에서 구현하면서 A부터 Z까지 전체 흐름을 경험할 수 있었던, 아주 뜻깊은 프로젝트였습니다. 🔧 주요 프로젝트 – 진도군청 통합조직도 구축이번 프로젝트는 정부 기관인 진도군청의 새로운 조직도 시스템을 구축하는 일이었습니다. 기존 시스템은 문서도, 가이드도 부족했고, AS-IS 시스템에 대한 이해 없이 시작해야 했습니다. 이로 인해 데이터를 임의로 추측해 생성하거나 구조를 역으로 유추하는 작업이 많아졌습니다.그 과정에서 불확실한 점이 많았고, 진행 자체가 쉽지 않았지만..

[매일메일] 프론트엔드 E2E 테스트란?

프론트엔드 E2E 테스트란? 🤔프론트엔드 E2E(End-to-End) 테스트는 애플리케이션의 사용자 경험을 처음부터 끝까지 시뮬레이션하여 테스트하는 방식입니다. 단위 테스트나 통합 테스트와 달리, E2E 테스트는 사용자 관점에서 전체 애플리케이션이 의도한 대로 작동하는지 검증합니다. 브라우저 환경에서 실제 사용자 동작을 흉내 내어 다양한 시나리오를 테스트하며, 버튼 클릭, 페이지 이동, 데이터 입력 등을 포함합니다. 보통 E2E 테스트는 Cypress, Playwright과 같은 도구를 이용해 작성합니다.E2E 테스트를 진행하면 사용자와 동일한 방식으로 애플리케이션을 테스트하므로, 사용자에게 직접적인 영향을 미치는 오류를 조기에 발견할 수 있습니다. 이는 프로덕트의 안정성을 높이고, 실제 배포 후 발생..

반응형