2022.05 ~ 2022.06 진행 - 김영한 님의 인프런 스프링 DB 강의 정리 - 커넥션 풀, 트랜잭션 원리, DB 접근 기술 등 기본적인 원리를 알게 되는 강의였다. - 프로젝트 코드 1일차 - JDBC 이해 JDBC 개념 - Java Database Connectivity 약자로, 자바에서 데이터베이스를 접속할 수 있는 API JDBC 나오기 전 문제점 - DB 변경하면 애플리케이션 서버에 개발된 DB 사용 코드도 함께 변경해야 한다. - 개발자가 DB마다 커넥션 풀, SQL 전달, 결과를 응답받는 방법을 새로 학습해야 한다. JDBC 한계 - JDBC 인테페이스를 통해 각 DB 벤더를 맞출 순 있지만 SQL 데이터 타입 등 일부 사용법이 다르다. - JPA를 사용하면 각각 DB마다 다른 SQL..
쇼핑몰 사이트 같은 경우 하나의 상품에 여러 개의 사진이 들어간다. 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 변경,..