RESTful API 나는 RESTful API를 api를 개발하는 데에 있어서 "예상 가능한 개발을 위한, 개발자들 간의 약속"이라고 이해했다. 실제로 RESTful API는 기존의 SOAP이 프로토콜로써 개발자 간의 약속을 표준화시킨 것과 다르게, 기존에 존재하는 HTTP 프로토콜의 메서드를 기반으로 하는 "아키텍처"이다. API란? 📌 애플리케이션 프로그래밍 인터페이스(API)는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의 REST란? 📌 Representational State Transfer(REST): API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어짐 REST 기반 아키텍처를 사용하여 대규모..
JAVA의 static JAVA의 정적(Static)이란? 📌 [사전] 정적(Static) : 고정된 사전적 의미와는 다르게, 나는 JAVA의 Static을 "공유"의 개념으로 이해했음. JAVA에서는 Static이라는 키워드를 사용하여 정적 멤버인 Static변수(정적필드)와 Static메서드(정적메서드)를 만들 수 있음. 정적 필드와 정적 메소드 : 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됨 즉, 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있음 즉, 인스턴스의 생성과 상관 없이 사용할 수 있는 변수이며, 객체 생성 없이 클래스를 통해 메서드를 직접 호출할 수 있는 메서드임 Static 키워드를 통해 ..
TCP(Transmission Control Protocol) 통신이란? 📌 Transmission Control Protocol. 전송 제어 프로토콜(transport 계층). 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜. 데이터를 전송하기 위한 연결을 만드는, 연결 지향 프로토콜 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때의 중계 역할을 수행 패킷 사이의 순서를 보장 연결 지향의 프로토콜을 사용해서 연결 신뢰성 구축해서 수신 여부를 확인 3 way handshake란? 📌 TCP 연결 성립 과정을 의미 SYN → SYN+ACK → ACK TCP의 경우 해당 과정이 있기 때문에 신뢰성이 있는 계층으로 판단됨. SYN 세그먼트 전송: 클라이언트는 서버에 난수인 I..
💡 Private key의 Permission이 너무 공개되어있기 때문에 발생한 이슈 에러 코드 McBookPro ~ % ssh -i "[pem 키 위치/파일명].pem" [계정]@[aws 퍼블릭 IPv4 DNS 주소] @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '[pem 키 위치/파일명].pem' are too open. It is required that your private key files are NOT acces..
💡 RDS 포트를 보안 관련 이슈로 변경하였지만, yml에 변경된 포트를 반영해주지 않았기 때문에 발생한 이슈 에러 코드 2023-05-30 06:27:29.225 ERROR 58789 --- [nio-8021-exec-1] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received a..
💡 NAT 환경에서 공인 IP주소를 입력해주지 않았기 때문에 발생한 이슈. 에러 코드 DBMS: MySQL(버전 8.0.28) 대/소문자 구분: 일반=exact, 구분자 추가=exact 드라이버: MySQL Connector/J(버전 mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0), JDBC4.2) Operation timed out. 핵심 요점 와이파이 등 NAT을 이용할 시 공인 IP가 아닌 사설 IP를 AWS 보안그룹 인바운드 규칙에 추가할 시 계속해서 접근이 차단된다. 해결 방안 공인 IP를 인바운드 규칙에 추가한다 ipconfig가 아닌 네이버의 내 ip 찾기 이용 터미널에서 curl [ifconfi..
HTTP 멱등성 HTTP 멱등성이란? Idempotent Methods A request method is considered "idempotent" if the intended effect on the server of multiple identical requests with that method is the same as the effect for a single such request. Of the request methods defined by this specification, PUT, DELETE, and safe request methods are idempotent. Like the definition of safe, the idempotent property only applies to..
HTTP 메서드 HTTP 메서드란? 📌 클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식 서버에 주어진 리소스에 수행하길 원하는 행동, 서버가 수행해야 할 동작을 지정하는 요청을 보내는 방법 각각의 메서드는 서로 다른 의미를 구현하지만, 일부 기능은 메서드 집합 간에 서로 공유하기도 함 응답 메서드는 안전하거나, 캐시 가능하거나, 멱등성을 가질 수 있음 1. GET GET 메서드는 특정 리소스의 표시를 요청 GET을 사용하는 요청은 오직 데이터를 받기만 함. 참고로 안정성과 멱등성은 신뢰할 수 없는 네트워크 상의 HTTP를 신뢰할 수 있게 만들어 줌. 만약, GET요청을 하고 응답을 못 받았을 경우 한 번 더 보내더라도 이 동작은 안전. 그러므로 G..
package org.springframework.jdbc.datasource does not exist 💡 프로젝트 생성시 JDBC dependency를 implementation 하지 않았기 때문에 발생한 이슈 에러 코드 java : package org.springframework.jdbc.datasource does not exist 핵심 요점 JDBC dependency를 gradle.build에 추가해준다. 해결 방안 JDBC dependency를 gradle.build에 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-jdbc'
Gmail SMTP "AuthenticationFailedException: 535-5.7.8 Username and Password not accepted" 💡 Google에서 2022년 5월 이후 Google 계정에 대한 “보안 수준이 맞은 앱 엑세스”를 허용하지 않기 때문에 발생한 이슈 에러 코드 핵심 요점 메일 발송을 위한 g-mail계정의 보안탭에서 2단계 인증을 실행한 후, 앱 비밀번호를 생성하고 해당 비밀번호를 기존에 입력해두었던 비밀번호와 교체하면 해결됨 (https://support.google.com/a/answer/3726730?hl=ko) 해결 방안 //application.yml mail: host: smtp.gmail.com port: 587 username: [g-mail아이디..
method replaceAll in class String cannot be applied to given types; return my_string.replaceAll(letter); 💡 JAVA에서 String의 replace, replaceAll 함수의 경우, 매개변수로 ([String] 탐색할 요소, [String] 치환할 요소)를 주어줘야 하는데, 치환할 요소를 주지 않았기 때문에 발생한 이슈 에러 코드 /Solution.java:3: error: method replaceAll in class String cannot be applied to given types; return my_string.replaceAll(letter); ^ required: String,String found: S..
optionaldouble cannot be converted to double 💡 자바의 Stream 에서 optional 때문에 발생한 이슈 에러 코드 import java.util.Arrays; class Solution { public double solution(int[] numbers) { return Arrays.stream(numbers).average(); } } /Solution.java:10: error: incompatible types: OptionalDouble cannot be converted to double return Arrays.stream(numbers).average(); ^ 1 error 핵심 요점 stream연산에서 반환한 값이 null일 수 있는 optiona..