N+1를 해결하는 방법에 대해서는 알지만이게 정확히 왜 발생하는지에 대해서는 원인을 명확히 파악하지 못했다.한번 이를 정리해보자.JPA N+1 발생원인과 해결 방법\[JPA] N+1 문제 원인 및 해결방법 알아보기\[Spring] JPA N+1 문제에 대한 고찰. (원
우선, List와 Set의 차이를 생각해보자List는 순서가 보장되고 Set은 중복을 제거한다.영한샘은 우선 Set을 쓰면 지연 로딩 때 성능 이슈가 있다고 하셨다. 개념적으로, 지연로딩은 필요할 때 데이터를 조회한다. 그런데, Set 특성상 컬렉션에 데이터를 추가할
공간 데이터도 조회 성능 향상을 위해 인덱스를 사용할 수 있다. MySQL의 공간 인덱스는 MBR의 포함관계를 바탕으로 트리 구조를 생성하여 이용한다. MBR(Minimum Bounding Rectangle)의 약어로 최소 경계 사각형을 의미한다. 각각의 물체들을 최소
테스트 코드를 작성하다보면 commit을 하고 아예 새로운 트랜잭션을 시작해야 할 때가 있다. 이런 경우는 롤백이 되지 않으므로 내가 알아서 지워줘야 한다.EntityManager로 flush()할 때는 자동으로 롤백이 됐는데커밋한 건 롤백이 안 된다. 어떤 차이가 있
\[10분 테코톡] 🔮 수리의 TCP/IPTCP/IP는 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 프로토콜의 집합이다.어플리케이션 레이어는 특정 서비스를 제공하기 위해 애플리케이션끼리 정보를 주고 받을 수 있따. FTP, HTTP, SSH, Telnet, S
\[10분 테코톡] 🌷 코다의 Process vs Thread프로그램과 프로세스프로그램을 실행시키기 전에 단순히 실행 코드일뿐이다. 이걸 실행시키면 프로세스가 된다.이때 필요한 내용들이 메모리에 올라간다.해당 프로세스에 대한 정보를 담고 있는 PCB블럭도 생성된다.사
네트워크란 '둘 이상의 컴퓨터와 이들을 연결하는 링크 조합'이다. 단말기 간 통신을 위한 연결다리라고 생각하면 된다. 연결은 네트워크 통신을 위해선 유선/무선 연결이 필요하다. 가까운 거리는 무선으로 연결해도 속도가 괜찮지만, 국가 단위의 연결은 아직 유선 케이블을 주
출처 :https://www.youtube.com/watch?v=GAyZ_QgYYYo우선 PC 브라우저에 주소를 입력한다.주소는 URL(위치지정자)과 URI가 있다PC 운영체제가 host 파일을 확인한다. DNS 응답을 캐싱한 걸 화확인한다. 그리고 없으면 질
HTTP는 인터넷에서 데이터를 주고받는 통신 프로토콜이다. 여기에 보안 기능을 강화한 것 프로토콜이 HTTPS이다.imageHTTP는 원래 보안을 염두에 두지 않고 설계된 프로토콜이라, 모든 요청이 평문(일반 문자열)이다. 그래서 보안에 매우 취약하다. 특히 스니핑과
막연하게 암호화헤 따른 비용 때문에 HTTPS가 더 느릴 것이라고 생각했다.하지만 이번에 스터디를 하면서 새로운 내용을 배우게 돼서 공유한다.참고자료 : HTTPS는 HTTP보다 빠르다지난 2010년 이후로 HTTPS 암호화에 쓰이는 TLS는 크게 변하지 않았지만, 클
IPv4 초기엔 IP 주소가 부족하기 때문에 IP 클래스를 나누어 할당하는 방법을 택했다.하지만, 이건 비효율적었다.한 중소기업이 클래스 B를 쓰는데 65000개의 IP를 다 쓰는 게 아니고 1만개만 쓴다고 해보자.5만개의 IP를 쓰지 않는 것이다. 그렇다고, C클래스
매번 스프링 시큐리티-JWT를 사용할 때 CSFR를 막는 설정을 disable을 했다. 강의에서 그렇게 해도 된다고 했다.CSRF가 뭔지 정확하게 모르겠어서 내용을 조사해봤다.우선, CSRF(Cross Site Request Forgery)는 공격자가 이용자 권한을 도
인터넷은 애플리케이션 게층에 트랜스포크 계층 프로토콜을 제공한다. TCP와 UDP는TCP는 신뢰적이고 연결지향적인 서비스를 요청한 애플리케이션에 제공된다.UDP는 비신뢰적이고 비연결형이 서비스를 요청한 애플리케이션에 제공된다.TCP가 필요한 이유는? IP 때문이다인터넷
보통 서버가 클라이언트 인증을 확인하는 방식은 쿠키,세션,토큰 세가지가 있다. 각 인증방식을 먼저 알아보자 쿠키란? 쿠키는 Key-value형태의 문자열 덩어리다. 클라이언트가 웹사이트를 방문하면, 그 사이트가 사용하는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 파일이다. 각 사용자마다 브라우저에 정보를 저장하니 고유 정보 식별이 가능...
JWT란 무엇일까?에서 인증 방식을 정리했다.여기선 JWT를 왜 써야할지 조사한 내용을 다루겠다.우선, 세션 방식과 비교해보자.세션은 DB이든 인메모리 저장소이든 이 정보를 저장해야 한다.DB에 저장하면 매번 세션 정보를 확인할 때 DB 조회를 해야하니 DB 부하가 커
이 글을 통해서 스프링 시큐리티에 대한 생각을 좀 정리해보고자 한다. 우선, 이 글을 쓰게 된건 Spring Security 그렇게 쓰지 마세요! 라는 글을 보게 됐기 때문이다. 골자는 스프링 시큐리티를 정말 필요해서 쓰는 게 맞냐는것이다. 나는 스프링 시큐리티를
소켓은 네트워크상에서 데이터를 주고받을 때 사용하는 엔드포인트이다.TCP/IP 4계층에서 전송 계층에 놓인다.소켓이 연결되면 중간에 파이프 같은 것이 생성되고, 이를 통해서 데이터를 주고받게 된다.서버들이 데이터를 주고받이 위해서 주요한 것은 이 소켓을 먼저 만드는 것
스프링 배치에서 더티체킹을 사용하는 것은 비효율적일 수 있다.영속성 컨텍스트에서 엔티티의 스냅샷을 추적하면서 변경 사항을 확인해야 하기 때문이다.데이터를 조회할 때부터 더티체킹을 포기하는 게 좋다고 한다.아예 dto로 가져오는 것도 좋은 방법이다.주로 대량의 데이터를
여러 문서들을 참고해서 예외 처리 방법을 확인해보자위의 스펙은 아래와 같은 정보를 담고 있다.HTTP 응답 상태코드구체적인 예외 사유외의 추가할 메시지Error Handling for REST with Spring 여기서는 핸들링을 하는 방법들이 나온다.이 방법은 특정
이를 사용하면, 전역적으로 예외를 가로채서 처리할 수 있다.명확한 메시지를 보내서, 예외의 원인을 정확하게 알려주는 게 좋다. 그래야 디버깅이 용이하다. 이걸 보면, 예외를 가장 추상화가 높은 단계인 서비스단에서 한다. 그리고, 가장 낮은 단계인 글로벌 예외 핸들러에서
API 개발에만 신경을 쓰다보니 문서화에 너무 소홀했다.이제 클라이언트 개발자들이 API연결을 하는데URL이 너무 REST한 느낌이 아닌 거 같아서(사실 REST한 느낌이 뭐지 모르겠다)한번 조사를 해보고 적용해보기로 했다.Rest에 있어서 중요한 것은 "언어에 독립적
JVM은 메모리를 크게heap 메모리와 non-heap memory 두개의 카테고리로 분류한다. heap 메모리는 애플리케이션에서 생성되는 객체들이 보관되는 곳이다. 이 객체들은 더는 다른 곳에서 참조되지 않을 때 가비지 컬렉터에 의해서 회수된다.그래서, heap 메모
이번에 클라이언트 개발자분과 프로필 업데이트와 사진 업데이트, 프로필 등록과 사진 등록 API를 분리하지말고 하나로 합쳐야할지를 정하면서 Rollback의 범위가 길어지는 게 문제가 될지? 의문이 생겼다. 프로필과 사진 각각 비즈니스 로직이 복잡하다보니 유효성 검사
InnoDB는 각각의 레코드의 여러 버전(수정되기 전 버전들과 수정된 후의 버전)을 언두 로그 형태로 갖고 있는다. 클라이언트는 트랜잭션 동안에는 트랜잭션 시작 전에 커밋된 레코드, 그리고 그 이후의 변경된 버전만 보게 된다.(그 트랜잭션 내에서)트랜잭션 레벨은 4가지
데이터베이스와 한번 이상의 상호작용을 해야 한다고 해보자. 또한, 일련의 작업이 성공하거나 아니면 아예 하나라도 실패 시 모든 변화 내용이 사라지는(all or noting) 방식으로 변경되길 원한다고 해보자.이런 경우에 우리는 DB 트랜잭션을 활용한다. 트랜잭션은 작
평소에는 Let's Encrypt를 사용해서 https를 적용했다.그러다 이 두개에는 무슨 차이가 있는건지 궁금했는데 이번 기회에 정리한다.참고자료를 보면이 두개는 SSL/TLS를 관리하는 대표적인 툴이다. 주로 서비스가 소규모라면 1대의 서버에 Nginx를 설치하고
매번 정해진 대로 하다 보니까 각각의 과정에서 개념들이 어떻게 쓰이는지 잘 모르겠다. NS레코드란? AWS에서 Route53으로 호스팅 영역을 만들 때 NS레코드를 매번 만드든다. NS서버는 이름 서버로, NS 레코드는 인터넷에서 해당 도메인의 IP주소를 갖치 위
ip차단을 계속 해도 끊임없이 차단이 되면서아직 제대로 릴리즈도 안한 서버에서만 약 300개 이상의 ip가 차단됐다.이게 정상인가?.. 싶던 차에 서치를 해보니위와 같은 글이 나왔다.우선, 이렇게 차단이 되는 거를 크게 신경쓸 필요가 없다고 하는데 그 이유는라고 한다.
아파치는 NGIINX와 마찬가지로 가장 성공적인 오픈소스 웹 서버 중 하나다. 아파치가 성공할 수 있는 핵심 요인은 아키텍처 모델의 간결함이었다고 한다. 당시에는 많은 네트워크 서비스가 inetd라는 마스터 서비스에서 트리거 됐는데, 새로운 네트워크 연결(TCP)가 수
JPA-MySQL을 쓰면서 HiKariCP 설정을하게 된다.HiKariCP는 데이터베이스 연결(Connection)을 관리해 주는 라이브러리다.여기서 커넥션 풀의 숫자를 설정할 수 있다.커넥션 풀의 원리는커넥션을 미리 풀에 만들어놓고, 필요할 때마다 가져가서 쓰는 방
이번에 ADMOB을 연결하면서 서버에서 SSV라고 이용자가 실제로 광고를 봤는지 검증을 하는 과정이 필요했다.그래서, 구글에서 제공하는 규격을 따르는 URL 콜백을 만들게 됐는데이때 GET메서드이면서 헤더를 쓸 수 없다는 문제가 생겼다.즉, JWT 토큰을 헤더로 받을
CORS에 대해서 제대로 정리를 해보자.기본적으로 웹사이트 a는 웹사이트 b의 데이터를 가져오지 못한다. 그게 바로 Same-origin-policy라는 규칙이다. 웹 사이트 B가 '웹사이트 A는 내 데이터를 가져갈수 있다'고 허용할 수 있는데, 이걸 CORS(Cros
Mock을 만들 때는 세가지 방법을 쓸 수 있다.이 Mockito는 무슨 라이브러리일까?Mockito is a mocking framework for Java. Mockito allows convenient creation of substitutes of real ob
해시 자료구조는 키-값 쌍으로 이루어진 데이터 구조로, 키를 사용해서 O(1) 시간복잡도로 값을 구할 수 있다. 이때 해시 자료구조는 키를 해시 함수에 넣어서 나오는 결과를 기반으로 값을 관리한다.해시충돌은, 다른 키를 사용해서 해시 함수를 돌렸을 때 같은 결과가 나오
HTTP/1.0 HTTP/1.0은 한 개의 요청과 응답마다 TCP 커넥션을 생성하여 사용했다. 이 방식은 매 요청마다 연결을 생성하는 오버헤드가 발생한다. HTTP/1.1 HTTP/1.1은 HTTP/1.0의 여러 불편함을 해결하는 것을 목표로 했다 대표적으로 HTTP/1.0 설계에서 미쳐 고려되지 못한 부분(계층적 프록시, 캐싱, 연결 지속)을 보...
재밌는 내용을 봐서 정리해본다.Monolithic아키텍처에서는 여러 서버간에 네트워크 통신이 필요하지 않다. 서버 하나에서 메서드들을 호출하기만 하면 된다.하지만, MSA는 여러 장비에서 각각의 프로세스가 분리되다 보니 REST 통신을 통해서 각각의 프로세스가 요청-응
단일-헤드 디스크 시스템에서는 특정 데이터 블록을 읽거나 쓰려면, 헤드를 데이터가 존재하는 트랙으로 이동시키고+ 원하는 데이터가 저장된 섹터가 헤더 아래도 회전돼 올때까지 기다리는 시간+ 데이터를 전송하는 과정이 필요하다. 이 모든 과정을 수행하는 데 걸리는 시간을 디
동기와 비동기는 작업의 실행 방식을 말한다. 동기 방식은 한 작업이 끝나야만 다른 작업이 시작되는 순차적인 처리방식이다. 작업의 완료를 기다리는 동안엔 다른 작업을 수행할 수 없다. 동기 방식은 현재 실행 중인 작업이 완료될 때까지 다음 작업이 대기 상태에 있어야 하기
In its default configuration, the Spring Framework’s transaction infrastructure code marks a transaction for rollback only in the case of runtime, unc
이 고민을 하게 된 이유는소프트딜리트처럼 회원탈퇴 시점에 유저 데이터를 삭제하지 않을 경우실질적으로 리소스를 지우는 게 아니지 않나? 하는 의문이 들었기 때문이다.이에 대해 찾아보니소프트 삭제 하는경우 HTTP request method 뭐 쓰시나요? (DELETE v
이번에 스터디를 하면서 흥미로운 주제들을 발견하게 돼서 이와 관련된 공부를 해보려고 한다.테이블 관점에서, 기본키가 없는 설계는 실제로 가능하다. 실제로 many-to-many 관계에서는, 두개의 외래키만 있고 pk가 없는 경우도 있다.그렇다면, 기본키는 왜 필요할지에
DB에서 기본키를 업데이트하는 것은 가능하다.그렇다면, 이렇게 하는 게 문제는 없을까?퍼포먼스 측면에서는해당 키를 외래키로 참조할 떄, 외래키도 모두 변경해야 한다.만약, 이때 외래키에 인덱스가 안 걸려 있다면, 자식 테이블을 풀스캔해서 외래키를 찾아야 한다.이 경우
SQL은 구조화 질의 언어(Structured Query Language)로, 관계형 데이터베이스를 관리하고 조작하기 위해 특별히 설계된 표준 프로그래밍 언어다.쿼리, 업데이트, 데이터 구조 관리 등 다양한 작업을 통해 관계형 데이터베이스 관리 시스템(RDBMS)에 저
웹소켓 프로토콜은 클라이언트와 서버가 오랫동안 지속되는 연결을 통해서 동시에 데이터를 주고받을 수 있다. HTTP 폴링보다 오버헤드가 적기 때문에, 애플리케이션 실시간 기능에 활용할 수 있다.1) 양방향 통신으로, 양쪽에서 언제든지 메세지를 보낼 수 있다. 데이터를 빠
이번에 웹소켓에 대해서 공부하면서 HTTP/2.0에서 SSE 방식으로도 충분히 효율적인 실시간 채팅을 구현할 수 있음을 알게 됐다.이제 HTTP2는 양방향 스트리밍을 지원한다. 다중화(multiplexing)기능도 내장돼 있어 여러 스트림을 하나로 연결하고, 흐름제어도
Consistency와 Durability가 정확히 어떤 차이가 있는건지 감이 잘 안잡힌다.위키 백과에 따르면,지속성은 어떠한 규칙에 대한 개념으로 보인다 즉, 제약조건, cascade같은 관계에 대한 제약조건을 지키는 것을 말하는 것으로 보인다. 일관성이 지켜지지 않
만약 시퀀스 번호를 0으로 시작해서 세그먼트를 보낸다고 해보자. 다음 세그먼트 번호는 100, 세번째 세그먼트 번호는 200으로 보낸다.이때, 시퀀스 번호 100이 네트워크에서 지연되거나 손실이 됐다. 그리고 tcp연결이 종료됐다.동일한 ip:포트로 새로운 연결이 생성
UDP는 빠르지만, TCP가 제공하는 신뢰성 보장 매커니즘을 제공하지 않는다.그렇다면, 이 UDP의 신뢰성을 보완할 방법이 없을까?UDP 패킷은 전송 도중에 유실될 수 있다. 그런데, UDP 프로토콜은 패킷이 유실됐는지 확인하는 매커니즘이나, 확인 시 재전송하는 매커니
HTTP 방식은 Stateless한걸 쭉 가져가려고 한다. 이는 곧, 각 요청이 독립적이며 이전 요청과의 관계를 서버가 기억하지 않는다는 의미이다.여기서 stateless함은 프로토콜 자체가 상태를 유지하지 않는다는 말이다. 즉, 서버 애플리케이션이 클라이언트정보를 저
"401 Unauthorized"응답 코드는 요청이 authentication credentials이 없다는 의미를 나타낸다. 즉 인가에 필요한 정보를 제공하지 않았다는 것이다."403 Forbidden"은 서버는 request를 이해했지만, 그것을 수행하는 것을 거절
HTTP/1.1이후부터는 GET메서드에서 BODY를사용할 수 있게 됐다. HTTP스펙에서 GET메서드의 바디 사을 금지하진 않았지만, 이를 사용하는 건 표준적이지 않고 심지어 나쁜 결과로 이어질 수 있다.GET 요청에 바디를 넣어서 보내더라도 서버는 이를 거부할 수도
HTTPS를 인증서 없이 구축할 수 있을까?답은 '그렇다'이다.하지만, 그렇게 되면 위험하기 때문에 권고하지 않는다.인증서 없는 HTTPS를 권고하지 않는 이유는인증서는 신뢰할 수 있는 CA(Certificate Authority)가 해당 웹사이트의 identity a
MySQL 공식 문서를 보면, 세가지 상황을 살펴볼 수 있다.기본키를 정의했을 때이때는 이노디비가 기보키를 클러스터링 키로 사용한다. 기본키는 없지만, 유니크 키가 있을 때이노디비가 첫번째 유니크 키를 찾아서 해당 키를 클러스터링 인덱스로 사용한다.둘다 없을때 이노디비
TLS은 SSL의 전임자로, SSL에 새로운 이름을 붙인 것이 TLS다.공통점은두개 모두 인터넷 통신을 암호화하는 보안 프로토콜이고데이터의 개인 정보 보호, 무결성, 인증을 제공하며안전한 통신을 위해 설계됐으며같은 포트를 쓸 수 있다.차이점은개발 및 역사 SSL은 Ne
웹 서버의 연결 과정은 다음과 같다.서버는 먼저 listener 소켓을 만든다. 소켓을 생성하고, 이 소켓에 ip와 port다음으로 listen을 호출해서 클라이언트들의 요청을 들을 준비가 되었음을 나타낸다. 클라이언트는 소켓을 생성한 뒤 connect만 해주면 된다.
이 내용만 보면 요청마다 소켓이 새로 생기는 것으로 보인다. 여기서 ServeltSocket이 연결마다 소켓을 만드는 것은 맞다. 많은 프로토콜에서는 연결자체를 오랫동안 유지하는 keep-alive를 사용한다. 그러므로 기존의 연결을 재사용할 수 있으므로, 처음
Head-of-line blocking은 병목현상을 가리킨다.패킷들의 큐에서 가장 앞단에 있는 패킷이 처리되는 과정에서 그 뒤의 패킷들이 계속 기다리면서 움직이지 못하는 병목현상이다. TCP연결에서는 TCP가 메시지가 정확히 순차적으로 전달되게끔 보장하는 매커니즘 때문
TCP는 구조상 한계로 개선을 해도 느리다.특히 모바일 시대에선, 이용자가 움직이면서 네트워크 환경이 바뀌면서 TCP 연결을 새로해야한다는 문제가 발생하고 있다. 와이파이를 바꾸면 새로운 커넥션을 맺어야 하니 끊김 현상이 잦아질 수밖에 없다.또한, TCP 통신에선 패킷
데이터의 양이 수신 측에서 처리할 수 있는 양을 초과하면 송신 측에서는 수신 측에서 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하게 되므로 네트워크가 더욱더 혼잡하게 된다. 이러한 혼잡 상태를 제어하는 것을 혼잡 제어라고 한다.송신 측이 전송 rate를
DHCP는 Dynamic Host Configuration Protocol의 약자이다. DHCP란 단어 그대로 동적으로 호스트를 설정하는 규악이다.네트워크 안에 컴퓨터에 자동으로 네임 서버 주소, IP주소, 게이트웨이 주소를 할당해주는 것을 의미하고,해당 클라이언트에게
IPv4 고갈 문제를 위해서 나온 여러가지 방법들이 있다.1) NAT(Network Address Translation): NAT은 개별 디바이스에 고유한 사설 IP를 할당하고, 이를 공인 IP주소로 변환해 외부와 통신하는 방식이다. 하나의 공인 ip를 여러 사설 ip
두개는 서로 직접 통신할 수는 없다. 중간에 중계기가 필요한 것으로 보인다.이 내용을 보면 통신이 가능하려면 컨텐트, 디바이스, 네트워크 모두 동일한 표준으로 돼 있어야 한다. 통신사가 자체 인프라를 IPv6로 전환하거나 장치가 IPv6를 지원하는 것만으로는 충분하지
디폴트 설정으론, null이거나 중복된 값일 수 있다.(유니크하지 않음)외래키는 해당 필드의 값이 다른 테이블에 먼저 존재해야 한다는 제약조건을 갖는다.그렇다면 null은 무엇일까? 의미적으로 '값'이 아니라 '값을 모른다'이다.판매 제안서라는 테이블이 있다고 해보자.
유니크 칼럼은 값의 고유함을 보장함과 동시에 인덱스를 만들어 관리하는 방식이다.읽기에서는유니크 인덱스 자체로 빨라지는 건 아니다.유니크한 특성 때문에 중복 값이 없으므로, 카디널리티가 높아지고 이에 따라 조회가 빨라질 순 있다쓰기에서는유니크 인덱스는 중복된 값이 있는지
일반적으로 NoSQL은 관계형 DB에 비해서 네가지 정도의 장점을 제공한다.1) 수평확장이 가능하다:RDB와 달리 NoSQL은 수평적 확장이 가능하다.(관계형 DB는 복제본으로 확장 가능하지만, 쓰기 확장이 어렵다)2) 분산 구조가 가능하기 때문에, 장애 허용성이 높다
NoSQL은 데이터를 여러 테이블에 분산해서 저장시키지 않는다.가령, 블로그 포스팅을 생각해보자.블로그 내용, 좋아요, 스크랩, 댓글 등등 다양한 도메인이 있을 것이고 이걸 테이블 하나에 함께 저장하는 방식이다.그렇다면, 당연히 JOIN이 발생하지 않고 데이터를 모두
지속성은 트랜잭션이 커밋된 이후로, 어떤 장애가 발생해도 트랜잭션의 결과가 지속되는 걸 말한다. MySQL을 기준으로 확인해보자.1) 리두 로그(데이터 변경이 있을 때 작성) : 이노디비는 write-ahead 로깅의 일종인 리두 로그를 사용한다. 이 방식은 실제 데이
트랜잭션 경계를 설정하지 않고, 자동 커밋을 실행하면모든 sql마다 트랜잭션이 별도로 시작된다.문장마다 하나의 연결을 열고 닫는 결과를 초래한다(성능상 악영향)트랜잭션을 선언한다는 것은 1) 트랜잭션 전체를 하나의 연결로 수행하는 것이고2) 트랜잭션 간의 격리를 활용할
보통 정규화를 하다가 성능 문제(조인이 많아지니)가 발생하면 역정규화를 하는 것으로 생각하지만이건 항상 그러한 것은 아니다. 오히려 그렇게 생각하면 설계가 무너질 수 있다.좋은 설계를 위해선, 패턴이 심플하고 명확해야 한다.(이 패턴이 정규화와 부딪히더라도 이유가 있다
인덱스화 된 칼럼을 수정하게 될 때는, 그 칼럼을 포함한 인덱스를 모두 업데이트해줘야 한다. 인덱스는 정렬이 돼야 하기 때문에, 추가/삭제/업데이트 시 인덱스의 리밸런싱 과정이 필요해진다.세컨더리 인덱스도 B-Tree에 키(인덱스값)과 리프노드에 pk 포인터가 들어간다
ArrayList의 특징은 배열 공간(capacity)가 꽉 차거나, 요소 중간에 삽입을 행하려 할때 기존의 배열을 복사해서 요소를 뒤로 한칸씩 이동한다는 것이다.ArrayList의 구조는 용량이 리밋에 달하면, 보통 2배에 달하는 내부 배열이 새로 생기게 된다. 이
100명의 학생이 교실 안에 있다고 해보자. 펜이 하나 있고, 그 펜을 학생 중 한명에게 줬다.누구에게 펜을 줬는지 알아보자.학생 한명에게 가서 펜이 있는지 물어보고, 다른 99명의 학생이 펜을 갖고 있는지 일일이 물어본다. 이걸 100명에 걸쳐서 한다고 생각하면 된다
버블 정렬 인접한 두 원소의 대소를 비교하고, 가장 큰 원소를 맨 뒤로 보낸다. 위 사진을 보면 1번의 있는 막대를 뒤로 옮기면서 계속 비교하고 움직이는 걸 볼 수 있다. 즉, 모든 막대마다 다 N번 비교를 해야 하므로, 시간 복잡도는 O(N^2)이다. 이건 최악의 경우만 그런 게 아니다. 정렬이 돼 있던 아니던, 2개의 원소를 계속 비교하기 때문에 최...
VPC는 가상의 네트워크를 만드는 개념이다.사용자가 원하는 대로 IP주소 범위를 선택하고, 서브넷을 생성하는 등의 작업을 할 수 있다.먼저 아마존의 인프라에 대해서 한번 알아보자.AWS 글로벌 인프라는 리전(Region), 가용영역(AZ), 엣지 로케이션, 리전 엣지