java
-
JPA/Querydsl N+1 문제(fetchJoin, EntityGraph)java 2025. 9. 30. 22:00
JPA를 사용하다보면 N+1 문제가 발생하는데 즉 , 추가적인 쿼리를 계속 보내는 현상이다주된 원인은 지연로딩(Lazy Loading) + 반복문@ManyToOne, @OneToMany 같은 연관 관계가 지연 로딩일 경우루프 돌면서 연관 엔티니를 접근하면 그때마다 SQL 쿼리 발생 -> N+1 문제 2. 잘못된 fetch 전략EAGER을 무분별하게 쓰면 원치 않는 조인 발생 3. 비효율적인 where 조건/ joinQuerydsl에서 Join, fetchjoin 설정을 안해주면 필요 이상으로 select 발생 이러한 다수의 쿼리를 보내는 것을 방지하기위해 한번에 가져와야하는데 JPA에서는 @EntityGraphQueryDsl에서는 .fetchJoin 을 하면 된다. 예제 ) 1. JPA - EntityG..
-
JAVA - Optional, Null 과의 차이java 2025. 9. 30. 21:48
Optional은 null을 대체하기 위해 나온 개념이지만 둘의 성격은 다르다. ✅ Null개념 : 참조타입이 가리키는 값이 없음을 의미 (즉, 메모리 주소를 안가리킴)문제점 : NullPointerException(NPE) 발생위험String name = null;int length = name.length(); // NPE 발생 ✅ Optional개념 : null을 직접 쓰지 않고, 값이 있을/없을 수도 있음을 객체로 표현하는 Wrapper 클래스장점 : 1. 값이 없음을 명시적으로 표현 -> 가독성 좋음2. 값 존재여부를 isPresent(), ifPresent() 로 쉽게 확인가능3. map(), filter(), orElse() 등 함수형 스타일로 처리 가능 -> NPE 줄어듦Optional n..
-
운영체제 문자열 NFC NFD 차이점java 2025. 9. 25. 23:15
mac에서 프로젝트 개발 진행중 한글파일명으로 contains 하여 분기 처리하는 도중 밑에로직에서의 else문으로 처리가 되는 현상이 있었다. 예시코드@Testpublic void String check() { String test = "테스트 파일.xlsx"; if(test.contains("테스트")){ System.out.pringln(여기에 나와야합니다.); }else { System.out.pringln(여기로 나오면 안됩니다.); }} 일반 윈도우 운영체제에서는 이 코드가 정상적으로 실행이 되었겠지만 mac에서는 unicode정규화 방식이 윈도우와 달라서 else문으로 처리된다.결론적으로 각 운영체제에서 사용하고 있는 unicode 정규화 방식은Windo..
-
Content-Type 'application/octet-stream' is not support' 문제java 2025. 9. 16. 21:46
매달 데이터 요청하는 데이터가 있어서 자동화를 하려고 Postman으로 api 테스트하다가 나온 문제이다. 1) DTO, MultipartFile 동시 요청시에 Content-Type 'application/octet-stream' is not support 오류가 떴다 엑셀파일과 그외 Request DTO를 같이 파라미터로 받은후 요청 중 문제 @Operation(summary = "데이터추출 자동화시스템 기능")@PostMapping("/upload")BaseResponse exampleUploadController(@RequestPart MultipartFile file, @RequestPart RequestDto request) throws Exception { exampleService.uplo..
-
TDD(Test Driven Development) 란?java 2025. 9. 1. 21:12
TDD란? Test Driven Development약자로 '테스트 주도 개발'이라고 한다. TDD 개발주기RED - GREEN - BLUERED - 실패하는 테스트 코드 먼저 작성GREEN - 테스트코드를 성공시키기 위한 실제코드 작성BLUE - 중복코드제거, 일반화 등의 리팩토링 수행★ 실패하는 테스트 코드를 작성할때 까지 실제 코드를 작성하지 않는것, 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성 일반 개발 방식과 TDD 개발 방식 차이점 1. 일반적인 개발 디자인 -> 코드개발 -> 테스트요구사항 분석 -> 설계 -> 개발 -> 테스트 -> 배포개발을 느리게 하는 잠재적 위험1. 요구사항 명확하지 않을수있음2. 처음부터 완벽한 설계는 어렵다3. 버그검출능력 저하 or 소스코드의 품질 저..
-
java 처음 셋팅 방법 (for mac)java 2025. 8. 17. 15:00
-- home brew가 깔려있다는 전제하에 설명brew install cask(M1,M2~~ version)brew install --cask zulu8brew install openjdk@11brew install openjdk@17[Jenv java version 관리]brew install jenv1 . 이미 아래에 추가되었을수도 있음~/.zshrc (또는 ~/.bash_profile)에 추가:export PATH="$HOME/.jenv/bin:$PATH"eval "$(jenv init -)"[적용]source ~/.zshrc[jenv 등록]jenv add /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Homejenv add /Library/Jav..
-
Java - ssl 인증서 메일 관련 local에서 오류날경우java 2025. 8. 8. 15:07
local 이메일 인증서 안될경우 https://slproweb.com/products/Win32OpenSSL.html제일 최신버전 msi 로 설치 환경 변수 Path - 편집 - 새로만들기 - OpenSSl설치주소 셋팅(https://slproweb.com/products/Win32OpenSSL.html)openssl s_client -connect smtp.office365.com:587 -showcerts begin end 포함하여 저장 smtp.crt 저장하기 이건 지우는거 keytool -delete -alias smtp-cert -keystore "%JAVA_HOME%\lib\security\cacerts" -storepass changeit Warning: use -cacerts option..