쇼핑몰 사이트 같은 경우 하나의 상품에 여러 개의 사진이 들어간다. 10개 이상 사진 업로드를 할 경우 서버에서 처리하는 시간이 대략 2초 이상 걸리다 보니 성능 개선이 필요성을 느꼈다. 처리속도를 개선하기 위해 비동기 방식의 멀티스레드를 이용해서 처리하면 싱글 스레드보다 멀티 스레드가 훨씬 빠른 장점이 있기 때문에 Spring에서 제공해주는 ThreadPoolTaskExecutor 이용해서 처리하였다.실제로 파일 15개 싱글 스레드로 구현할 경우 대략 2초 걸린 것을 확인할 수 있다. 1. ThreadPoolTaskExecutor 개념과 설정[ ThreadPoolTaskExecutor 란? ]ThreadPoolTaskExecutor는 Spring에서 제공하는 멀티 스레드 작업을 관리하는 유용한 도구입..
들어가며http 보안에 취약하다. 예를 들어 중간에 로그인하는 과정에 아디, 비번 탈취당하거나 해커를 확인하지 않고 통신할 수 있기 때문에 위장이 가능하여 큰 문제점을 야기한다. 이러한 문제점을 해결하기 위해서 무료로 제공하는 Letsencrypt과 https 연결시켜주는 nginx 사용하였다. 1. HTTP vs HTTPS 차이기본적인 사항은 HTTP와 거의 동일하지만, HTTP 메세지에 포함되는 콘텐츠 정보에 암호화가 추가되는 것이 가장 큰 차이점이다. https 공개키와 비밀키로 구성되어 있다. 브라우저에는 불특정 다수가 들어올 수 있기 때문에 공개 키가 주어지고 서버에는 비밀키가 담겨있다. 해커는 공개 키의 암호화된 비밀키를 알아낼 수 없기 때문에 안전하다. 2. NGINXNginx는 웹서버이..
들어가며채용 공고를 보면 JUnit (Test) 자격 요건에 들어간다. 테스트는 크게 TDD와 단위 테스트가 있으며 나는 이번 쇼핑몰 프로젝트에 단위 테스트를 넣어보았다. 단위 테스트를 하려면 mock 객체가 필요하다. mock 객체가 왜 필요한지, 단위 테스트 왜 쓰는지 알아보았다. 1. Unit Test코드를 작성하면 여러가지 단위 즉, 많은 메서드를 작성하게 된다. 이 많은 메서드가 정확히 돌아가는지, 예외는 제대로 터지는지, 코드를 수정하면 정상적으로 작동하는지 확인해야 한다. 이걸 일일이 웹 사이트에서 확인하면 시간과 비용이 많이 들어간다. 이때 단위 테스트를 하게 되면 개발한 코드들에 대해 수시로 빠르게 검증을 받을 수 있으며, 기능을 수정하거나 리팩토링을 할 때에도 검증을 받으므로 안정성을 ..
들어가며파일 업로드의 이미지를 로컬에서 저장하지 않고 Aws S3에 이미지를 저장하기 위해서 accessKey, secretKey 발급받았다. 하지만 나의 실수로 인해 accessKey가 노출되어서 무작위 인스턴스과 요금이 발생하였다. 현재 나는 2개의 서버를 돌리고 있고 프리티어로 사용하여 천 원대의 요금을 내고 있다. 주위에 해커들이 있다는 것을 인지하기 위해서 글을 남기기로 마음먹었다. 1. Aws S3 클라이언트에서 여러 개의 파일을 서버로 보내고 MultipartFile 타입으로 받아서 고유 식별자 이름으로 S3 스토리지에 저장한다. S3 스토리지를 연결하기 위해서 accessKey, secretKey, region 필요하다. 이 정보들은 application.yml 파일 안에 설정 값들을 저장..
2022.04 ~ 2022.05 진행 - 김영한 님의 인프런 스프링 핵심 원리 강의 정리 - 스프링의 본질과 객체 지향의 필요성을 느끼게 되는 강의였다.1일차 - 스프링과 객체지향설계 시작스프링 핵심- 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크- 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크스프링 vs 스프링부트 차이- 스프링은 톰캣 설정해야 하는 번거로움이 있지만 스프링 부트는 톰캣이 웹 서버에 저장- 라이브러리 버전 자동 설정- 메트릭, 상태확인, 외부 구성 같은 프로덕션 준비 기능 제공- 세팅하는 시간이 감소SOLID - 클린 코드로 좋은 객채 지향 설계의 5가지 원칙1. SRP : 단일 책임 원칙- 한 클래스는 하나의 책임만 가진다. - ex) UI 변경,..
들어가며새로운 프로젝트를 하면 첫 번째 기능이 JWT Token 활용해서 만드는 로그인, 로그아웃 페이지이다. 항상 할 때마다 흐름과 각 클래스마다 역할을 까먹어서 중간중간 구글링 하는 것보다 정리하는 게 낫다고 생각이 들어서 정리하기로 마음 먹었다. 일단 스프링 부트에서 제공하는 Security와 Jwt 토큰에 대해 알아보자 1. Security 역할웹 사이트에서 관리자 페이지와 사용자 페이지가 필수이다. 그로 인해서 특정 페이지를 조회와 데이터 요청을 권한에 따라 주거나 막아야 한다. 해커가 관리자 페이지에 들어가서 정보를 약탈하거나 게시글을 삭제하면 아주 큰 문제가 발생한다. SpringBoot Security는 이러한 부분을 제어할 수 있도록 도와주는 역할을 한다. 2. JWT 구조구조는 3개..