Web 23

좋은 URI Design의 요소들

* /는 계층적 관계를 나타낸다. 슬래시(/) 는 리소스 간의 계층적 관계를 나타낸다. 예) http://localhost:8080/shapes/polygons/quadrilaterals/squares 따라서 계층적 관계를 나타내려는 / 가 아닌 이상, / 를 포함시키지 않는다. (URI의 마지막에 /를 포함하지 않는다.) * 가독성을 높이기 위해 하이픈(-)을 사용한다. 예) http://localhost:8080/blogs/scarlett-johansson/daily -> "-" 을 사용, 가독성이 더 좋음 예 ) http://localhost:8080/blogs/scarlettjohansson/daily -> "-"을 사용한 위의 URI 보다 가독성이 떨어짐 * 밑줄(_)을 사용하지 않는다. 응용 ..

Web 2022.03.24

Broken Pipe Error의 의미와 대처법

* Broken Pipe Error란? [java.net.SocketException : Broken pipe] 잦은 입출력 호출로 발생한다. 예) 처리 중인 요청(또는 응답)을 사용자가 기다리지 않고, 새로고침을 하거나 종료, 연속 클릭 등으로 제대로 연결이 마무리(또는 맺어지지 x) 되지 않았을 때 소켓이 끊어져서 발생하게 된다. [java.io.IOException: Broken pipe] receiver에서 송신 받은 데이터를 제때 처리하지 못하는 상황(네트워크 문제 / receiver의 cpu max와 같은 문제 등)에서 sender가 계속 보내는 경우에 발생한다. 두 소켓(receiver, sender) 상의 통신에서 한 소켓(대개 receiver)이 갑작스러운 이상으로 종료가 된 상황에서 ..

Web 2022.03.01

TLS10 is not accepted by client preferences [TLS12] 오류 해결

서버 코드를 깃허브에서 다운 받은 후 로컬에서 구동시키려고 하는데 TLS10 is not accepted by client preferences [TLS12] 라는 에러 메세지와 함께 구동이 안되었다. 나의 경우엔 아마 DB 연결에 TLS 관련된 뭐가 있는데 TLS10으로 DB에 못붙으면서 뱉는 에러 같았다. 해결 방법은 1. JDK가 설치된 폴더의 경로로 이동한다. 2. JDK 안의 JRE 폴더의 lib\security에서 java security 파일을 수정한다. 3. jdk.tls.disabledAlgorithms 을 검색해서 나오는 부분 중 TLS 1, TLS1.1을 지워주면 된다. jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5w..

Web 2022.01.08

OAuth 2.0

* OAuth 2.0 개요 OAuth는 인증 계층을 도입하여 클라이언트의 역할과 리소스 소유자의 역할을 분리한다. OAuth에서 클라이언트는 제어되는 리소스에 대한 액세스를 요청한다. 그럼 리소스 소유자가 요청의 검증을 직접 하는 것이 아닌, 클라이언트는 3rd party clients(OAuth)에게서 액세스 토큰(access token)을 발행받는다. 이 access token은 보호되고 있는 resource server로부터 보호되고 있는 리소스의 접근에 사용된다. OAuth에서 로그인 뿐만 아니라 데이터 접근 권한도 포함하고 있기 때문에, Auth는 Authentication(인증) 뿐만 아니라 Authorization(인가)도 포함하는 개념이다. Authentication vs Authoriza..

Web 2021.11.07

백엔드 서버 배포 후 재빌드할 때

1. ps -ef | grep java 명령어로 현재 돌고 있는 java 프로세스 확인 -> pid도 같이 나옴 pid 251012, 252672인 프로세스 2개 확인 -> 251012 프로세스를 kill 2. kill -9 251012 프로세스 죽이기 3. sudo rm -rf target target 폴더가 빌드된 ? 프로젝트가 들어있는 폴더인데 삭제 4. mvn package 메이븐을 사용하는 프로젝트의 경우, mvn package를 사용하여 재빌드, gradle은 또 다른 명령어가 있음 백엔드 배포 과정을 정리하자면, 1. 로컬에서 개발하다가 깃으로 커밋 & 푸쉬 2. 배포된 서버 환경에서 git pull origin 받으려는 branch 3. 프로젝트 재빌드 +) 빌드 이후에 502 게이트웨이 ..

Web 2021.08.17

Spring Boot : jar, war 파일의 특성

