전체 글 69

[트러블슈팅] 트랜잭션 적용 안됨 | @Transactional 적용 안됨 | 알림 안보내짐

1. 문제 정의관심 물품으로 설정한 물품의 가격이 변동되었을 때, AOP로 알림을 보내려고 함.하지만 service에서는 제대로 oldPrice와 newPrice가 인식되지만 AOP에서는 oldPrice가 newPrice의 값과 일치하게 인식되는 문제 발생.@AfterReturning(value = "execution(* com.sprarta.sproutmarket.domain.item.service.ItemService.updateContents(..))", returning = "itemResponse", argNames = "joinPoint,itemResponse") public void notifyUsersAboutPriceChange(JoinPoint joinPoint, Object it..

개발일지 2024.11.07

[트러블슈팅] localhost:63342 오류 | localhost:63342 웹소켓 연결 안됨 | localhost:63342 연결 안됨

1. 문제 정의인텔리제이로 바로 브라우저로 들어갈 수 있는 아이콘을 클릭하여 브라우저로 접속하면 localhost:63342 포트로 접속됨.localhost:63342 포트에서 지속적으로 웹소켓 연결 테스트와 로그인이 진행되지 않음.  2. 사실 수집근본적으로 해결하는 방법을 찾지 못해서 콘솔에 있는 오류들을 모두 해결해보려고 코드도 고쳐봤지만,결국 돌아오는 건 똑같이 웹소켓 연결 안됨 + 로그인 안됨 오류.  3. 원인 추론 근본적으로 DB와 연결이 되지 않는다는 것을 확인.내 DB는 8080 포트로 로컬에 연결되어 있는데 지금 연결된 포트는 63342니, DB에 있는 내용을 불러올 수 없음.  4. 조치 및 방안 검토HomeController를 만들어 html 파일을 8080으로 접속하는 방안을 선택..

Spring 2024.11.05

[Spring Boot] WebSocket 사용법 | 웹소켓 사용법 | 웹소켓 실시간 알림 | 웹소켓 프론트 | 웹소켓 테스트하는 법 | 웹소켓 html

** 실시간 알림 구현의 6가지 방법 ** 1. WebSocket설명: WebSocket은 클라이언트와 서버 간의 양방향 통신을 제공하는 프로토콜입니다. 한 번 연결이 맺어지면 서버에서 클라이언트로 실시간으로 데이터를 푸시할 수 있습니다.장점:양방향 통신이 가능해 실시간 상호작용에 적합.서버에서 클라이언트로 즉시 알림 전송이 가능.단점:서버와 클라이언트 간의 지속적인 연결을 유지해야 하므로 서버 자원을 많이 소모할 수 있음.사용 예시: 채팅 애플리케이션, 실시간 알림 시스템.2. Server-Sent Events (SSE)설명: SSE는 서버에서 클라이언트로 일방향 통신을 위한 기술입니다. HTTP 연결을 유지한 상태에서 서버가 클라이언트에게 데이터를 전송할 수 있습니다.장점:HTTP 기반이므로 방화벽이..

Spring 2024.10.29

[AWS] EC2 WARNING: UNPROTECTED PRIVATE KEY FILE! 오류 | WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 오류 | 윈도우11 EC2 서버로 연결 | 윈도우 11 EC2 ssh 오류

EC2를 서버에 연결하려고 하니 계속 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: UNPROTECTED PRIVATE KEY FILE! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Permissions 0555 for '/mnt/c/Users/kikye/Desktop/AWS/key-pair.pem' are too open.It is required that your private key files are NOT accessible by others.This private key will be ignored.Load key "/mnt/..

AWS 2024.10.11

[개념정리] N+1 문제란? | N+1 문제 해결방법 | 단위 테스트와 통합 테스트의 차이점과 각각의 장단점 | QueryDSL을 사용하여 복잡한 동적 쿼리를 작성하는 방법 | 데이터베이스에서의 트랜잭션

N+1 문제란? 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상   해결 방법 연관관계에 대한 설정이 필요하면 성능 최적화를 위해 즉시 로딩을 사용하는 것이 아니라 지연 로딩을 사용하여 Fetch Join을 사용해야 한다. Fetch Join이란?JPQL을 사용해서 DB에서 데이터를 가져올 때 처음부터 연관된 데이터를 같이 가져오는 방법을 사용@EntityGraph 어노테이션이나 @Query 어노테이션을 사용          단위테스트, 통합테스트의 용도 단위 테스트는 목 객체를 이용해서 외부 의존성 제거하고 테스트 대상 코드만 검증하는 반면에 통합 테스트는 실제 환경에서의 동작을 검증하기 위해서 실제 데이터베이스나 외부 A..

개념정리 2024.10.11

[개념정리] JPA 동작 매커니즘 | JPA 동작 원리

JPA의 동작 원리  JPA의 동작 원리영속성 컨텍스트 안에 있는 1차 캐시에 Primary Key 값을 KEY로 저장하고 commit이나 flush가 일어날 때 DB에 영구적으로 저장되며 영속성 컨텍스트는 소멸하는 방식JPA는 엔티티 매니저를 생성하고 CRUD 작업을 할 수 있다.   변경 감지 영속성 컨텍스트에서 값을 조회하면 해당 객체가 영속 엔티티 성질을 가진다.그러면 조회 시 1차 캐시는 저장된 상태일 것이고, 이때 1차 캐시에 저장될 때는 스냅샷이 함께 저장된다.값이 commit이나 flush를 통해 변경된다면 호출되는 시점에 스냅샷과 엔티티를 비교하여 변경사항이 발생하면 쓰기지연 SQL 저장소에 update 쿼리문을 날려서 이후에 DB에 반영하는 변경 감지 매커니즘을 가지고 있다.

개념정리 2024.10.11

[AWS] AWS EC2 서버 연결 | AWS EC2 java 파일 연결 서버 실행 | AWS RDS MySQL 연동 | AWS RDS MySQL 연동 | AWS EC2, RDS 연결 순서대로 | EC2 health check API 구현

1. 일단 EC2 생성 https://dhun.tistory.com/8 [Spring Boot] AWS에 프로젝트 배포하기(EC2, FileZilla)1. AWS EC2에 들어가서 인스턴스 시작 클릭 2. 인스턴스 이름 입력하고, OS는 Ubuntu 18.04 버전으로 선택 3. 인스턴스 유형은 t2.micro이고, 새 키 페어 생성 후 인스턴스 시작 4. 인스턴스 클릭해서 보안dhun.tistory.com   2. 생성한 keypair를 바탕화면 -> AWS 디렉토리를 만들고 그 안에 넣어주기   3. 다음에 내가 만든 Spring Boot 파일에서 build한 뒤 나오는 jar 파일 나오는지 확인 (1번 블로그 참고)   4. RDS 생성 https://velog.io/@wonizizi99/Web-A..

AWS 2024.10.08

[개념정리] 지연 로딩(LAZY loading)과 즉시 로딩(EAGER loading)의 개념 | 지연 로딩과 즉시 로딩의 장단점

지연 로딩과 즉시 로딩의 개념 JPA에서 지연 로딩과 즉시 로딩은 데이터베이스에서 데이터를 추출하는 방식입니다.지연 로딩은 실제로 데이터가 필요할 때 데이터를 가져오는 방식입니다.즉시 로딩은 데이터를 요청할 때 즉시 관련된 데이터를 모두 가져오는 방식입니다.   지연 로딩의 장단점 지연 로딩의 장점은 필요할 때만 데이터를 가져오고, 불필요한 데이터를 로딩하지 않기 때문에 메모리 사용량을 줄일 수 있다는 것입니다.지연 로딩의 단점은 데이터 접근 시 추가적인 데이터베이스 쿼리가 발생하여 응답 시간이 길어질 수 있기 때문에 성능 저하가 발생할 수 있다는 것입니다.    즉시 로딩의 장단점 즉시 로딩의 장점은 데이터를 한번에 가져와 미리 로딩하기 때문에 데이터 접근 시 추가적인 데이터베이스 쿼리가 발생하지 않는..

개념정리 2024.10.07

[Spring] Spring Security 테스트 코드 401 에러 | Spring Security 테스트 코드 401 에러 해결법

스프링 시큐리티를 적용하고 나서 TodoController를 이렇게 작성해주었다.@WebMvcTest(TodoController.class)class TodoControllerTest { @Autowired private MockMvc mockMvc; @MockBean private TodoService todoService; @MockBean private JwtUtil jwtUtil; @Test void todo_단건_조회에_성공한다() throws Exception { // given long todoId = 1L; String title = "title"; CustomUserDetails authUser ..

Spring 2024.10.06

[알고리즘] 프로그래머스 lv.1 문자열 내림차순으로 배치하기 자바

문제 설명 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.   제한사항str은 길이 1 이상인 문자열입니다.   입출력 예sreturn"Zbcdefg""gfedcbZ"    코드import java.util.Arrays;class Solution { public String solution(String s) { char[] arr = s.toCharArray(); Arrays.sort(arr); StringBuffer sb = new StringBuffer(new String(arr)); ..

알고리즘 2024.10.04