분류 전체보기 495

oneToMany가 연속적일 때 failed to lazily initialize a collection of role 에러 해결

member에 ticket이 1:N으로 있고 ticket에 1:N으로 file이 있는 연관관계에서 LazyLoadingException이 발생하여서 문제를 해결하는 과정을 기록합니다. nested fetch를 하려고 하였으나, org.hibernate.loader.MultipleBagFetchException이 발생하여 쿼리를 분리하던 과중에서 생긴 문제입니다. LazyLoading 문제상황 @Override public Member findMemberWithTicketsAndMemberTeamsByMemberId(Long memberId) { Member memberWithTickets = memberRepository.findMemberWithTicketsById(memberId) .orElseThr..

IT/디버깅 2024.01.28

jwt 사용 시 remember me 적용 안되는 이슈

spring version 3.xx 와 jwt를 사용해 login을 구현한 프로젝트에서 remember me 로 로그인 유지를 구현하려고 하는 중 remember me cookie가 생성되지 않아 이를 해결하는 과정을 포스팅합니다. 1. RememberMe가 동작하지 않는지 체크 spring security의 rememberMeAuthenicationFilter는 잘 동작하고 있음을 확인했습니다. 2. 다른 원인에 대한 고민 - Session Cookie SecurityConfig의 SessionCreationPoilicy.STATELESS 사용은 Session을 생성하지 않음을 확인하였고, 쿠키 기반인 remember-me 세션 쿠키가 생성되지 않는 것이 당연한 것이었습니다. 따라서 Security의 ..

IT/디버깅 2024.01.25

외장 톰켓에서 서버 실행해보기

이번 포스팅에서는 외장 톰켓에서 서버를 실행해본 과정에 대해 포스팅하려 합니다. 1. gradle 파일이 있는 곳으로 terminal 경로 설정하기 2. war 파일 생성하기 이후 build/libs에 war 파일이 생성되어 있음을 알 수 있습니다. WAR 파일은 Web Application Archive의 약자로 WAS에 배포할 때 사용하는 파일입니다. JAR 파일이 JVM 위에서 실행된다면, WAR 파일은 웹 어플리케이션 서버 WAS 위에서 실행됩니다. 3. apache-tomcat의 webapps에 war 파일을 넣습니다. 이 때 이름은 ROOT로 해야합니다. 4. apache-tomcat의 bin 폴더로 들어가 terminal에서 startup.bat(window 전용 명령어)를 실행해줍니다. S..

백엔드 2024.01.10

Alarm과 Alarm의 종류인 invitation 테이블을 분리할지에 대한 고민

기획적으로 알람에 invitation 알람, 새로운 ticket 생성에 대한 알람, FeedBack_Notice 알람 등 여러가지 알람이 존재한다. 하지만 Team invitation 을 따로 분리하자는 의견이 나왔다. invitation과 관련된 attribute가 많은데, 만약 Alarm에 합쳐지게 된다면, 다른 종류의 알람인 경우 관련 attribute 들 중 많은 것들이 null이 되기 때문이라는 것이 그 이유였다. 우리는 공통적인 부분을 Alarm 테이블로 만들고, 각각과 관련된 attribute를 따로 빼 상속하는 방식으로 데이터 테이블을 구성하기로 결정하였다.

카테고리 없음 2024.01.10

@WithMockUser 사용시 요청에 사용되는 User와 MockUser가 다른 경우 발생하는 에러 401

이번 포스팅에서는 realUser로 테스트를 작성해야 하는데 @WithMockUser 로 Authentication을 하게 되면, 인증과 인가의 context가 달라 401 에러가 발생하는 이슈를 해결하는 과정을 설명하고 있습니다. @WithMockUser 코드 @Test @Transactional @WithMockUser ( username = "patient", roles = { "PATIENT" } ) @DisplayName("testDeleteAppointmentRequestsAPI - 성공") public void testDeleteAppointmentRequestsAPI () throws Exception { // given final AppointmentRequestForm appointme..

IT/디버깅 2023.11.11

백준 10159 파이썬 풀이 bfs

이번 포스팅에서는 백준 10159번 저울문제를 bfs로 푼 방식에 대해 설명하겠습니다. 백준10159 정답 코드 # 복습 횟수:0, 01:30:00, 복습필요O import sys si = sys.stdin.readline from collections import deque N = int(si()) M = int(si()) graph_high = [[] for i in range(N+1)] graph_low = [[] for i in range(N+1)] def bfs_high(start, tmp_set: set): visited = [0 for i in range(N+1)] q = deque() q.append(start) visited[start] = 1 # 방문 처리 while q: start =..

카테고리 없음 2023.10.30

"query specified join fetching, but the owner of the fetched association was not present in the select list" 에러 원인과 해결

queryDsl을 사용하던 중 query specified join fetching, but the owner of the fetched association was not present in the select list 에러가 발생하여 원인과 해결과정에 대해 정리하는 포스팅입니다. 1. error의 원인 코드 jpaQueryFactory .select(mainPayment.itemImage, mainPayment.itemName, mainPayment.subPayment.pointUse) .from(mainPayment) .join(mainPayment.subPayment, subPayment) .fetchJoin() .fetchOne(); 위의 코드를 살펴보면 subPayment를 join 한 후 N..

IT/디버깅 2023.10.28

Service 계층 단위 테스트를 위한 Mockito 사용하기

기존에 @SpringbootTest 어노테이션를 사용하여 Service 계층을 테스트하였습니다. 그러나 실제 DB와 관련된 Repository 계층 등을 직접 주입받아야 했고, 이렇게 된다면 service 계층만의 단위 테스트를 제대로 하지 못할 것이라는 판단을 하였습니다. 따라서 Mockito를 사용하여 리팩토링하였는데, 이 과정을 포스팅하려 합니다. Service 계층 단위 테스트 - 기존의 코드 @SpringBootTest @Transactional(readOnly = true) @ExtendWith(MockitoExtension.class) class TicketInformationServiceTest { @Autowired private TicketInformationRepository tick..

백엔드/Spring 2023.10.17

백준 2331 python 풀이 bfs

이번 포스팅에서는 백준 2331번을 python으로 풀고 해설을 작성하려 합니다. 백준 2331 번 정답 코드 import sys from collections import deque si = sys.stdin.readline N, P = map(int, si().split()) def bfs(): q = deque() q.append(N) visited = [0 for _ in range(1000000 + 1)] visited[N] += 1 # 방문처리 while q: val = q.popleft() val = str(val) if val == 3: break number_list_str = list(val) new_val = 0 for number_str in number_list_str: new_v..

카테고리 없음 2023.09.11

비트맵과 RGB

이번 포스팅에서는 비트맵과 RGB에 대해 공부한 과정에 대해 포스팅하려고 합니다. 머신러닝 모델을 사용하던 중 32bit의 ARGB 비트맵을 RGB로 변환하는 코드를 공부하다, 호기심이 생겨 정리하는 포스팅입니다. 앱의 머신러닝 모델이 안드로이드의 비트맵 사진을 인식하기 위해서는 ARGB -> RGB 변환과정이 필요했기 때문입니다. 코드 float imageSTD = 255.0f; FloatBuffer buffer = FloatBuffer.allocate(BATCH_SIZE * PIXEL_SIZE * INPUT_SIZE * INPUT_SIZE); buffer.rewind(); int area = INPUT_SIZE * INPUT_SIZE; int[] bitmapData = new int[area]; bi..

카테고리 없음 2023.08.21