C.S 15

개략적인 시스템 규모 추정

데이터의 크기 추정 2의 제곱수와 데이터의 크기 - 보통 1바이트가 1개의 문자 문자열의 크기와 종류 문자열은 문자의 연속된 시퀀스로, 텍스트 데이터를 표현하는 데 사용됩니다. 문자열을 저장하는 방법은 사용하는 문자 인코딩에 따라 달라집니다. ASCII (American Standard Code for Information Interchange) ASCII는 7비트 인코딩 시스템으로, 128개의 가능한 문자를 정의합니다 (0-127). 이는 기본적인 영문자, 숫자, 일부 특수문자를 포함합니다. 각 ASCII 문자는 1바이트 (8비트)를 사용하지만 실제로는 7비트만 사용합니다. ISO-8859-1 (Latin-1) ISO-8859-1은 ASCII를 확장한 8비트 인코딩으로, 추가적인 128개의 문자를 포함..

C.S/System Design 2024.04.16

HTTP 쿠키와 web storage에 대하여

기본 동작 및 설명 Cookie는 웹 브라우저와 웹 서버 간에 정보를 교환하는 작은 데이터 조각입니다. 이 정보는 클라이언트 측에서 관리되며, 주로 세션 상태를 유지하거나 사용자 개인화에 사용됩니다. 1. 서버는 쿠키가 필요하다고 판단하면 set-Cookie : user ~~ response 헤더를 만들어서 넣어준다. 2. 클라이언트는 쿠키를 쿠키저장소에 저장하고 다음부터 모든 request에 쿠키를 자동으로 보내도록 한다. 3. 언제나 다 보낼 수도 없고 보안도 문제가 있다. 따라서 아래와 같이 제약사항을 설정해야 한다. Set-Cookie: user_id=123; Expires=Sat, 01 Jan 2023 00:00:00 GMT; Max-Age=604800; Path=/; Secure; HttpOn..

C.S/WEB 2023.12.09

TCP/IP 송수신 과정

1. Server 송신 과정 ex) 메모리는 64KB , 실제 데이터는 1.4 mb 일 때 64KB씩 잘라서 프로세스가 진행 1. 64KB씩 분해해서 소켓에 작성하는데 프로세스 메모리에 적재된 데이터를 TCP 메모리 (버퍼)에 적재함 서버에서는 소켓을 가지게 됨 - 소켓은 파일 - 서버는 프로세스 프로세스가 파일(소켓) 에다가 RW (읽고 쓰기) - 읽기 : recieve - 쓰다 : send 서버 프로세스가 소켓에 I.O를 한다. HDD/SDD 등 2차 메모리 안에 파일이 들어있음 파일 시스템(ex:a.jpeg) 으로 관리됨 파일 시스템은 드라이버를 통해 메모리에 접근 프로세스별로 메모리를 할당 받는데 해당 사이즈는 개발자가 결정 2. 해당 버퍼를 IP Layer에서 세그먼트 단위로 분해함 3. 세그먼..

C.S/O.S 2022.11.20

Oracle NL조인

NL 조인은 기본적으로 이중 중첩 루프문 SELECT /*+ no_nlj_batching(B) */ * FROM EMP A,CLIENT B WHERE A.EMPNO = B.CLNO AND A.HIREDATE > '20200101'; (1) SELECT * FROM A WHERE A.date>'20110101'의 조회를 수행하면서 해당 엔티티가 존재하면 A.id를 가짐 (2) SELECT * FROM B WHERE B.id = N( (1)에서 조회한 A.id ) 위와 같은 방식으로 조회를 수행하게 된다. 때문에 2번 수행의 경우 인덱스 스캔을 하지 않는다면 A테이블에서 조건을 만족하는 엔티티 만큼 B를 테이블 스캔하게 되므로 반드시 내부테이블은 인덱스 스캔을 수행해야 한다. A 테이블을 outer tabl..

C.S/DB 2022.10.10

암호화와 SSL 인증 방식

암호화 : 중간에서 누군가가 읽을 수 없게 변경 복호화 : 암호화 이전의 데이터로 변환 키 : 암호화,복화화를 위한 키 1. OpenSSL 대칭키 생성 예시 대칭키 : 암호화를 하는 쪽과 복호화를 하는 쪽이 동일한 키를 가지고 있어야함 openssl enc -e -des3 -salt -in hello.txt -out nohello.txt => key 입력 openssl enc -d -des3 -in nohello.txt -out hello2.txt => key 입력 2. openssl 비대칭 키 예시 비대칭키 : 키가 2개 , 키를 배달하는 사고가 일어나지 않음 공개키 , 비밀키 A로 암호화 시 B로 복호화 가능 B로 암호화시 A로 복호화 가능 공개키로 암호화한 내용은 개인키로만, 개인키로 암호화한 내용..

C.S/WEB 2022.07.16

Oracle 파티션 테이블과 파티션 인덱스 (INSERT 튜닝)

