본문 바로가기

분류 전체보기51

[Java] Long과 long의 차이 자바에서 데이터 타입을 배울 때, Long이라는 타입도 배우게 된다. 그런데 자바를 실제로 사용하다 보면, long이라는 타입도 있어서 어느 것을 사용해야 할 지 고민이 된다. 이런 비슷한 페어들이 있으니, 한 번에 정리해서 적절한 타입을 사용해 보자. 기본 데이터 타입 (primitive type)long은 기본 데이터 타입이다. 이는 다음과 같은 중요한 특성을 가진다.스택 메모리에 직접 저장되므로 메모리 사용이 효율적이다연산 속도가 빠르다null값을 가질 수 없다 -> null point exception을 발생시킬 수 있다ex) int, long, float, double, char, byte, short, boolean 객체 타입 (wrapper type)Long은 객체 타입이다. 이는 다음과 같.. 2024. 9. 15.
[Postman] 포스트맨 심화 사용법 Postman에서 기본적인 api 요청 생성 및 응답 확인을 하게 되면 직관적인 UI덕분에 금방 활용이 가능하다. 하지만 프로젝트 규모가 커져서 api가 많아지거나, 배포/개발/로컬 등의 환경이 분리되어 다양한 세팅에서 동일한 api를 사용하게 되는 경우, 포스트맨의 기타 기능들을 사용해야 생산성이 크게 올라간다. 이번에는 그런 사용법들을 소개하려고 한다. 환경변수 설정프론트와 백엔드, vscode나 intellij 등에서 개발을 할 때, 환경변수를 사용하면 동일한 값을 불러올 수 있어서 생산성이 높아지고 코드의 유지보수가 수월해진 것을 느낄 수 있다. 포스트맨에서도 환경변수를 사용하면 비슷한 편리함을 느낄 수 있다. 우선 환경변수를 만들기 위해 왼쪽의 environments 탭을 눌러보면 다음과 같은 .. 2024. 9. 9.
[AWS, Java, Spring] Presigned Url로 S3에 이미지 업로드하기 Presigned Url을 사용해야 하는 이유백엔드 서버를 구축할 때, 기초적인 이미지 업로드 구현을 서버가 S3 버킷에 직접 업로드하는 방식으로 하는 경우가 많다. 소규모 프로젝트에서 이 방식이 가장 간편하기 때문이다. 이 구조를 그림으로 표현하면 다음과 같다. 즉, 서버에서 이미지 파일을 직접 전송받고 s3에 전송해 줘야 하기에, 이 과정에서 서버 자원이 많이 소모된다. 하지만 aws s3에서 제공하는 presigned url을 사용한다면 서버에서 파일을 직접 처리하지 않게 되기에 서버의 부담이 많이 줄어드는 큰 장점이 있다. 또한, aws에서 presigned url을 통해 파일을 업로드하는 경우 처리 속도를 아주 빠르게 제공해 주고 있어서 기존 프로젝트보다 성능이 향상된다.  Presigned U.. 2024. 8. 22.
[AWS, Java] Cloudwatch 경보를 AWS sdk for Java로 만들기 Cloudwatch Alarm (경보)란?Cloudwatch에서 다양한 이벤트에 대한 지표, 로그, 경보 등을 만들 수 있다. 쉽게 말하자면, 내가 설정한 AWS에서 발생한 일에 대해 모니터링을 할 여러 수단들이 마련되어 있다는 뜻이다. 이 중 경보(alarm)은 내가 설정한 어떤 일이 발생했을 때, 이메일 송신과 같은 방법으로 알람을 받을 수 있게 설정하는 도구다. 위 사진처럼 AWS 콘솔 - cloudwatch 에서 경보 탭을 클릭하여, 경보를 쉽게 만들 수 있다. 그러나 콘솔에서 경보를 만드는 것 뿐만이 아니라, AWS sdk for Java를 이용하여 스프링 프로젝트에서도 경보를 다룰 수도 있다. 나는 회사의 프로젝트에서 자동으로 경보를 생성하는 알고리즘이 필요했기에 이 방법을 사용하게 되었는데,.. 2024. 7. 9.
[Java] ResponseEntity 를 return할 때, new를 언제 붙이는가? ResponseEntity란?ResponseEntity는 HttpEntity를 상속받고 있어, HttpEntity에다 HttpStatusCode를 추가한 클래스이다. HttpEntity는 HTTP 요청 또는 응답 entity인데, header와 body로 구성되어 있다. ResponseEntity class 문서에서 생성자는 다음과 같다.public ResponseEntity(@Nullable T body, @Nullable MultiValueMap headers, HttpStatusCode statusCode) { super(body, headers); Assert.notNull(statusCode, "HttpStatusCode must not be null"); this.status .. 2024. 5. 9.
[Java] 선형 검색 Linear Search 선형 검색선형 검색 (=순차 검색)은 배열에서 검색할 값을 처음부터 순서대로 하나하나씩 비교하여 찾는 방식이다. 예를 들어 배열 {1, 2, 3, 4, 5}에서 값 3을 선형 검색으로 찾는다면, 첫 값인 1과 3을 비교, 다음 값인 2와 3을 비교, 그리고 다음 3과 3을 비교해서 찾게 된다.  Java로 선형 검색 구현일반적으로 선형 검색을 할 경우, 다음 두 가지 결과가 발생한다.배열을 끝까지 탐색했음에도 불구하고 검색할 값을 찾지 못함 -> 검색 실패배열 탐색 중 검색할 값을 찾음 -> 검색 성공이를 메소드로 구현하면 다음과 같다.import java.util.Scanner;class SeqSearch { // 크기가 n인 자바 배열 a에서 key와 값이 같은 요소를 선형 검색하는 메소드 .. 2024. 5. 2.
프로그램 순서도 (Program Flowchart) 순서도란?순서도는 다이어그램으로 프로그램의 작업 절차(workflow) 흐름을 표현한 것이다. 이를 통해 어떤 알고리즘이나, 문제 해결을 위한 단계별 해법을 표현할 수 있다. 순서도에서 다음과 같은 기호들을 활용하여 연산과 제어 흐름 등을 표시한다. ANSI/ISO 기호이름설명데이터Data데이터의 입력 및 출력을 표현한다.처리Process연산의 실행을 표현한다.연산으로 데이터의 값, 자료형 또는 위치를 바꾸게 된다.미리 정의된 처리Predefined Process서브루틴 및 모듈 등 다른 곳에서 정의된 처리를 표현한다.판단Decision입구에 전달된 내용을 조건에 따라 판단하여, 여러 출구 중 어떤 것을 선택할 판단을 표현한다.판단의 결과는 경로를 나타낸 선 옆에 적는다.루프Loop루프의 시작과 종료를 .. 2024. 4. 30.
IPv4 FLSM 서브네팅 (Subnetting) 서브네팅서브네팅은 할당된 네트워크 주소를 다시 여러 네트워크로 나누어 사용하는 것이다. IPv4의 IP주소를 서브네팅하는 방식으로 FLSM, VLSM등이 있는데, FLSM방식의 서브네팅을 하는 방식을 알아보자.  예시) 192.168.1.0/24 을 3개의 subnet으로 나누기주소의 마지막 /24부분이 서브넷 마스크이므로 이에 주목해야 한다.본래 IPv4주소는 8bit씩 4개, 즉 32bit로 이루어진다. 각 8bit는 점(.)으로 분리해서 표기한다.24는 네트워크ID를 표기하도록 24bit를 사용하라는 의미이다. 그러므로 32 - 24 = 8, 남은 8bit로 호스트ID를 구성해 서브네팅을 한다.8bit를 우선 4등분하여 6bit씩 분배한다. 이는 2의 6승이므로, 10진법으로 64이다. 이를 주소의.. 2024. 4. 26.
[Java] Static, Heap, Stack 메모리 JVM이 프로그램을 효율적으로 가동하기 위해 메모리 공간을 Static, Stack 그리고 Heap으로 분리하여 관리한다. 각 공간은 서로 다른 특징을 가지고 있다. Static 영역 (메서드 영역)Static영역에 저장된 변수는 프로그램이 시작하자마자 한 번 생성이 되고, 프로그램이 종료돼야 없어진다.따로 생성을 하지 않아도 계속 사용 및 접근이 가능하다.정적 멤버 변수(static으로 선언된 class변수)가 저장된다.java.lang 패키지, import한 패키지 그리고 프로그램 상의 class들이 들어간다.메모리 할당 방식이 '정적'이기에 static영역이라고 한다. Heap 영역프로그램 실행 중 생성되는 모든 객체들을 저장하는 영역이다.객체 생성 시 메모리가 할당되고, 객체가 더 이상 사용되지 .. 2024. 4. 25.