전체 글 410

개발자 관점에서의 Port 번호

개발자는 port를 process 식별자로 생각한다. 컴퓨터를 네트워크 관점에서 세가지 레이어로 나누면 응용계층 커널계층 하드웨어 계층으로 나눌 수 있는데 이때 커널에 있는 TCP는 커널계층에 있고 애플리케이션은 응용계층에 있는것이 일반적입니다. 그럼 이 응용계층에 있는 애플리케이션은 본질은 파일이지만 이 파일과 커널의 프로토콜을 연결할 수 있도록 인터페이스가 제공되는데 이때 추상화 된 파일을 소켓이라고 합니다. 이 소켓을 생성할때 tcp소켓인 경우 소켓에 attech되는 정보가 Port번호라고 합니다. Port는 최대 16bit -2 까지 만들수 있습니다. 그리고 이 Port는 각 프로세스마다의 고유의 번호가 되기때문에 한개의 프로세스만이 독립적으로 가질 수 있는 번호가 할당되며 그렇기 때문에 개발자의..

네트워크 2023.08.20

Host, Switch, network 와 개념/ IPv4 주소 체계

Host, Switch, Network host: 컴퓨터가 Network에 연결이 돼 있으면 호스트라고 부른다. 호스트는 크게 network 이용주체와 network자체로 나뉜다. Switch : 컴퓨터가 network에 연결된 호스트가 아닌 컴퓨터 자체가 network를 이루고 있을때 Switch가 된다. 대표적으로 Router가 있다. EndPoint : network 이용주체의 다른말이다. 이용주체는 Peer, Server, Client등으로 기능과 존제의 이유에따라서 나뉜다. NetWork: 가장 큰 풀이 internet이다 이 internet을 이루는 핵심 구성요소가 Router와 dns가 됩니다. 네트워크 자체를 이루고 있는 컴퓨터가 switch고 대표적인 스위치가 라우터가 있다. 방화벽이나 ..

네트워크 2023.08.20

MAC,IP,Port 번호가 식별하는것

MAC,IP,Port 번호가 식별하는것 위사진은 osi 7계층 사진입니다. 전송 계층에 Port 번호 Port번호가 재밌는 부분이 업무에 따라 달라진다고 합니다. 소프트웨어개발자는 프로세스 식별자라고 생각하고 네트워크 업무를 보시는분은 서비스라고 하고 실제로 통신공사를 하는 분은 인터페이스라고 말한다고 합니다. 네트워크 계층에 IP주소 v4,v6 물리계층 MAC 어드레스 주소 NIC(네트워크 인터페이스 카드) 모든 렌카드는 맥어드레스가 있습니다. 네트워크 인터페이스카드 NIC은 호스트를 식별하지는 않는다. NIC하나에 여러게의 IP를 바인딩 해서 사용할 수 있다. MAC주소는 하드웨어 주소라고도 한다. MAC주소는 변경할 수 있다. MAC IP Port는 각 각의 계층에 위치해 있습니다.

네트워크 2023.08.20

프록시란?

프록시? WEB PROXY proxy 는 중간에 있는 정검다리입니다. 사전적의미는 대리인입니다. 클라이언트 프록시 서버 클라이언트가 어떠한 요청을 할때 서버로 바로 보내는 것이 아니라 그사이에 있는 프록시에게 보내고 이 프록시가 서버로 보내게되고 서버입장에서도 마찬가지 이다. 왜? 왜 그렇게 굳이 하나의 징검다리를 두고 통신을 하는 걸까? 캐싱을 통한 회선비용 절감 빛 부하감소 보안 Application Control, 네트워크 경계 Source IP 변조/우회프록시 박싱을 이용하는 네트워크 솔루션 Access VPN L4 WEBFW 등등...

네트워크 2023.08.20

React Memo

