본문 바로가기
반응형

트슈12

[TIL] [troubleshooting] findAll을 지양해야 하는 이유 오늘도 나란 똥멍청이가 코드를 이상하게 짜서 배포한 프로젝트에서 조회가 엄청 느려진 이슈가 있었다. 정말 간단한 문제였는데 코드를 먼저 본 것도 아니고, 캐시나 fetchJoin을 먼저 찾고 있었다는게 문제를 해결하고 나서 너무 한심했다.. 결과만 먼저 말하자면 딱 한줄 바꿨는데 속도적인 면에서 약 26배 정도가 개선되었다. 그럼 기존에는 빨랐냐?기존에는 속도가 문제가 발생하기 전보다 좋았었다. 그러나 기능적으로 불필요한 부분을 쳐내면서 코드를 일부 수정했는데 이 때 기존에 사용하던 코드를 잘못 삭제했는데 확인을 못한 것이었다. 해당 게시물에 대한 상세조회를 하는 것이었는데 위에서 해당 articleId에 따른 게시물을 찾아놓고 게시물에 연관관계를 맺은 댓글들을 찾는 것이 아닌 모든 댓글을 조회하다보니 .. 2022. 10. 6.
[TIL] [troubleshooting] Permission denied,리눅스에서의 권한 허가 거부 Springboot에서 이미지를 업로드 과정에서 생긴 문제이다. 이미지를 리사이징 하는 과정에서 파일을 새롭게 만드는 코드가 있었는데,계속 그 부분에서 에러가 팡팡터졌다. 이상하게 로컬에서는 잘되다가 서버만 연결하면 에러가 발생했다. 이미지를 포함한 게시글을 올릴 때 지속해서 에러가 발생했다. java.io.IOException : Permission denied를 검색해보니 IOException은 input/output시에 생기는 에러였고, Permission denied는 리눅스에서의 허가 거부였다. Springboot에서 이미지파일을 리사이징할 때 리눅스 서버에 새로운 파일을 만드는 로직을 넣었었는데, 거기서 에러가 같이 터졌다. resizedImage.setExecutable(true, false.. 2022. 10. 5.
[TIL] [troubleshooting] 엔진엑스 연결 후 왜 1MB이상의 파일이 안올라갈까? 프로젝트 진행 중 서버를 도메인에 연결 후 프론트와 연동을 했다. 엔진엑스와 연결하기 전까지만해도 잘올라가던 파일이 엔진엑스와 연동 후에 프론트에서 1MB이상의 파일을 올리지 못하게 됐다. 기존에는 에러가 나는 부분이 Multipartfile의 리스트에서 null값을 체크하는 부분에서 계속 에러가 나다보니 Spring에서 용량 최대허용량을 100MB로 해둬서 프론트쪽 오류인 줄만 알고 인지하고 있었다. 그러나 무엇이 S3와 엔진엑스와 관련이 있을까 하던 도중.. 엔진엑스에서 서버공격을 방지하기 위해 기본 전송 용량 설정이 1MB로 되어 있음을 확인할 수 있었다. Nginx는 큰 용량의 파일을 대량으로 업로드하는 서버의 공격을 막고자 기본값이 1MB로 되어 있다. 따라서 하나의 파일이 1MB가 넘건 여러 .. 2022. 10. 3.
[TIL] [troubleshooting] java.net.SocketTimeoutException: connect timed out 에러 해결 API 요청의 처리가 오래 걸리게 되면, java.net.SocketTimeoutException 가 발생 Spring의 property 파일( application.yaml )의 timeout 시간을 늘려주면 된다 -1을 설정하면 timeout이 무한대가 되어 timeout이 발생하지 않는다 그렇지 않으면 ms 단위로 원하는 시간을 입력해주면 된다. ------------------------------------------------------ yaml 형식을 사용 중이면 server: tomcat: connection-timeout: -1 ------------------------------------------------------ properties형식을 사용 중이면 server.tomcat... 2022. 9. 27.
[TIL] [troubleshooting]@RequestPart(required = false) List로 값을 받을 때 생긴 오류이다. List자체의 널값을 체크할 수 없다고 구글링에서 찾았기에 List의 값을 널체크를 해주는 로직을 짰다. if문을 통해 checkNum이 1인 경우에는 이미지를 출력하는 로직을 구현했는데,이미지와 글을 같이 올릴때는 문제가 되지 않았다.그러나 글만 올렸을 때는 for(MultipartFile findFile : multipartFile) 부분에서 지속적인 에러가 나서,확인을 해보니 Controller부분에서 아래와 같이 required = false로 설정을 하면 값을 미기입시 null처리가 되는 것이었다. required = false와 같이 써주면 아래의 postMan예제처럼 multipartFile에 값을 입력하지 않는다면 Null이 출력되었다. 그래서 부분.. 2022. 9. 15.
[TIL]지역변수 구분의 중요성 List commentResponseDtoList = new ArrayList(); 새로운 리스트 선언 부분이 수정전에는 findArticle의 forEach문 밖에 있어서 for문이 돌때마다 리스트가 초기화되지않고 값이 쌓이다보니 모든 댓글이 모든 게시글에 붙어 나오고 있었다.사소한 문제였지만 내 눈에는 보이지 않던 부분이 다른 팀원에게는 로직을 보자마자 보였다고 한다. 여러 인원이 같이하는 프로젝트인만큼 본인이 짠 로직이라도 다른 팀원에게 코드를 한번 봐달라고 하는것도 좋은 것 같다. 2022. 9. 11.
[TIL] MultipartFile null체크 디버깅의 중요성에 대해 알게된 것 같다. 어디부터 문제가 생기는데 로깅이나 디버깅을 통해 확인하는 것을 꼭꼭꼭꼭 스파게티 확인하도록 하자! 참고로 List multipartFile 이다. 이미지 파일을 올려도, 안올려도 된다는 상황이면 null체크를 해야 불필요하게 AwsS3에 업로드 되는 것을 막을 수 있다. 하지만 저렇게 코드를 짜니 이미지 파일을 선택안했을 때 쓰레기 값이 S3에 올라가는 것을 발견했다. 새로 알게된 사실은 MultipartFile은 null체크할 때 isEmpty()를 사용한다. List형식이기 때문에 반복문으로 List 내부의 이미지파일에 isEmpty()를 적용해야한다. 개선후 참고자료: https://intrepidgeeks.com/tutorial/java-multipartf.. 2022. 9. 8.
반응형