Oracle Partition UPDATE 튜닝 정리 대용량 데이터를 입력할 때 성능 문제가 발생할 수 있어서 인덱스를 DROP 하고 데이터를 입력 후에 데이터가 모두 입력시킨 다음 인덱스를 재생성해주는 방법을 고려할 수 있다. 그러나 전체 데이터에 대한 인덱스를 재생성하는 비용도 적지 않기 때문에 쉽게 선택 할 수 없다. 만약 테이블이 파티셔닝 되어있고 이에 대해서 로컬 파티션 인덱스가 생성되어 있다면 파티션 단위로 인덱스를 재생성할 수 있기 때문에 데이터 입력을 빠르게 수행할 수 있다. 1. 작업 대상 테이블 파티션을 nologging 모드로 전환한다. ALTER TABLE INFO_TABLE MODIFY PARTITION P_202201 nologging; 2. 작업 대상 테이블 파티션과 매칭되는 ..

C.S/DB 2022.07.06

Oracle 파티션 테이블과 파티션 인덱스 (DELETE 튜닝)

Oracle Partition DELETE 튜닝 정리 DELETE FROM INFO_TABLE WHERE TIME < '20220101' (INFO_TABLE은 파티션 키는 TIME이며 PK는 VALUE1+TIME , TIME만 으로 구성된 인덱스도 존재) 위의 테이블에서 테이블과 인덱스를 실시간으로 관리하는 것은 많은 시간을 필요로 한다. 인덱스를 Drop 했다가 재생성하는 방법도 모든 인덱스를 재생성해야 하므로 시간이 많이 소요된다. * Delete의 과정 1. 레코드 삭제 2. 테이블 레코드 삭제에 대한 Undo Logging 3. 테이블 레코드 삭제에 대한 Redo Logging 4. 인덱스 삭제 5. 인덱스 레코드 삭제에 대한 Undo Logging 6. 인덱스 레코드 삭제에 대한 Redo Lo..

C.S/DB 2022.07.06

Oracle 파티션 테이블과 파티션 인덱스 (UPDATE 튜닝)

Oracle Partition UPDATE 튜닝 정리 인덱스가 DML 성능에 큰 영향을 미치므로 대량 데이터를 입력/수정/삭제 시에는 인덱스를 DROP하거나 Unusable 상태로 변경하고 작업하는 방법을 많이 활용한다 (전체의 5%이상일시) UPDATE INFO_TABLE SET VALUE2='CHANGE' WHERE VALUE1 = 'Y' AND TIME '20211130' (INFO_TABLE은 파티션 키는 TIME 이며 PK 는 VALUE1+TIME , TIME만 으로 구성된 인덱스도 존재) 위와 같은 쿼리를 수행할시 변경해야될 레코드가 전체의 5%이상이라고 할시 인덱스와 테이블을 모두 수정하는데에 많은 시간이 필요하다. 만약 위의 경우에서 테이블이 파티..

C.S/DB 2022.07.06

Oracle 파티션 테이블과 파티션 인덱스

Oracle Partition (1) 파티셔닝 : 테이블 또는 인덱스 데이터를 특정 컬럼에 따라 별도 세그먼트에 나눠서 저장 1. 관리적 측면 장점 : 파티션 단위 백업,추가,삭제,변경 -> 가용성 향상 2. 성능적 측면 장점 : 파티션 단위 조회 및 DML 경합 또는 부하 분산 * 파티션 Pruning SQL 하드파싱이나 실행시점에 조건절을 분석하여 불필요한 부분의 제거 SELECT * FROM INFO_TABLE WHERE TIME >'20210101' AND TIME < '20220101' 위의 SQL INFO_TABLE이 전체 3000만건 중 해당 기간동안의 데이터가 1000만건이 조회된다고 하면 인덱스로 랜덤엑세스하는것 보다 테이블엑세스의 성능이 나을 수 있다. 그러나 위의 Partitioned..

C.S/DB 2022.07.05

HTTP 캐시

HTTP 캐시 반복된 요청에 대해서 리소스를 다시 다운로드 받지 않도록 브라우저 스토리지에 저장된 데이터를 사용하도록 하는 기법 캐시를 저장하는 시간안에 다시 같은 요청이 올 시 저장된 데이터를 사용함 데이터 사용량을 줄이고 데이터 전송 속도를 높일 수 있음 캐시 시간이 초과되면 다시 데이터를 보내주고 캐시 유효시간이 갱신되고 다시 캐시시간이 조회된다. 캐시를 갱신하는 기준이 필요함 검증 헤더와 조건부 요청 캐시가 시간초과과 되었을 시라도 데이터가 변경되지 않을 수 있음 클라이언트와 서버의 데이터가 일치한다는 사실을 확인 할 수 있는 방법이 필요함 1) Last Modifed 1. 클라이언트의 리소스 요청에 따라 서버측에서 Last Modified : UTC (20201112010101) 이라고 보냄 2..

C.S/WEB 2021.03.03