Programming/Web 36

(spring boot) RedisRepository 사용하는 방법, @RedisHash

Spring Data Redis, RedisRepository 사용하는 방법 spring boot에서 인메모리 데이터 저장소인 redis를 사용하기 위해서는 org.springframework.data.redis.core 패키지에 있는 'RedisTemplate 클래스를 사용하는 방법'과 CrudRepository를 상속받는 'RedisRepository를 사용하는 방법'이 있는데요. 해당 포스팅에서는 두 번째 방법인 CrudRepository를 상속받은 인터페이스를 이용해서 Redis를 사용하는 방법에 대해서 살펴보겠습니다. (예시에 사용된 spring boot 버전은 2.6.4 버전을 사용했으며 Jedis, Lettuce 오픈소스 라이브러리 중 spring boot 2.0부터 기본적으로 탑재된 Let..

Programming/Web 2023.03.07

REST API Response Format, 응답 객체는 어떤 형식이 좋을까?

rest api response format and example 1. REST API 응답 형식에 대한 의문 지금까지 백엔드로 RESTful API를 여러 번 작업하면서 의문을 느낀 점은 각각의 프로젝트마다 'api 요청에 대한 response 형식이 다르다'는 것입니다. 이유는 RESTful API 응답 형식에 대한 표준이 없기 때문인데요. 표준은 없더라도 많이 사용되거나 선호되는 형식이 있을 것 같았으며, 해당 형식을 사용하는 합당한 이유들이 존재할 것 같아서 그에 대한 내용을 찾아보았습니다. (rest api response 형식에 대해서는 stackoverflow 등의 커뮤니티에서도 활발한 토론이 이뤄지고 있습니다.) 추가로 내용을 찾아보면서 개인적으로 적합하다고 생각되는 응답 형식의 예시와 해..

Programming/Web 2023.02.25

gcp vm 인스턴스 swap 스왑 메모리 적용하는 방법

GCP VM 인스턴스 스왑 메모리(swap) 적용하는 방법 스왑 메모리(swap memory)란? 시스템에서 메모리(RAM)가 부족할 경우 프로세스는 더 이상 작업을 이어가지 못하고 종료되는데요. 스왑 메모리는 시스템에 메모리가 부족한 상황에서 하드 디스크의 일부 공간을 활용하여 작업이 계속되도록 도와주는 영역으로, '하드 디스크의 일부를 RAM처럼 사용할 수 있게 만드는 방법'입니다. RAM처럼 사용할 수 있게 만들었다지만 하드 디스크 상에 위치하기 때문에 RAM에 접근하는 것보다 접근 속도가 느리며, 따라서 데이터를 처리하는 속도도 느린데요. 속도는 느리지만 메모리가 부족하여 시스템이 다운되거나 장애를 발생시키는 것 보다는 스왑 메모리를 활용하는 것이 안전성 측면에서 뛰어나다는 장점이 있습니다. 대부..

Programming/Web 2023.02.22

(html) a href 새 창 열기 및 크기 지정

a href 새 창 열기 및 크기 지정하는 방법 a tag 새 창 열기 태그는 하나의 페이지에서 다른 페이지로 연결하는 하이퍼링크(hyperlink)를 걸기 위한 용도로 사용되는데요. 태그에서 가장 핵심이 되는 속성은 링크의 목적지를 가리키는 href 속성으로 의 형식으로 주로 사용됩니다. a href 새 창 열기 새 창 열기 a href에서 새 창을 열기 위해서는 a 태그의 target 속성을 사용해야 하는데요. target 속성은 링크된 문서를 클릭했을 때 문서가 열릴 위치를 명시하는 용도로 사용됩니다. target 속성에 설정할 수 있는 값으로는 '_sefl', '_blank', '_parent', '_top'이 있으며, 링크를 새 창으로 열기 위해서는 '_blank'로 값을 지정해야 하는데요. '..

Programming/Web 2023.02.21

Nginx 이미지 서버 구축 방법(sites-available, sites-enabled)

Nginx 이미지 서버 구축 방법(sites-available, sites-enabled) 먼저 nginx에 대해 간단하게 살펴보면, nginx는 적은 자원으로 높은 성능을 내며, 특히 많은 트래픽이 있을 때, 동시 접속 처리에 특화된 웹 서버 프로그램인데요. Apache 웹 서버가 주로 사용되던 시기에 늘어나는 트래픽으로 인해 'C10K' 문제가 발생하였고, 이를 해결하기 위해 개발되어 2004년 릴리즈 되었습니다. * C10K: 하나의 웹 서버에 1만 개가 넘는 클라이언트의 동시 접속을 처리하지 못하는 문제 비동기, 이벤트 기반의 구조로 설계된 nginx는 다양한 용도로 사용될 수 있는데요. 주로 이미지 또는 HTML 등의 정적 콘텐츠를 제공하기 위한 웹 서버(HTTP Web Server)로 활용되거..

Programming/Web 2023.02.19

Base64와 Base64UrlSafe 차이점 (Illegal base64 character 발생 이유)

Base64 encoding, decoding 기능을 사용하던 중 java.lang.IllegalArgumentException: Illegal base64 character 2b 예외가 발생했는데요. 해당 Exception은 Base64와 Base64 UrlSafe의 차이점을 제대로 알지 못하고 사용하였기 때문에 발생한 것이었으며, 해당 문제를 해결하면서 관련 내용을 함께 정리하였습니다. * 결론을 먼저 말하자면 Base64 UrlSafe로 디코딩할 수 없는 문자를 디코딩하려고 했기 때문에 발생한 오류였습니다. Base64란? 8비트의 이진 데이터(Binary Data)를 문자 코드에 영향을 받지 않는 공통 ASCII 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 말합니다. Base64는 6..

Programming/Web 2022.12.17

빅 엔디언과 리틀 엔디언(Big Endian & Little Endian)

빅 엔디언과 리틀 엔디언이라는 생소한 개념을 접하며 정리한 내용입니다. 엔디언에 대해서 살펴보기 전에 비트와 바이트에 대한 내용부터 시작하여 살펴보도록 하겠습니다. 1. 비트와 바이트(데이터가 저장되는 방식) 눈에 보이지는 않지만 내부적으로 컴퓨터가 동작하는 원리는 비트(bit)라고 하는 '0'과 '1'로 표현되는 단위부터 시작됩니다. 비트는 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위로, 하나의 비트만으로는 많은 양의 데이터를 나타내기 부족하기 때문에 8개의 비트(bit)를 묶은 바이트(byte)라는 단위가 메모리에 저장되는 최소 단위로 정해졌습니다. (메모리 1칸은 1byte로 구성되어 있지만 실제 저장되는 데이터는 대부분 4byte 또는 8byte 크기로 구성됩니다.) 하나의 바이트..

Programming/Web 2022.11.05

FTP Active Passive Mode 정리

FTP란? FTP는 파일을 전송하는 통신 규약인 File Transfer Protocol의 약자인데요. FTP 서버에 파일을 업로드, 다운로드할 수 있도록 해주는 프로토콜이며, 이는 FTP 서버와 FTP 클라이언트 간의 통신에 사용됩니다. FTP 파일 전송에는 두 개의 port가 사용되는데요. 하나는 사용자 인증 및 명령어 입력을 위한 제어 채널(Command Port)이고 다른 하나는 실제 파일 전송을 위한 데이터 채널(Data Port)입니다. 연결 방식에는 Active 모드와 Passive 모드, 두 가지 방식이 있습니다. 기본적인 동작 방식은 Active Mode이며, Active 모드의 단점을 해결하기 위해 나온 것이 바로 Passive 모드인데요. 아래 이어지는 내용을 통해서 각 연결 방식의 ..

Programming/Web 2022.10.22

루프백 ip란? (127.0.0.1 / localhost)

루프백(Loopback) ip란? 루프백 ip, 루프백 주소는 네트워크상에서 자신을 나타내는 가상적인 주소이며, 자신에게 다시 네트워크 입력이 들어온다고 하여 루프백(Loopback) 주소라고 합니다. IPv4에서의 루프백 주소는 127.0.0.1이며, IPv6에서는 ::1 (0:0:0:0:0:0:0:1의 약자)로 사용됩니다. /* IPv4의 경우 Loopback ip는 127.0.0.0부터 127.255.255.255까지의 범위가 할당되지만, 일부 운영체제가 정확히 127.0.0.1을 사용하기 때문에 대부분 해당 주소를 사용하며, IPv6의 경우 ::1 단 하나의 주소만 사용합니다. */ 127.0.0.1 대신 localhost를 사용하는 경우도 있는데요. 로컬 호스트(localhost)는 컴퓨터 네트..

Programming/Web 2022.09.19

BCrypt 동작원리 파헤치기(BCryptPasswordEncoder)

BCrypt 암호화를 사용하면서 내부적으로 랜덤 한 salt가 생기고, 그에 따른 결과 해시 값이 매번 바뀌는 것을 확인하며 동작 원리가 궁금해서 찾아본 내용입니다. BCrypt 암호화는 무엇인지? 동작원리는 무엇인지? Java 코드를 통해 살펴보겠습니다. BCrypt란? BCrypt는 블로피시(Blowfish) 암호에 기반을 둔 암호화 해시 함수로 현재까지 사용 중인 가장 강력한 해시 메커니즘 중 하나이며, 1999년 USENIX에서 발표되었습니다. BCrypt는 패스워드를 해싱할 때 내부적으로 랜덤 한 salt를 생성하기 때문에 같은 문자열에 대해서 매번 다른 해싱 결과를 반환하는데요. (하지만 해싱 결과로 반환되는 String의 길이는 매번 60으로 동일합니다.) 이처럼 salt가 통합된 형식으로 ..

Programming/Web 2022.09.04