분류 전체보기 1341

Ch11. 실전. 책임의 분리

예제 시나리오와 요구사항클라이언트: 백엔드를 이용하는 애플리케이션인증 서버: 사용자 자격 증명 데이터베이스를 포함하는 애플리케이션사용자의 자격 증명을 기준으로 사용자를 인증하고 SMS를 통해 OTP를 전송비즈니스 논리 서버: 클라이언트가 이용할 엔드포인트를 노출하는 애플리케이션엔드포인트에 대한 접근에 보안을 적용한다.클라이언트가 비즈니스 엔드 포인트를 호출하기 위한 단계비즈니스 논리 서버의 /login 호출, 사용자 이름과 암호를 인증하고 OTP 발급클라이언트가 사용자 이름과 암호를 인증하면 비즈니스 논리 서버가 OTP에 대한 요청을 인증 서버로 보낸다.인증이 성공하면 인증 서버가 임의로 생성된 OTP를 SMS를 통해 클라이언트로 보낸다이러한 사용자 인증 방식을 다단계 인증이라고 한다사용자 이름과 OTP..

Ch10-2. CORS 이용

CORS란? 기본적으로 브라우저는 사이트가 로드된 도메인 이외의 도메인에 대한 요청을 허용하지 않는다. 브라우저는 CORS 메커니즘으로 엄격한 정책을 완화하고 일부 조건에서 서로 다른 출처 간의 요청을 허용한다고 할 수 있다.CORS 작동 방식애플리케이션이 두 개의 서로 다른 도메인 간에 호출하는 것은 모두 금지된다. 호출이 필요할 때는 CORS를 이용해 애플리케이션이 요청을 허용할 도메인, 공유할 수 있는 세부 정보를 지정할 수 있다.CORS 메커니즘은 HTTP 헤더를 기반으로 작동하며, 가장 중요한 헤더는 아래와 같다.Access-Control-Allow-Origin: 도메인의 리소스에 접근할 수 있는 외부 도메인(원본)을 저장한다.Access-COntrol-Allow-Methods: 다른 도메인에 ..

Ch02. 인터넷 공유기 작동원리

공유기 작동 원리일반적인 인터넷 공유기는 NAT(Network Address Translation) 시술이 적용된 장치이다.NAT를 사용하면 하나의 Host로 여러 개의 IP를 제공할 수 있게 해 준다.보통 주소와 포트번호를 모두 제어한다.인터넷 IP주소 부족 문제를 해결해 준다.패킷 필터링 방화벽과 비슷한 보안성을 제공한다.공유기 구조에 따른 분류Con NatHost 단위로 외부포트 지정Full ConeRestricted ConIP Address restrictedPort restrictedSymmetric NatTCP 세션마다 외부 포트 지정보안성이 뛰어나다.공유기 네트워크 구성 예private IP는 인터넷에서 통용되는 IP가 아니다.Symmetric NAT 방식Client(192.168.0.10)..

Custom Exception / Standard Exception

Custom Exception의 필요성Effective Java에서는 다음과 같은 이유로 Standard Exception의 사용을 권장한다.우리의 API가 다른 사람이 익히고 사용하기 쉬워진다.예외를 재사용하므로써 예외 클래스 수가 줄어들고 그에 따라 메모리의 사용량, 클래스를 적재하는 시간도 적게 든다.하지만 다음과 같은 이유라면 표준 예외를 확장해도 좋다고 한다.표준 예외가 이름뿐만 아니라 예외가 던져지는 맥락도 부합하지 않다면 표준 예외를 확장하라.더 많은 정보를 제공하기 원한다면 표준 예외를 확장해도 좋다.우리 코드중 예외가 발생할만한 포인트인프라 이슈 -> DB/네트워크 등 오류DB 이슈https://way-be-developer.tistory.com/249JPA Exception 종류트랜젝션..

스터디 2024.12.08

Ch12. 스레드 풀과 Executor 프레임워크 - Excutor 예외 정책

생산자 소비자 문제를 실무에서 사용할 때는, 결국 소비자가 처리할 수 없을 정도로 생산 요청이 가득 차면 어떻게 할지를 정해야 한다. 개발자가 인지할 수 있게 로그도 남겨야 하고, 사용자에게 현재 시스템에 문제가 있다고 알리는 것도 필요하다. 이런 것을 위해 예외 정책이 필요하다. ThreadPoolExecutor에 작업을 요청할 때 큐도 가득 차고, 초과 스레드도 더는 할당할 수 없다면 작업을 거절한다. ThreadPoolExecutor는 작업을 거절하는 다양한 정책을 제공한다.AbortPolicy: 새로운 작업을 제출할 때 RejectedExecutionException 을 발생시킨다. 기본 정책이다.DiscardPolicy: 새로운 작업을 조용히 버린다.CallerRunsPolicy: 새로운 작업을..

