[네트워크] UDP/TCP
·
⚙️ CS/네트워크
UDP와 TCP는 둘 다 전송 계층 프로토콜로, 데이터를 네트워크를 통해 보내는 방식을 정의한다. ✅ UDP (User Datagram Protocol): 신뢰성 없는 비연결형 프로토콜 📍특징비연결성: 연결 설정 없이 데이터를 보냄 신뢰성 없음: 순서가 바뀌거나, 중간에 데이터가 사라질 수 있음빠른 속도: 연결 설정 없이 데이터가 전송되고, 헤더가 간단하여 처리 시간이 짧음낮은 오버헤드: 간단한 프로토콜 구조로, CPU와 메모리 자원 소모가 적음TCP는 20Byte의 헤더 오버헤드를 갖지만, UDP는 8Byte의 오버헤드를 가짐멀티캐스트 및 브로드캐스트 지원: 여러 수신자에게 데이터를 동시에 전송 가능혼잡 제어 미지원: 네트워크 상태에 관계없이 데이터를 전송 속도가 빠르고, 멀티캐스트 및 브로드캐스트..
[스프링] 스프링 이벤트는 언제 써야할까?
·
🎯 Programming
기존 프로젝트에서 Service 간 의존성이 생기는 부분이 고민이었고, 이를 해결하기 위해 스프링 이벤트를 적용해 봤습니다. ✅ 프로젝트 상황"내부 알림 기능"이 서비스에 필요했습니다.즉, 유저가 서비스에 접속했을 때 알림이 쌓여 있고 이를 확인할 수 있는 화면이 필요했습니다. 사용자에게 알림이 도착하는 상황은 다음 3가지 경우였습니다.리뷰 요청프로젝트 팀원 초대팀원 초대 수락📍 Alarm 테이블해당 기능에 필요한 알람 테이블은 다음과 같이 설계했습니다. 주요 필드로는 `receiver_id`: 알람은 받는 사람 ID`sender_id`: 알람을 보낸 사람 ID`targetId`: 알림이 발생한 3가지 상황 각각에서 연관된 엔티티의 ID`message`: 알람 멘트`alarm_type`: 알람이 발..
[네트워크] XSS & CSRF & SQL Injection
·
⚙️ CS/네트워크
✅ XSS (Cross Site Scripting): 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입하는 공격 웹 애플리케이션이 사용자로부터 입력받은 값을 제대로 검사하지 않고 사용할 경우 나타난다. 📍 위험성세션 하이재킹: 사용자의 세션 쿠키를 탈취하여 사용자인 것처럼 가장할 수 있다.피싱 유도: 사용자를 피싱 사이트로 리다이렉트(Redirect)하여 정보를 민감 정보를 입력하도록 유도한다.브라우저 익스플로잇: 브라우저의 취약점을 이용해 악성 코드 설치 및 실행가 가능하다. 📍 방어법입력값 검증: 사용자 입력값에 스크립트나 HTML 태그가 포함되지 않도록 제한한다.특수 문자 이스케이프: `, &` 등 태그로 해석될 수 있는 문자를 정규표현식이나 이스케이프 함수를 이용해 필터링한다..
[네트워크] HTTP 상태유지 기술
·
⚙️ CS/네트워크
✅ 쿠키와 세션: HTTP 프로토콜의 특성인 비연결성(connectionless)과 무상태성(stateless)을 보완하기 위해 만들어진 기술 ex) HTTP 특성상 매번 페이지를 이동할 때마다 로그인을 다시 해야 한다. -> 이렇게 상태 정보를 저장할 필요가 있을 때 쿠키와 세션 사용 비연결성 : 한 번의 요청과 응답이 오간 후에 맺었던 연결을 끊어버림무상태성: 통신이 끝나면 상태 정보를 기억하지 않음 📍 쿠키(Cookie): 클라이언트 PC에 저장되는 작은 기록 정보 파일 [특징]Key-Value 쌍으로 구성이름, 값, 만료일, 경로 정보로 구성도메인 당 20개의 쿠키를 가질 수 있음하나의 쿠키는 4KB까지 저장 가능 [작동 방식]클라이언트가 서버에 HTTP 요청을 보냄서버는 요청을 처리한 후, 응..
[스프링] JPA N+1 문제 트러블 슈팅
·
🎯 Programming
실제 프로젝트를 진행하면서 만났던 N+1 문제를 해결하는 과정을 중심으로 작성해 보았습니다.✅ N+1 문제란?: 요청이 1개의 쿼리로 처리되길 기대했는데 추가로 N개의 쿼리가 발생하는 현상 개념은 정말 간단합니다.N개의 데이터를 한 번에 조회하는 쿼리 1개를 날렸는데, 추가적으로 N개의 쿼리가 더 발생하는 현상입니다.(사실 흐름상 1+N 문제라고 하는 것이 더 적절합니다) 이제 실제 프로젝트 상황을 중심으로 `N+1` 문제가 언제, 어떤 상황에서 발생하는지 알아보겠습니다. ✅ 프로젝트 상황📍 ERD"프로젝트 팀원을 모집하는 기능"을 구현하기 위해 아래와 같이 `ERD`를 설계했습니다. 팀원 모집 게시물에는 선호하는 성격, 모집하는 분야, 모집하는 언어를 여러 개 설정할 수 있습니다.따라서 각각 1:N의..
[네트워크] DNS(Domain Name System Servers)
·
⚙️ CS/네트워크
✅ DNS(Domain Name System Servers)란?: 도메인 이름을 IP 주소로 변환하거나 그 반대의 역할을 해주는 애플리케이션 계층 프로토콜 사용자가 웹사이트에 접근할 때, 기억하기 쉬운 도메인 이름(예: http://www.google.com)을 입력하면 DNS가 이 이름을 해당하는 IP 주소로 변환하여 웹사이트에 연결할 수 있도록 도와준다. DNS는 인터넷의 전화번호부와 같은 역할을 한다. 도메인 이름(Domain Name): 네트워크 상에서 컴퓨터를 식별하는 이름으로, IP 주소에 대응된다. DNS 질의는 주로 UDP(User Datagram Protocol)를 사용한다.속도: UDP는 연결을 설정하지 않고 데이터를 전송하기 때문에 더 빠르다.간단한 요청: DNS 질의는 일반적으로 ..
[네트워크] HTTP 프로토콜
·
⚙️ CS/네트워크
✅ HTTP(HyperText Transfer Protocol)란?: 애플리케이션 계층의 프로토콜로, 웹 서비스 통신에 사용 웹 브라우저와 서버 간에 텍스트, 이미지, 영상, JSON 등의 데이터를 주고받을 때 사용된다.기본적으로 80번 포트를 사용하며, 우리가 흔히 웹 페이지를 열 때 사용하는 방식이 바로 HTTP다.HTTP는 다음과 같이 크게 2가지 주요한 특징을 가진다. 1️⃣ Connectionless Protocol (비연결성 프로토콜): 한 번의 요청과 응답이 오간 후에 맺었던 연결을 끊어버림서버는 다수의 불특정 클라이언트와 연결을 유지하지 않아도 된다.하지만, 매번 새로운 연결을 맺어야 하는 오버헤드가 발생한다.HTTP 1.0부터는 KeepAlive 헤더를 통해 HTTP 연결 지속이 가능하..
[네트워크] OSI 7계층 vs TCP/IP 모델
·
⚙️ CS/네트워크
✅ OSI 7 계층 모델 vs. TCP/IP 모델OSI 모델이 표준과 학습도구로써의 의의가 있다면 TCP/IP 모델은 실무적인 통신 기술을 구현하는데 의미를 가진다 OSI 모델을 역할을 기반으로 각 계층을 구성하고, TCP/IP 모델을 프로토콜의 집합을 기반으로 구성된다.전체적인 통신전반에 대한 표준화 방식이 OSI 모델이라면 TCP/IP 모델은 데이터 전송과 인터넷 통신에 특화된 구조이다. 📍 프로토콜을 계층화하는 이유OSI 7 Layer, TCP/IP처럼 프로토콜을 계층화하는 이유가 뭘까? 프로토콜을 계층화하는 이유는 여러 가지 장점이 있으며, 대표적으로 아래 3가지를 들 수 있다.쉬운 이해: 복잡한 데이터 전송 과정을 계층으로 나누어 전체 흐름을 이해하기 쉽게 만든다.모듈화로 인한 유지보수 용..