Spring & Spring Boot

회사에서 개발했던 어드민 사이트의 코드를 리팩토링했다..아니 해야만 했다.. 이유는…정말 너무너무 느려서,,,,^^,,, 회원들의 출석내역을 월별로 다운로드하는 기능이 있는데 데이터가 늘어나면 늘어날수록..정말 엄청난 시간이 걸린다..  수정 전기존 코드에서 대량의 출석 데이터를 처리할 때 성능 문제가 발생했다. 각 회원의 출석 횟수를 개별적으로 조회하여 병렬로 처리하더라도 데이터베이스 호출 횟수가 많아져 전체 성능이 저하되었다. 데이터 약 7만 3천 개 기준 2시간 이상,,,이면 말 다했다. (아래의 모든 코드는 실제 사용한 코드를 수정한 예제 코드입니다.) @Transactionalpublic List exportMonthlyAttendanceList(int year, int month){ //..
간단하게 새로운 토이 프로젝트를 만들어보려고 한다. 프론트는 Thymeleaf를 이용하는데 Thymeleaf layout을 적용하는데 문제가 생긴 것 같다. 꽤 며칠을….이걸로 골머리를 앓다가..정말 어이없게 해결하게 되어서..기록해둔다.  문제 발생Thymeleaf layout을 적용하는데 뭔가 이상하다.우선 버전은 다음과 같다.Java 17Spring Boot 3공통 레이아웃을 만들어두고 사용하고자 하는데 적용이 안된다. gradle 파일에서 의존성을 확인하고, 공통 레이아웃 파일들의 경로에도 문제가 없는데..dependencies{ ... implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' imple..
새로운 프로젝트 진행 중 만나버린 친구.. 오랜만이다 CORS 에러.. 안녕?.. CORS 에러는 웹 개발자라면 꼭 만날 수 밖에 없는 에러로 명성이 자자하다. CORS란? Cross-Origin Resource Sharing의 줄임말로 웹 브라우저에서 다른 출처의 리소스 공유에 대한 허용/비허용을 다룬 보안 정책이다. 예를 들어, 다른 회사의 API 등 다른 도메인의 API(다른 출처)를 이용하고 싶을 때 CORS 허용 설정이 되어 있어야 성공적으로 API에 접근해 리소스를 공유받을 수 있다. CORS 설정 방법 CORS 에러를 해결하기 위한 여러 방법이 있겠지만 오늘은 직접 서버에서 HTTP 헤더 설정을 통해 다른 출처를 허용하도록 설정하려고 한다. Spring 서버, Node 서버 등 각 서버에 맞..
새로운 프로젝트에서 Java 17, Spring Boot 3를 사용하고 있다. 기존에 Spring Boot 2에서는 발생하지 않던 에러가 발생해 기록해둔다. 에러 발생 JPA에서 네이티브 SQL 구현 중이었는데 (query, Attendance.class) 부분에 빨간 밑줄이 생기며 에러가 발생했다. public List findAttendance(Long idx){ String queryStr = "SELECT ~~~ "; queryStr += "FROM ~~~ "; queryStr += "WHERE AI.IDX = :idx "; queryStr += "GROUP BY DATE(BEGIN_DT)"; JpaResultMapper resultMapper = new JpaResultMapper(); Quer..
문제 발생 application 실행 직후 "Process finished with exit code 0" 이런 메세지가 뜨며 다른 에러 메세지는 없이 그대로 종료되어버렸다. 이 메세지에 대해 찾아보니 대부분 '프로그램이 정상적으로 실행되었고 성공적으로 종료되었음을 나타낸다'고 한다. 이 사이트는 파이썬을 사용했긴 하지만 해당 메세지에 대해서는 동일하게 설명하고 있다. 근데 나는 프로그램 종료가 되면 안되는 상황인데? 대체 왜..? 원인 파악 이 문제는 내장 톰캣과 관련된 것이라고 한다. 앞서 말했듯 실행은 정상적으로 되었지만 application이 내장 톰캣에 올라가지 못한 것이다. 해결 생각보다 해결 방법은 간단했다. Spring Boot는 웹 애플리케이션을 실행하기 위해 내장 톰캣을 기본적으로 제공..
개발 중 PessimisticLockException 이라는 에러를 만났다. 사실..아직 이 에러를 해결하려면 코드는 둘째치고 로직 자체를 다 다시 살펴보고 다시 짜야할 것 같아 아직..에러를 해결하지는 못했다..^^... 일단 아래는 내가 마주한 PessimisticLockException 에러다. 이 문제는..일단 차분히 해결해보도록 하고. 문득 PessimisticLockException 에러를 보면서 갑자기 '데드락(DeadLock)과는 다른 문제지?' 라는 생각이 떠올랐고 이 참에 정리해보고자 한다. 결론부터 말하자면, org.hibernate.PessimisticLockException와 데드락(Deadlock)은 다른 문제다. PessimisticLockException Pessimistic..
두 번 정도 봤던 에러인데 처음에 에러 원인을 파악해놓고도 두번째 발생했을 때 기억 못하고 또 구글링을 해서 남겨놓는다,, Intelli J에서 Spring Boot를 실행했을 당시에는 아무 문제가 없는데 크롬에서 localhost에 접속했을 때 발생한 에러다. INFO 17151 --- [nio-9090-exec-8] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: Invalid character f..
오늘은 약 한 달 전쯤 만났던 NoUniqueBeanDefinitionException 해결방법에 대해 드디어 정리해본다. 하나의 interface를 implement하는 class가 2개가 있었고 각각의 class에서 구현부 작성한 뒤 실행시키자 아래와 같은 에러가 발생했다. Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'companyService' defined in file [C:\projects\....\CompanyServic..
개인 프로젝트에서는 쓴 적이 없던, 회사에서 처음 본 속성이다. 그것은 바로 @Transactional의 noRollbackFor 속성. 간단히 말하면 이름 그대로 롤백이 일어나지 않도록 하는 속성이다. 대부분의 비즈니스 로직이 실행되는 Service 단에서 각 메서드마다 @Transactional 어노테이션을 붙여 메서드 내부의 작업들이 하나의 트랜잭션으로 묶여 처리되도록 한다. 물론, Service 단이 아닌 Controller 단에서도 불가피하게 호출하는 Service 단의 메서드가 많다면.. 해당 어노테이션을 사용해 하나의 트랜잭션으로 묶을 수 있다. 이 때, 호출된 해당 트랜잭션이 수행되던 중 어떠한 이유로 에러가 발생한다면 묶여있는 모든 트랜잭션이 rollback 처리가 된다. 하지만! 특정한..
토발자
'Spring & Spring Boot' 카테고리의 글 목록