React Memo? React의 렌더링 성능을 최적화하기 위한 고차 컴포넌트(HOC, Higher-Order Component)이다. 원리를 이해하려면 React의 렌더링 과정을 먼저 이해해야 한다. React 렌더링의 기본 React에서 상태나 props가 변경될 때마다 해당 컴포넌트는 다시 렌더링된다. 때로는 실제로 변경되지 않은 props나 상태에 대해서도 불필요하게 다시 렌더링되는 경우가 있을 수 있다. 이러한 불필요한 렌더링은 애플리케이션의 성능을 저하시킬 수 있다. React.memo의 원리 React.memo는 컴포넌트에 대한 메모이제이션(memoization)을 제공는데 메모이제이션이란 주어진 입력에 대한 출력을 기억해 놓았다가, 동일한 입력이 다시 주어질 때 기존의 출력을 다시 사용하는..

React 2023.08.20

React 불변성

React 불변성 불변성이란 사전적 의미로 값이나 상태를 변경할 수 없는값 js에서 원시 타입은 불변성을 가지고 있고 참조 타입은 그렇지 않다 원시타입 : boolean, string, number, ull, undefined, Symbol 참조타입 : Object, Array 원시타입 : 고정된크기로 call Stack 메모리에 저장, 실제 데이터가 변수에 할당 참조타입 : 데이터 크기가 정해지지 않고 CallStack 메모리에 저장, 데이터 값이 heap에 저장되며 변수에 heap 메모리의 주소 값이 할당. - 배열에 대한 요소를 추가하거나 객체 속성의 값을 변경할 때 call Stack의 참조 id는 동일하게 유지되고 heap 메모리에서만 변경됩니다. 이렇게 불변성이 유지되지 않기 때문에 리액트를 ..

React 2023.08.20

Gradle 정리

Maven 과 Gradle manen xml 기반 프로젝트 의존성 관리 도구 해당 라이브러리를 사용하기 위한 다른라이브러리까지 저장소에서 다운받아 준다. 전체적인 라이프사이클 관리 도구 Maven Lifecycle Clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계 Validate : 프로젝트가 올바른지 확인학고 필요한 모든 정보를 사용할 수 있는 지 확인하는 단계 Compile : 프로젝트의 소스코드를 컴파일하는 단계 Test : 유닛(단위) 테스트를 수행하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능) Package : 실제 컴파일된 소스 코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계 Verify : 통합테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는..

Springboot 2023.08.17

spring data JPA에서 Pk를 UUID로 관리해 보자

UUID PK 생성 @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name="uuid2", strategy = "uuid2") @Column(columnDefinition = "BINARY(16)") private UUID id; uuid와 uuid2의 차이점은 uuid는 RFC 4122 호환안됨 -> warn로그 쌓임 BINARY(16)은 저장할 때 남는 길이는 RPAD 처리하고 저장하기때문에 예상치 못한값이 들어가고 조회할 수 없다.(필수설정) spring Data JPA를 통한 CRUD는 전부 지원해 주는것 같다. JDBCTemplate를 활용해서 batchInsert/Update 시에 UUID 사용하기 기본적으로 아이디 채번방식이 SEQU..

Springboot 2023.08.17

CSRF 보호가 작동하는 방식

CSRF 가 필요한 이유 CSRF 보호가 작동하는 방식을 잘못 이해하면 활성화 해야 하는 시나리오에서 비활성화 하거나 그 반대의 상황이 많이 발생한다. 다음과 같은 시나리오로 예를 들 수 있다. 사용자가 파일을 관리할수 있기 인증/인가를받고 애플리케이션에 로그인한 상태에서 파일을 관리하기위해 서버에 엔드포인트를 호출하고 이메일의 알 수 없는 링크를 클릭했는데 빈화면이 나오는 페이지로 리디렉션되고 자동으로 외부 페이지가 열렸다 이때 이 페이지가 서버를 호출하고 사용자 대신 작업을 실행한다(악의적인 이유로 파일을 수정/삭제한다) 이를 가능하게 하는 이유는 애플리케이션 입장에선 해당사용자는 인증/인가를 받은(로그인한) 신뢰하는 사용자 이기 때문이다. 대부분의 앱 사용자는 자신의 보안위협을 인지하지 못하기때문에..

Springboot 2023.08.17