* JAR (Java Archive) class와 같은 java 리소스와 속성 파일, 라이브러리 및 액세서리 파일이 포함되어 있다. 쉽게 JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일로 플랫폼에 귀속되는 점만 제외하면 WIN ZIP과 동일한 구조이다. * WAR (Web Application Archive) servlet/jsp 컨테이너에 배치할 수 있는 웹 어플리케이션(web application) 압축 파일 포맷이다. web application container는 웹 어플리케이션 자체 api를 제공하기 위해 컨테이너를 로드하는 클래스 로더와 사용자가 추가한 jsp나 war 파일을 다루기 위한 ServletContext Loader를 사용한다. 배포할 때 로컬 실행 프로그램은 ..

Web 2021.08.16

로컬(윈도우)에서 AWS로 파일 올리기

1. 윈도우 CMD 창에서 올리고 싶은 파일이 있는 곳으로 이동한다. (사실 이렇게 안하고 파일이 있는 경로를 지정해줘도 된다.) 2. SCP 프로토콜을 사용하여 scp -i "[pem키 위치]" [올리고 싶은 파일 이름] [user id]@[ec2 public IP]:~/[저장할 주소] 명령어를 입력하면 된다. 이 때 openssh 설정이 되어있어야 한다. 앱 및 기능 > 선택적 기능에서 openssh가 설정되어 있는지 확인해보자. * SCP? Secure Copy Protocol의 약자로 로컬 호스트와 원격 호스트 간에 또는 두 원격 호스트 간에 컴퓨터 파일을 안전하게 전송하는 수단이다. SSH 프로토콜을 기반으로 한다. 그러나 보안 취약점이 최근 드러나면서 SCP 보다는 SFTP 또는 rsync와 ..

Web 2021.08.13

Spring Boot : Multipart(멀티파트)

* Multipart 바이너리 데이터 전송을 위해 사용한다. 예전에는 파일 업로드와 같은 기능 구현을 위해 반드시 외부 라이브러리가 필요했지만, 서블릿 3.0 이후 부터는 서블릿 3.0 이후부터는 서블릿 스펙에 'multipart'가 추가되어서 별도의 라이브러리 없이 구현이 가능해졌다. * JSON과 파일을 한 request에 보낼 때 1. User POJO 클래스를 만든다. 2. 컨트롤러레 multipart를 적용한다. JSON과 Multipart를 포스트로 받기 위해서 consume 파트에 content type을 명시해야 한다. consumes = { MediaType.APPLICATION_JSON_VALUE,MediaType.MULTIPART_FORM_DATA_VALUE }) 그리고 컨트롤러 메소..

Web 2021.08.08

브라우저에 URL을 입력하면 일어나는 일 (2/2)

https://superbono-2020.tistory.com/166 * OSI 모델 레이어는 다양한 추상화 수준을 나타핸다. 웹 브라우저가 존재하는 애플리케이션 계층(7)에서 데이터는 사람이 읽을 수 있는 형식으로 시작된다. 계층을 내려갈수록 데이터는 물리적 매체를 통해 전송될 형식으로 점진적으로 변환된다. 명심해야 할 중요한 사항 중 하나는 이것이 프로토콜이 아니라 모델이라는 것이다. 웹 브라우저는 HTTP 요청 공식화, 데이터 암호화, 상태 비저장 HTTP 프로토콜을 통한 영구 연결 처리와 같은 여러 상위 계층을 함께 수행하는 경우가 많다. 전송 계층은 일반적으로 OS에 의해 처리되며 데이터를 대상으로 지정하고 수신된 데이터가 손상되지 않았는지 또는 올바른 순서로 있는지 확인하는 TCP 및 UDP ..

Web 2021.08.01

브라우저에 URL을 입력하면 일어나는 일 (1/2)

브라우저에 URL(예: https://google.com)을 을 입력했을 때 일어나는 일에 대해서 2개의 포스트에 나누어 정리해보겠다. * 간단 개요 인터넷은 Internet Protocol Suite 위에서 동작한다. Internet Protocol Suite는 TCP/IP로 알고 있는 그것이다. 많은 연결 프로토콜이 존재하나, TCP/IP는 웹 서버와 브라우저 사이에서 웹사이트에 대한 정보를 옮기는데 중요한 역할을 한다. 실질적인 데이터는 HTTP 프로토콜에 의해서 다뤄지지만, TCP와 HTTP는 다른 용도로 사용되며 OSI 모델 중 계층도 다르다. HTTP는 7계층 Application Layer이며, TCP는 4계층 Transport Layer이다. 1. 브라우저 주소 창에 URL을 입력하고 엔터..

Web 2021.07.31