본문 바로가기

전체 글

(46)
[데이터베이스] 인덱스란 무엇인가? 인덱스란?데이터베이스에서의 조회 성능을 끌어올려주기 위한 기능이다.인덱스란 직역 하면 색인인데 즉, 원하는 빠르게 데이터를 찾기 위해 먼저 찾아보는 목차 같은 느낌이다. 인덱스가 없는 경우에는 FTS(Full Table Scan)로 데이터베이스의 모든 항목을 순차적으로 스캔하여 원하는 데이터를 찾는다. 듣기만 해도 오래 걸릴 거 같은 방식이다.인덱스 알고리즘B-Tree ( Balanced Tree )인덱스 종류클러스터링 인덱스데이터베이스의 실제 데이터 자체가 정렬되고 그에 대한 인덱스가 생성되는 방식이다.얘는 실제 데이터는 하나이기 때문에 클러스터링 인덱스 또한 테이블 당 하나씩만 존재한다.보통은 Primary Key 필드에 자동으로 생성된다. 15를 찾는 상황이 있다. 인덱스 중 10에 접근해서 10 ..
[네트워크] HTTP와 HTTPS의 대해 자세히 알아보자 HTTPHyperText Transfer Protocol로 약자로 웹에서 데이터를 주고받기 위해 사용되는 프로토콜이다.HTTP는 단순히 데이터를 전송하기 위한 프로토콜이기에 취약점이 다수 존재한다. 먼저, 데이터가 평문 형태로 전송되기에 중간에 누군가가 데이터를 들여다볼 수도 있고, (스니핑)누군가 요청을 가로채서 데이터를 악의적으로 변조해도 이를 검증할 방법이 없다. (중간자공격) 이 문제점을 해결하기 위해서 새로 나온 프로토콜이 HTTPS이다.HTTPSHTTP + Secure로 HTTP의 보안 취약점을 해결하기 위해 나온 프로토콜이다.SSL/TLS 프로토콜을 이용하여 데이터를 암호화하여 전송하고, SSL/TLS 인증서를 이용해 웹 사이트의 신뢰성을 검증할 수 있다. SSL/TLS를 이용한 데이터 암호..
[Java] JVM과 Garbage Collection Garbage Collection이란?JVM의 메모리 영역 중 Heap 영역에 동적으로 할당된 메모리 중 더 이상 사용되지 않는 메모리를 찾아 제거하는 과정이다.Heap 영역에 동적으로 할당되는 메모리들은 참조 타입의 변수의 데이터이다. Object 클래스를 상속받는 모든 아이들, 간단하게 객체라고 생각하면 된다.Garbage Collecion 동작 과정GC가 동작하면 메모리 영역을 스캔하며 각 객체가 Garbage Collection의 대상의 Reachable 여부를 판단한다.여기서 Reachable이란 객체가 참조되고 있는 상태이다.아무 곳에서도 참조하고 있지 않는 객체는 가비지 컬렉션의 대상인 Unreachable이고 스캔 이후 이러한 Unreachable 객체의 할당을 해제한다.이후 마지막으로 메..
DTO에 Getter가 필요한 이유 직렬화, 역직렬화에 필요하기 때문
RESTful API에 대해 정리해둔 글 URI 명명 규칙대문자는 사용하지 않는다.URI 경로 끝에 '/' 를 쓰지 않는다.URI 경로 중에 이름이 너무 길어지는 항목에 대해서는 '-'를 이용해서 가독성을 높인다.
EC2 프리티어 인스턴스 spring boot 프로젝트 빌드 후 대폭발 돌려야할 프로세스가nginx 서버node.js 서버(next.js)tomcat 서버(spring boot)mysql 서버이렇게 있다. AWS, GCP 알뜰살뜰하게 무중단 무료 배포를 위해서 각각에 인스턴스를 하나씩 띄워서 배포해볼 생각이다.일단 MySQL은 Google Cloud Platform에 Cloud SQL로 운영 중이다.남은 프론트와 백엔드 서버를 AWS의 EC2 하나에 띄워야되는데, 아니 이게 nginx랑 빌드된 next.js는 잘 실행이 되었는데, 스프링 프로젝트가 gradle로 빌드하면 인스턴스가 그냥 그자리에 선채로 죽어버린다. jvm이라 그런지 무거운 거 같다.보니까 이거는 빌드를 EC2에서 하면 안될 거 같고, 빌드된 파일을 EC2로 옮기는 식으로 바꿔야될 거 같다. 여간 귀찮아진 일..
[SNS 프로젝트] JPA 연관관계 매핑 실수 게시글 테이블(Post)의 id 값 JPA에서 생성전략을 IDENTITY로 설정해 두었고, 실제 MySQL에 테이블 생성 이후, auto_increment로 설정이 되어있는 것도 확인을 했다.근데 사용자가 게시글을 작성한 이후에 두 번째 게시글을 작성하려 하니 자꾸 duplicated entry 오류를 뱉었다.게시글 작성 로직이었기에 매번 Post 객체를 새로 생성해서 영속성 캐싱 문제일 확률도 없을 텐데 혹시 몰라 save() 이후에 flush()도 해보고 auto_increment도 수동으로 설정해 보고 별짓을 다 했다.  아래는 문제의 소스코드(이상한 점을 눈치챈 사람이 있나요?)duplicated entry 오류가 발생하던 부분이 알고보니 기본키가 아니라 user_id 외래키가 1대 1로 매핑되어..
[Docker] 도커란 무엇인가? 그리고 컨테이너, 이미지 핵심 개념 정리 도커란 무엇인가?기본 개념은 컨테이너(리눅스 컨테이너) 생성 및 관리 도구이다.그냥 일단은 간단하게 독립된 환경에 애플리케이션과 그가 동작하기 위한 모든 것을 묶어두기 위해 사용되는 기술이라 생각하자.도커를 쓰는 이유?먼저 다음과 같은 상황이 있다고 생각해 보자.다양한 의존성이 있는 개발 환경에서 개발을 했고 이제 서버에 배포만 할 일이 남아있다. 내가 로컬에서 돌릴 때 사용했던 애플리케이션들과 의존성을 서버에도 전부 설치를 해야 되는데 일일이 다 설치할 것인가?개발자 여럿이서 하나의 프로젝트를 진행하는데 각 개발자 마자 버전이 일치하지 않는 경우 동일한 버전으로 전부 맞춰야 한다. 일일이 맞출 것인가?이와 같은 상황은 개발 환경이 로컬 개발 환경에 의존되어 있고 이를 다른 곳에서 돌릴 때 환경이 불일치..