Ch12. 스레드 풀과 Executor 프레임워크 - Excutor 전략

ThreadPoolExecutor를 사용하면 스레드 풀에 사용되는 숫자와 블로킹 큐 등 다양한 속성을 조절할 수 있다.corePoolSize : 스레드 풀에서 관리되는 기본 스레드의 수maximumPoolSize : 스레드 풀에서 관리되는 최대 스레드 수keepAliveTime , TimeUnit unit : 기본 스레드 수를 초과해서 만들어진 스레드가 생존할 수 있는 대기 시간, 이 시간 동안 처리할 작업이 없다면 초과 스레드는 제거된다.BlockingQueue workQueue : 작업을 보관할 블로킹 큐이런 속성들을 조절하면 자신에게 맞는 스레드 풀 전략을 사용할 수 있다.자바는 Executors 클래스를 통해 3가지 기본 전력을 제공한다.newSingleThreadPool(): 단일 스레드 풀 전..

Ch03. L4 수준 대표주자 TCP와 UDP - TCP

TCP와 UDPTCP에만 연결(Connection, Session) 개념이 있다.연결은 결과적으로 순서번호로 구현된다.연결은 상태(전이) 개념을 동반한다.TCP는 배려남, UDP는 배려가 없는 나쁜 남자에 비유할 수 있다.TCP, UDP에서 사용하는 데이터 단위는 Segment,Datagram이다.TCP는 수신측에서 항상 연결대기를 하고 있다.프로세스가 OS에 특정 포트의 Socket을 사용한다고 요청하고, 이를 허용하게 되면 Socket이 열리고 그때부터 통신이 가능하다.만약 허용되지 않은 Socket으로 요청이 오면, 운영체제 수준에서 연결을 못받아준다는 응답이 간다.TCP 연결 과정3 way Handshaking 과정에서 사용되는 데이터 단위는 Segment이다.이 과정에서 사용되는 데이터는 Pay..

Ch12. 스레드 풀과 Executor 프레임워크 - Executor 스레드 풀 관리

Executor 스레드 풀 관리ExecutorService의 기본 구현체인 ThreadPoolExecutor의 생성자는 다음 속성을 사용한다.corePoolSize : 스레드 풀에서 관리되는 기본 스레드의 수maximumPoolSize : 스레드 풀에서 관리되는 최대 스레드 수keepAliveTime , TimeUnit unit : 기본 스레드 수를 초과해서 만들어진 초과 스레드가 생존할 수 있는 대기 시간, 이 시간 동안 처리할 작업이 없다면 초과 스레드는 제거된다. BlockingQueue workQueue : 작업을 보관할 블로킹 큐작업을 보관할 블로킹 큐의 구현체로 ArrayBlockingQueue(2)를 사용했다. 사이즈를 2로 설정했으므로 최 대 2개까지 작업을 큐에 보관할 수 있다.coreP..

Ch12. 스레드 풀과 Executor 프레임워크 - ExecutorService 종료

ExecutorService의 종료 메서드ExecutorService를 줄여서 앞으로 서비스라고 하겠다. ExecutorService 에는 종료와 관련된 다양한 메서드가 존재한다. 서비스 종료void shutdown()새로운 작업을 받지 않고, 이미 제출된 작업을 모두 완료한 후에 종료한다.논 블로킹 메서드(이 메서드를 호출한 스레드는 대기하지 않고 즉시 다음 코드를 호출한다.)List shutdownNow()실행 중인 작업을 중단하고, 대기 중인 작업을 반환하며 즉시 종료한다. 실행 중인 작업을 중단하기 위해 인터럽트를 발생시킨다.논 블로킹 메서드서비스 상태 확인boolean isShutdown()서비스가 종료되었는지 확인한다.boolean isTerminated()shutdown() , shutdow..

Ch03. L3 수준에서 외울 것들 - IP

IP 헤더 형식IHL: IP Header Length 값보통 5행으로, 5 * 4Byte(32Bit)라 20Byte이다.Total Length: 최대 2의 16승까지 받을 수 있다(64KB)Flags + Fragment Offset : 단편화TTL : 최대 크기는 255이며, 이 값이 0이 되면 해당 패킷은 버려진다. (홉을 지날 때마다 감소)Protocol: 헤더를 어떻게 해석할지 판단Header CheckSum: 네트워크 송수신 과정에서 유실되었는지 확인하는 checksum 값.Header 값은 20Byte이다.Payload 값은 최대 MTU(1500 - 20 = 1480)까지 가능하다Subnet MaskSubnet Mask를 기준으로 NetID와 HostID를 구분한다.Bit 단위로 AND 연산을 ..