본문 바로가기

분류 전체보기117

24/01/02 문제 특정 보드 ID에 관한 연결된 컬럼들이랑 그 각 컬럼들에 연결된 카드들 가져올때 N+1 문제 발생 먼저 코드를 보면 중간 테이블을 이용해서 특정 ID 보드를 가져오고 그 보드에서 연결된 컬럼들을(columnList) 가져온다. 그후 columnList에 들은 각 컬럼들에서 또 연결된 카드들을(columns.getCards() )가져오는데 N+1문제가 생긴다. 결국 이렇게 쿼리문이 5개 나간다.(해당 보드에 연결된 컬럼이 총5개) 원인 컬럼에 카드랑 연결관계인 cards필드를 지연로딩으로 설정해서 각 컬럼의 cards에 접근할때 쿼리문을 따로따로 날려서 컬럼 총 갯수만큼 쿼리문이 나간다. 해결 Fetch Join을 이용해서 총 컬럼의 정보를 가져올때 동시에 각 컬럼에 들은 카드정보도 가져온다. 특정 .. 2024. 1. 2.
N+1문제 문제 특정 보드 ID에 관한 연결된 컬럼들이랑 그 각 컬럼들에 연결된 카드들 가져올때 N+1 문제 발생 먼저 코드를 보면 중간 테이블을 이용해서 특정 ID 보드를 가져오고 그 보드에서 연결된 컬럼들을(columnList) 가져온다. 그후 columnList에 들은 각 컬럼들에서 또 연결된 카드들을(columns.getCards() )가져오는데 N+1문제가 생긴다. 결국 이렇게 쿼리문이 5개 나간다.(해당 보드에 연결된 컬럼이 총5개) 원인 컬럼에 카드랑 연결관계인 cards필드를 지연로딩으로 설정해서 각 컬럼의 cards에 접근할때 쿼리문을 따로따로 날려서 컬럼 총 갯수만큼 쿼리문이 나간다. 해결 Fetch Join을 이용해서 총 컬럼의 정보를 가져올때 동시에 각 컬럼에 들은 카드정보도 가져온다. 특정 .. 2024. 1. 2.
중간 테이블 데이터 삭제 문제 문제+원인 보드에 참여중인 유저들의 정보는 2번째 캡처 보면 7번 보드에 1,3번 유저들이 참여중인데 만약 3번 유저가 이제 보드에서 나가고 싶어 해서 사용자보드에서 보드가 7번,유저가3번인 해당 pk번호 16번만 삭제 하는데 사용자 보드에 보드 번호가 7번인 데이터들 다 사라지고 보드 테이블에서도 보드가 7번인게 삭제 되었다. 알고보니 사용자보드 엔티티에 보드 필드에 영속성 전이 ALL이 걸려 있어서 그런거였다. 그래서 영속성 전이 설정 상태에서 사용자 보드의 로우만 지우는 방법이 없나 고민이였다 해결 영속성 전이 걸려있는 상태에서 사용자보드에 해당 로우만 지우는 방법은 없는거였다. 그러니 최종적으로는 사용자보드에서 영속성 전이 하면 안된다. 그러면 영속성 전이 ALL 지우고 했을땐 정상적으로 해결 됬.. 2023. 12. 29.
23/12/26 연관 관계 단방향 영속성 전이 Remove오류 일단 테이블이 유저-게시글-댓글 이있고 관계는 게시글(N)-유저(1): 단방향 댓글(N)-게시글(1): 양방향 문제 게시글 엔티티에서 댓글이랑 연관관계 설정한 필드에 영속성 전이 Remove를 걸고 게시글 삭제시 해당 게시글이랑 연결된 댓글도 자동으로 삭제 할 줄 알았으나 게시글에 연결된 유저도 삭제를 시도 한다해서 오류가 난다. 원인 게시글이랑 유저는 단방향이라 누가 부모인지 몰라서 그렇다. 해결 1.방법은 게시글에 연결된 데이터를 따로 먼저 다 삭제 해주고 그다음 게시글을 삭제 해준다. 해당 댓글 부터 다 삭제후 게시글 삭제 2.유저랑 게시글도 그냥 양방향으로 한다.(외래키 설정 했을시) 하지만 실제 일할땐 많이들 외래키 설정 안하고 참조 id만 설정하고.. 2023. 12. 26.
연관 관계 단방향 영속성 전이 Remove 오류 일단 테이블이 유저-게시글-댓글 이있고 관계는 게시글(N)-유저(1): 단방향 댓글(N)-게시글(1): 양방향 문제 게시글 엔티티에서 댓글이랑 연관관계 설정한 필드에 영속성 전이 Remove를 걸고 게시글 삭제시 해당 게시글이랑 연결된 댓글도 자동으로 삭제 할 줄 알았으나 게시글에 연결된 유저도 삭제를 시도 한다해서 오류가 난다. 원인 게시글이랑 유저는 단방향이라 누가 부모인지 몰라서 그렇다. 해결 1.방법은 게시글에 연결된 데이터를 따로 먼저 다 삭제 해주고 그다음 게시글을 삭제 해준다. 2.유저랑 게시글도 그냥 양방향으로 한다.(외래키 설정 했을시) 하지만 실제 일할땐 많이들 외래키 설정 안하고 참조 id만 설정하고 해서 일단 양방향으로 하고 1번의 해결 방법으로 한다 그랬다.. 2023. 12. 26.
23/12/18 JDK: Java Development Kit인 자바 프로그래밍 언어를 개발하기 위한 도구들의 집합을 말하고 JDK는 컴파일러(.java파일을 .class로 변환),JRE,JVM,표준 라이브러리 및 도구들(개발 및 디버깅 도구)을 포함한다. JRE: Java Runtime Environment인 자바 실행환경을 말한다. 자바 프로그램을 실행하기 위해 필요한 라이브러리, 클래스, JVM, 기타 지원 파일 등을 포함하고 있다. 자바 프로그램을 개발하는 데는 JDK가 필요하지만, 자바 프로그램을 실행하는 데에는 JRE만 있으면 된다. JVM: Java Virtual Machine인 자바 가상 머신으로, 자바 애플리케이션을 실행하기 위한 가상 컴퓨터를 말한다. 하지만 다른 플랫폼(윈도우7,10,11,맥,리눅스등.. 2023. 12. 18.
23/12/15 아웃소싱 팀 프로젝트 회고 우리가 JPA를 사용하면서 연관관계를 형성하지 않고 외래키(Id)만을 필드로 두면서 엔티티를 설계한 이유 JPA를 사용하면서 객체 그래프 탐색할 때 실행되는 쿼리가 궁금해졌다. JPA는 연관관계만 설정해 주면 해당 연관관계에 접근했을 때, 자동으로 쿼리를 실행해 준다. 이 자동으로 실행되는 쿼리는 우리가 예상하지 못하는 무수히 많은 수의 쿼리가 실행될 수도 있고, 성능상 좋지 못한 쿼리가 실행될 수도 있다. 그래서 예상되는 쿼리를 데이터베이스 조인을 통해 우리가 SQL로 직접 작성하여 실행함으로써 연관관계에 대한 객체 그래프 탐색을 SQL을 통해 구현하기로 하였다. 혹시나 다음에 다른 ORM으로 변경되더라도, 우리가 작성한 코드의 큰 변경없이 마이그레이션하기 좋고, 유지보수가 .. 2023. 12. 15.
23/12/14 AOP aop는 관점 지향 프로그래밍이라 불리고 핵심 기능과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것이다 어드바이스 부가기능을 핵심기능에 언제 수행할 건지를 정하는 것이다. (핵심기능 실행전 or 실행후 or 전후 전부 or 핵심기능이 오류가 난다면 예외 터지면 그때 수행 or 핵심기능 예외없이 성공후 수행) @Around: '핵심기능' 수행 전과 후 (@Before + @After) @Before: '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행) @After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작) @AfterReturning: .. 2023. 12. 14.
23/12/13 예전 뉴스피드 프로젝트중 공통 예외 처리를 이런방식으로 직접 서비스단에서 HttpStatus,메세지를 적어서 넘겨주고,공통 ExceptionResponse를 사용 안해서 컨트롤쪽에서 일일이 trt,catch문으로 해서 코드만 길어지는 문제가 있었다. 그래서 enum으로 하고 공통 ExceptionResponse 사용 하는 방법도 있다. enum으로 하는 방식 1. 먼저 enum클래스를 생성후 각 상수에 int형 상태코드랑 반환할 메세지 적는다. 2. 예외 클래스를 만든다.(현재 캡처는 비니지스,커스텀 예외 추가중) 예외 클래스 생성자에서 enum클래스를 받는다. super부분이랑 this.status는 받은 enum클래스의 정보에 해당 상수값 가져온다 3. 글로벌 예외 핸들러 생성한다. httpStatu.. 2023. 12. 13.