본문 바로가기

Java & Spring

(23)
HTTP 상태 코드 정리 HTTP란? HTTP(Hypertext Transfer Protocol)는 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식으로 TCP/IP 프로토콜 위에서 동작한다. 즉, 웹을 이용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP 주소를 가져야한다. 웹 브라우저의 주소창에 URL을 입력하고 Enter를 누르면 웹 클라이언트와 웹 서버 사이에 HTTP 연결이 맺어지고 웹 클라이언트는 웹 서버에 HTTP 요청 메시지를 보낸다. 웹 서버는 요청에 따른 처리를 진행한 후에 그 결과를 웹 클라이언트에 HTTP 응답 메시지로 보낸다.이처럼 요청 메시지와 응답 메시지가 반복적으로 오가며 웹을 사용할 수 있는 것이다. 서버에서의 처리 결과는 응답 메시지의 상태 라인에..
OAuth2.0 + Spring Security + JWT 프로젝트를 진행하면서 소셜 로그인(OAuth2.0), Spring Security, JWT Token 기능을 접목시켜 구현하기로 시도해 봤는데, 개념이 확실하게 잡히지 않은 채로 구현을 하려다 보니 소요시간이 오래 걸리기도 했고, 확실하게 이해하기 위해 따로 정리를 해봤다. 전체 동작과정 요약 사용자의 유저 에이전트(User Agent)가 클라이언트(Client)의 인증 시작 API를 호출한다. 클라이언트는 유저 에이전트를 카카오의 인증 URI(Authorization URI)로 리다이렉트한다. 사용자는 로그인을 수행한다. 인증 서버(Authorization Server)가 인증 성공 여부를 클라이언트로 전달한다. 성공 시 인증 코드(Authorization Code)가 전달된다. 클라이언트는 액세스 토..
Log Level 로그 레벨(Log Level)은 소프트웨어에서 발생하는 로그 메시지의 중요도 또는 심각성을 나타내는 수준을 말한다. 다양한 로그 레벨이 있으며, 각 레벨은 특정한 유형의 로그를 나타낸다. TRACE: 가장 상세한 로그 레벨로, 애플리케이션의 동작에 대한 매우 상세한 정보를 제공한다. 주로 디버깅 목적으로 사용되며, 애플리케이션의 내부 동작을 추적하고 문제를 해결하는 데 도움을 준다. DEBUG: 디버깅을 위한 로그 레벨이다. 애플리케이션의 상태와 실행 흐름에 관련된 중요한 정보를 제공한다. 주로 개발자가 코드의 동작을 추적하고 버그를 찾는 데 사용된다. INFO: 애플리케이션의 일반적인 운영 상태에 대한 정보를 제공한다. 주로 애플리케이션의 실행과 관련된 중요한 이벤트를 기록하며, 사용자에게 유용한 정보..
커넥션 풀 VS 캐시 동시성 이슈를 해결하기 위해 Distribution Lock을 사용했는데, 커넥션 풀과 캐시의 개념이 비슷하다고 생각하여 정리를 해봤다. 커넥션 풀 목적 DB연결에 대한 비용을 최소화하기 위해 사용된다. 매번 새로운 연결을 만드는게 아닌, 미리 만들어진 연결을 재사용함으로써 연결, 종료에 따른 오버헤드를 감소시킨다. (오버헤드 : 특정 기능을 수행하는데 드는 간접적인 시간, 메모리 등 소모되는 자원? 이라고 생각하면 될듯) 동작 초기에 미리 DB 연결을 생성하여 풀에 저장한다. 클라이언트에서 DB 연결이 필요할 때, 풀에서 사용 가능한 연결을 가져와 사용한다. 작업이 완료되면 연결을 다시 풀에 반환하여 재사용이 가능하게 한다. (풀 : 리소스를 미리 생성하고 관리하는 자료구조) 활용 트랜잭션과 같은 짧은..
sleep() vs wait() sleep()과 wait()은 스레드를 일시적으로 중지하는 데 사용되는 메서드이다. 하지만 개념과 목적이 다르다. sleep() 메서드는 주어진 시간 동안 스레드를 일시적으로 중지한다. 이는 정확한 시간 간격을 기다리거나, 일정한 딜레이를 주거나, 스레드의 실행을 잠시 멈출 때 유용하다. sleep()은 주어진 시간이 경과하면 자동으로 깨어나 다음 작업을 계속한다. 주로 시간 기반 작업을 수행할 때 사용된다. javaCopy code try { Thread.sleep(1000); // 1초 동안 스레드 중지 } catch (InterruptedException e) { e.printStackTrace(); } 반면, wait() 메서드는 스레드 간의 동기화를 위해 사용된다. 일반적으로 객체의 락을 획득한..
NginX NginX는 가벼운 웹 서버로 현재 많이 사용중이다. (나는 프록시 서버로 사용해봤다.) Nginx는 Igor Sysoev에 의해 개발된 고성능 웹 서버 및 리버스 프록시 서버이다. 기존 웹 서버보다 적은 자원을 사용하여 더 많은 연결을 처리할 수 있다. 다양한 운영 체제에서 사용할 수 있으며, 무료로 사용 가능한 오픈 소스 소프트웨어다. 주요 기능 웹 서버: 정적 파일 서비스, 가상 호스팅, SSL/TLS 지원 등을 포함한 웹 서버로서의 기능을 제공한다. 리버스 프록시 서버: 클라이언트 요청을 백엔드 서버로 전달하는 역할을 수행한다. 로드 밸런싱, 캐싱, SSL/TLS 종단 간 암호화 등 다양한 기능을 지원한다. 로드 밸런싱: 여러 대의 서버에 부하를 분산하여 웹 응용 프로그램의 성능을 향상시킨다. 캐..
Apache Kafka Apache Kafka는 대용량의 실시간 데이터 스트리밍 플랫폼으로서, 대규모의 데이터를 안정적으로 처리하고 분산 시스템 간에 신뢰성 있는 데이터 통신을 가능하게 한다. Kafka는 높은 처리량과 낮은 지연 시간을 제공하여 실시간 데이터 스트림 처리 및 데이터 파이프라인 구축에 이상적이다. Kafka의 주요 특징과 구성 요소 퍼블리셔(Publisher)와 서브스크라이버(Subscriber): Kafka는 데이터를 생성하는 퍼블리셔와 데이터를 소비하는 서브스크라이버(또는 컨슈머) 간의 비동기식 통신을 지원한다. 퍼블리셔는 데이터를 Kafka 토픽으로 발행하고, 서브스크라이버는 해당 토픽에서 데이터를 구독하여 처리한다. 토픽(Topic): Kafka에서 데이터는 토픽이라는 주제별로 구분된다. 토픽은 데이터 ..
스크래핑 스크래핑(Scraping)은 웹 페이지나 웹 사이트에서 데이터를 수집하는 과정이다. 일반적으로 웹 페이지의 HTML 코드를 분석하여 원하는 정보를 추출하는 작업을 포함하며, 스크래핑은 웹 상의 다양한 데이터를 수집하고 분석하기 위해 사용된다. 스크래핑 과정 웹 페이지 접근 스크래핑을 위해선 웹 페이지에 접근해야 한다. 일반적으로 HTTP 또는 HTTPS를 통해 웹 페이지에 접속하게 된다. HTML 파싱 웹 페이지의 HTML 코드를 파싱하여 구조화된 형태로 변환한다. 파싱은 HTML 태그의 계층 구조를 분석하고, 요소들의 속성과 값을 추출한다. 데이터 추출 파싱된 HTML에서 필요한 데이터를 추출한다. 이때 CSS 선택자 또는 XPath와 같은 쿼리 언어를 사용하여 원하는 요소를 선택하고 데이터를 추출한다..
[JAVA / 알고리즘] - 최단 경로 알고리즘 최단 경로 알고리즘 가중 그래프 상의 두 노드를 연결하는 가장 짧은 경로를 찾는 방법으로 지도 경로 탐색이나 네트워크 구축 시 비용을 최소화하는 경우 사용한다. ① 다익스트라 (Dijkstra) 출발점에서 목표점까지의 최단 경로를 구하는 알고리즘으로 하나의 노드에서 다른 모든 노드로의 최단 경로를 구할 수 있다. 그리디 + DP 형태의 구조이며 간선에 음의 가중치가 없어야한다. 알고리즘 복잡도 : O (ElogV) (E : 간선 수, V : 노드 수) ② 벨만-포드 (Bellman - Ford) 다익스트라와 다르게 음수 간선이 포함되어 있어도 최단 경로를 구할 수 있지만, 음수 사이클이 있으면 정상적으로 동작하지 않는다. 매번 모든 간선을 확인하기 때문에 다익스트라보다는 느리다. 따라서, 간선에 음수가 ..
[JAVA / 알고리즘] - 다이나믹 프로그래밍 다이나믹 프로그래밍 (DP) 큰 문제를 부분 문제로 나눈 다음 답을 찾아가는 과정에서, 계산된 결과를 기록하고 재활용하며 문제의 답을 구하는 방식으로, 중간 계산 결과를 기록하기 위한 메모리가 필요하지만 한 번 계산했던 부분은 다시 계산하지 않기에 연산 속도가 빠르다. 다른 알고리즘과의 차이 ① 분할 정복은 부분 문제가 중복되지 않고 독단적으로 사용되지만, DP는 부분 문제가 중복되어 계산 과정에서 재활용한다. ② 그리디 알고리즘은 계산 과정을 통해 최대한 근사치에 가까운 값을 도출하지만, DP는 모든 계산 방법을 확인 후 최적해를 구한다. DP 방법 ① 타뷸레이션 (Tabulation) 상향식 접근 방법으로 작은 하위 문제부터 풀면서 올라간다. 모든 과정을 계산하며 차례대로 진행 ② 메모이제이션 (Me..