Redis란 ✔️ 메모리 기반의 데이터 저장소로, 높은 성능을 제공하는 NoSQL 데이터베이스입니다. Key, Value 구조의 비정형 데이터를 저장하고 관리할 수 있습니다. 규모가 작은, 사용자가 많지 않은 서비스의 경우에는 WEB - WAS - DB의 구조로 모든 정보를 데이터베이스에 저장합니다. 하지만 사용자가 늘어나 조회의 빈도가 늘어난다면, 데이터베이스가 과부하될 수 있고, 또한 성능 저하가 일어날 수 있습니다. 그래서 이를 개선하고자, 캐시 서버를 도입하여 데이터베이스 서버의 과부하를 줄여주는데 이때 사용할 수 있는 캐시 서버 중 하나가 Redis입니다. 캐시란 ✔️ 캐시는 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간입니다. 같은..
Optional 클래스란 ✔️ Java에서 Optional 클래스는 값이 있을 수도 있고 없을 수도 있는 상황을 다루기 위해 사용하는 컨테이너 클래스입니다. 이를 통해 값이 없음을 명시적으로 나타낼 수 있습니다. Optional을 사용하는 가장 큰 이유는 NullPoitnerException을 방지할 수 있습니다. Optional.ofNullable 메서드란 ✔️ ofNullable 메서드는 주어진 값이 null 인지 아닌지를 확인합니다. 값이 null이 아니면 해당 값을 가지는 Optional 객체를 반환하며, 갑이 null이면 빈 Optional 객체를 반환합니다. public class NullableExample { public static void main(String[] args) { Stri..
Stream이란 ✔️Java에서의 Stream은 데이터 컬렉션을 다루는 데 사용되는 사용 합니다. 컬렉션을 for, for-each 형태보다 더 가독성 좋게 함수형 스타일로 다룰 수 있게 도와주며, 데이터를 원하는 형식으로 변환하거나 조작하는데 효율적입니다. Filter 연산자 ✔️'filter()' 연산자는 이름 그대로 컬렉션을 돌면서 주어진 조건에 따라 스트림 요소를 필터링해주는 역할입니다. List words = Arrays.asList("apple", "banana", "cherry", "date"); List filteredWords = words.stream() .filter(word -> word.startsWith("b")) .collect(Collectors.toList()); // 결과..
유튜브 메타코딩님의 강의를 듣고 중요한 내용을 기록하고자 합니다. (좋은 강의 감사합니다. 메타코딩님) 로컬 컴퓨터에서 개발한 서버 프로그램을 배포 환경에서 실행시키는 과정에 대해 기록하고자 합니다. 해당 방법은 CI/CD를 적용하지 않는 방법으로 다른 컴퓨터에 서버 프로그램을 돌리는 방법입니다. Spring boot를 기준으로 작성합니다. AWS 배포 과정 이해하기 1. JDK Install하기 java 파일을 실행시키기 위해서는 JDK를 설치해 주어야 합니다. # apt 목록 업데이트 sudo apt update # JDK 검색 sudo apt-cache search jdk | grep openjdk-17 # JDK 설치 sudo apt install openjdk-17-jdk 2. Github에 저..
유튜브 메타코딩님의 강의를 듣고 중요한 내용을 기록하고자 합니다. (좋은 강의 감사합니다. 메타코딩님) https://youtu.be/7wAudkkCedk?si=mMoPSGeW0Rr6LYja AWS를 통해 리눅스 컴퓨터를 다루기 위해 필요한 리눅스 기본 명령어를 정리하고자 합니다. 1탄 : clear, pwd, cd, ls 알아보기 # shell 비우기 clear # 현재 위치 출력 pwd # 경로 변경하기 cd # 현재 위치의 모든 파일과 폴더 출력 ls ls 명령어에 옵션으로 -l 을 추가하면 현재 위치의 파일과 폴더의 자세한 내용을 볼 수 있습니다. -rw-r--r-- : 첫 위치에 "-"는 파일임을 알림 drw-r--r-- : 첫 위치에 "d"는 폴더임을 알림 "명령어" --help 를 입력하면 ..
유튜브 메타코딩님의 강의를 듣고 중요한 내용을 기록하고자 합니다. (좋은 강의 감사합니다. 메타코딩님) https://youtu.be/bi02s9Rs1Zw?si=XJsbYt79DQitZv6l nohup 명령어란 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작할 수 있게 해 줍니다. nohup 명령어로 프로세르를 실행시키면, 자동적으로 로그를 남겨줍니다. (같은 파일 위치에 nohup.out에 기록됨) 만약에 로그를 다른 파일에 기록하고 싶다면 리다이렉션을 이용하여 로그 기록 위치를 변경할 수 있습니다. # nohup install sudo apt update sudo apt install nohup # nohup 명령어 사용 nohup java -jar *.jar > myl..
스프링을 이용해 파일 업로드하는 방법에 대해 정리하고자 합니다. 스프링 코드와 html 코드를 작성하면서 설명하겠습니다. Spring Code - 파일 업로드 처리 @Value("${file.path}") private String fileRealPath; public void imageUpload(ImageRequestDTO.ImageUploadDTO request, Long userId) throws IOException{ UUID uuid = UUID.randomUUID(); MultipartFile file = request.getFile(); String uuidFilename = uuid + "_" + file.getOriginalFilename(); Path filePath = Paths.g..
Thymeleaf를 통해 컨트롤러와 데이터를 주고받고 처리하는 과정을 공부하면서 th:action, th:src, thymeleaf 문법을 통해 객체 그래프 탐색 방법에 대해 정리하고자 합니다. html 문서를 작성하면서 동적 프로그래밍이 필요할 때가 있습니다. 이럴 때 타임리프 문법을 통해 쉽게 해결할 수 있습니다. form form 태그를 통해 컨트롤러에게 데이터 셋을 전달하여 데이터 처리를 요청할 수 있습니다. th:action ✔️ form data를 보낼 url를 설정합니다. ✔️ 서버 Controller에게 데이터 처리 요청을 합니다. @{URL 링크} ✔️ @{URL 링크} : 타임리프는 URL 링크를 @{...} 에 담아서 전달합니다. ex1) th:href = "@{/css/style/...