인프런 김영한님 스프링 강의를 통해 정리한 학습내용 기록입니다. 공통 관심 사항 특정 권한이 필요한 화면 및 API의 경우 로그인하지 않은 사용자에게는 해당 기능의 컴포넌트를 숨기면 된다. 하지만 해당 URL을 통해 들어오게 될 경우 막을 수 없다. 단순한 해결방안으로 권한이 필요한 Endpoint에 일일이 로그인 여부 체크를 하는 로직을 추가하는 방법이 있는데 이는 적용이나 유지보수 측면에서 효율이 좋지 않은 방법이다. 이렇듯 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사라고 부른다. 이러한 공통 관심사는 스프링의 AOP로도 해결할 수 있지만, 웹과 관련된 공통 관심사는 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다. 처리하기 위한 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 ..
문제 https://www.acmicpc.net/problem/2141 2141번: 우체국 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 1 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다. www.acmicpc.net 풀이 그리디 방식을 활용한 풀이 접근법 전처리 입력이 거리순으로 들어오지 않을 수 있으니 거리를 기준으로 정렬 조건 각 사람까지의 거리의 합 마을이 없는 위치에 우체국을 세울 수 없음 마을 위치, 인구 수 입력의 범위는 최대 1,000,000,000 마을 거리의 합이 아니라 각 사람까지의 거리의 합이 최소가 되..
JWT를 공부하기 전에 Web에서 클라이언트 식별과 관련하여 주로 사용되는 세션 및 쿠키에 대해 정리한 포스팅입니다. ConnectionlessHTTP 통신을 하기 위해서는 클라이언트와 서버가 연결되있어야 함.커넥션은 유지 비용이 상당히 큼 → Stateless 방식 채택 Stateless위의 Connectionless 특성을 이어받음HTTP 통신이 이전 요청의 상태를 기록하지 않음Stateful의 경우 이전 상태를 보존하며 이전 요청의 내용을 기억함.위 두가지 특성으로 연결을 유지하지 않음으로써 클라이언트 식별문제가 발생WEB은 특정 클라이언트에게 Fit한 데이터(정보)를 서버에서 제공해야하기 때문에 클라이언트 식별이 강요됨.예를들어 장바구니, 로그인 등과 같이 특정 클라이언트에 대한 특정 연결을 유지..
당황하지 않고 Git Master가 되는 그 날까지. 개요 최근 진행했던 프로젝트 요구사항 때문에 GitLab Private 저장소에서 개발을 진행했습니다. 해당 프로젝트를 포트폴리오로 쓰기 위해서는 개인 Public 저장소인 Github로 옮길 필요가 있습니다. 해당 포스팅에서는 GitLab to GitHub 방법에 대해서 알아보겠습니다. 당연히 Commit 기록까지 같이 옮기기 위한 방법을 설명하겠습니다. git clone (normal) 1. 옮기고자하는 기존 원격 레포지토리 clone $ git clone [레포지토리 주소] 2. 옮기고자하는 새로운 원격 레포지토리로 remote 변경 $ git remote set-url origin [새로운 레포지토리 주소] 3. push $ git push 기..
스프링 버전이 3.x대로 넘어오면서 기존에 사용하던 Springfox가 호환이 되지않는 문제가 있습니다. 해결을 위한 SpringDocs 사용법에 대한 가이드 포스팅 예전 스프링 2.x대에서 사용하던 Springfox 라이브러리가 메인테이너되지 않는 문제가 발생하여 레퍼런스를 참조하던 중 3.x에서 Swagger를 적용하기 위해서는 SpringDocs 라이브러리를 활용하여 구축하여야 한다는 솔루션을 찾게 되었습니다. 이번 포스팅은 처음 써보는 SpringDocs에 대한 기본 작성 가이드를 구축하기 위한 포스팅이며, 오타/오역/오류가 있다면 언제든지 말씀하여 주시면 감사하겠습니다. Swagger 구축 환경 SpringBoot : 3.2.2 JDK : 17 build Tools : gradle Editor ..
당황하지않고 git Master가 되는 그 날까지. 지금껏 작업한 내용물을 add처리 할 때 뒤따라오는 경로를 .으로 하여 모든 수정내역들을 Staging Area로 이동하기만 했습니다. 그런데 특정 파일 혹은 폴더만 Commit Message를 달리 하고싶어 별도로 add를 하고자 할 때 어떤 명령어를 써야할지 감이 안잡힐 수 있습니다. 이럴 때 활용가능한 방법으로는 다음과 같습니다. 1. 특정 파일 add git status를 입력하여 전체 Changes 상태를 확인합니다. 예를들어 Untracked files 중 AlarmResultDto.java 파일만 add를 하고자 할 때 전체 파일 경로를 add 뒤에 추가함으로써 특정 파일만 Staging Area에 넣을 수 있습니다. git add back..
HTTP Status Code 클라이언트에서 오는 HTTP 요청에 대한 응답입니다. 각각의 응답코드 번호는 다음을 나타냅니다. Informational responses (100 – 199) Successful responses (200 – 299) Redirection messages (300 – 399) Client error responses (400 – 499) Server error responses (500 – 599) 다양한 웹을 사용하는 클라이언트 및 개발자들은 위와같은 수많은 Response code를 맞닥뜨리게 됩니다. 수많은 Code들 중 잘 알려진 코드들에 대해 어느정도 숙지를 해놓는다면 시기적절하게 대처할 수 있을거라 생각도 됩니다. 다음으로는 각각의 Response 중 Well ..
이번에 진행하는 프로젝트에서 채팅 서버 관련 개발을 담당하게 되어 학습한 내용을 정리한 포스팅입니다. WebSocket? 웹소켓은 기존의 단방향 HTTP 프로토콜과 호환되며, 양방향 통신을 제공하기 위해 개발된 프로토콜입니다. 웹소켓과 HTTP는 모두 OSI 7계층에 위치해 있으며 동시에 4계층 TCP에 의존합니다. 클라이언트에서 최초 연결 시 기존 HTTP 통신과 마찬가지로 3Way-Handshake를 통해 연결을 하고, 웹소켓 프로토콜을 통해 데이터를 송/수신합니다. 또한 HTTP프로토콜과의 호환을 달성하기 위해 Handshake과정에서 HTTP 업그레이드 헤더를 사용하여 HTTP프로토콜에서 웹소켓 프로토콜로 변경하는 과정이 있습니다. 웹소켓을 사용하는 이유 일반적으로 클라이언트와 서버 사이에 HTT..