목록Dev (19)

Thread Safe 란? 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없는 것을 의미한다. 이는 하나의 메소드가 한 스레드로부터 호출되어 실행중일 때, 다른 스레드가 그 메소드를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 메소드 수행 결과가 올바르게 나오는 것으로 정의한다. Thread Safe 는 여러가지 형태로 구현할 수 있다. Re-Entrancy: 재진입성 어떤 메소드가 한 스레드에 의해 호출되어 실행중일 때, 다른 스레드가 그 메소드를 호출하더라도 그 결과가 각 스레드에게 올바른 형태로 반환되어야 한다. Mutual Exclusion: 상호 배제 공유자원을 꼭 사용해야 할 경우 해당 자원의 접근..

인덱스란? 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조다. 보통 책의 색인과 비슷한 기능을 한다. 색인은 책의 저자들이 책의 맨 앞 또는 맨 뒤에 특정 내용의 페이지를 적어둔 것이다. 인덱스 또한 데이터베이스의 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조다. 데이터베이스에서 인덱스를 사용하면, 데이터를 검색할 때 인덱스를 사용하요 검색 대상 레코드의 범위를 줄일 수 있다. 대량의 데이터를 다루는 경우 데이터 검색 속도를 크게 향상시킨다. 인덱스를 활용하면 조회 쿼리 이외에도 수정 및 삭제 쿼리의 성능 또한 함께 향상된다. 만약 인덱스를 사용하지 않은 컬럼을 조회해야 한다면 톄이블의 데이터를 모..

TCP 3-way Handshake 란? TCP 는 장치들 사이에 논리적인 접속을 성립하기 위하여 3-way handshake 를 사용한다. 3-way handshake 는 TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다. [STEP 01] 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 이 떄 A클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다 [STEP 02] 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN Flag 가 설정된 패킷을 발송한다. 이후 클라이언트가 다시 ACK로 응답하기를 기다린다. 이떄 ..
Hyper Text Transfer Protocol 브라우저와 서버가 통신할 수 있도록 만들어주는 여러 프로토콜 가운데 한 종류로 웹 브라우저와 웹 서버 사이에 데이터를 주고 받는데 사용되는 통신 초기에는 HTML 문서를 전송하기 위한 목적으로 만들어졌으나 지금에서는 Json 및 Image 파일 등 여러 형태의 데이터를 주고받을 수 있게 됐다. 특징 HTTP 는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 동작한다. 브라우저에서 URL을 입력하고 조회하면 DNS 서버가 URL의 IP를 찾아 해당 IP의 서버와 TCP 연결을 맺고, 이후 HTTP 요청/응답이 발생한다. ❓TCP/IP 란? 일반적으로 전송 계층 프로토콜로 TCP 를 사용하고, 네트워크 계층 프로토콜로 IP 를 사용하는데 이 두 계층을 ..

🎬Transaction? Transaction 이란? 여러 읽기 쓰기 단위를 논리적으로 하나로 묶은 것을 의미한다 트랜잭션이 시작되면 한 개 이상의 쿼리가 실행되고 결과를 커밋하여 DB에 반영하거나 롤백하여 반영을 취소한다 🎞Transaction의 범위 Transaction의 범위는 Connection을 기준으로 한다 위의 그림을 예시로 들었을 때, Connection_01에서 Rollback이 발생하더라도 Connection_02에서 수행된 Transaction은 이미 Commit이 되었기 때문에 Connection_02에서 발생한 Tx의 결과는 Rollback이 되지 않는다 🎇Transaction Propagation 위와 같은 문제를 해결하기 위해 나온 것이 바로 트랜잭션 전파다 여러 메소드 호출이..

이번글은 정보를 정리한 포스트가 아닌 에러를 해결하는 과정에서 새롭게 알게 된 사실을 정리한 글이다. 기존에 진행하던 프로젝트들은 하나같이 JWT를 사용하여 인증을 진행했다. JWT를 사용한 인증 방식을 선택한 것에 이유를 대자면 여러가지 이유를 댈 수 있겠지만, 가장 큰 이유로는 최근의 Spring Security 관련된 블로그 포스팅 혹은 강의를 살펴보면 대부분이 JWT 방식을 채택했기 때문일 것이다. 하지만, JWT 방식이 장점만을 가지고 있는 것은 아니기에 또 다른 인증 방식인 Session 방식 또한 시도해보기로 결정했다. 아주 예전부터 주식을 취미로 해오고 있던 나였기에 주식과 관련된 프로젝트를 진행해보고 싶었고, 마침 MSA 에 대해 간단하게 공부하며 RestTemplate 를 사용하는 방법..

Redis (Remote Dictionary Server) Remote : 원격 접속 혹은 원격 서비스를 지원하는 것을 일컫는다. Redis 는 기본적으로 로컬 환경에서 실행되지만, 해당 기능을 통해 원격 서버에 있는 Redis 인스턴스에 접속하여 데이터를 읽고 쓰는 것이 가능하다. Dictionary : Key-Value 구조로 데이터를 저장한다는 것을 의미한다. 이로 인해 여타 RDBMS 처럼 쿼리 연산을 지원하지 않지만, 단순한 데이터 저장 구조 덕분에 빠른 데이터 읽기와 쓰기가 가능하다. In-Memory : Redis 는 여타 데이터베이스처럼 디스크(SSD)에서 데이터를 처리하는 방식이 아닌, 메모리에서 데이터를 처리하기 때문에 디스크에서 데이터를 다루는 데이터베이스들과 비교했을 때 우월한 작업..

개요 Java 8 부터 JVM 의 Runtime Data Area 에 변화가 생겼는데, Java 8 이전 버전까지 존재했던 Permanent Generation 메모리 영역이 사라지고 Metaspace 영역이 새로 생긴 것이다. 아래가 그 변화를 가장 잘 나타내주는 그림이라고 볼 수 있다. 위 그림을 보면 마치 Permanent Generation 의 역할을 Metaspace 가 대체하는 것처럼 보일 수 있다. 지금 글을 작성하고 있는 본인도 Metaspace 가 단순히 Permanent Generation 을 대체하는 것인지에 대한 의문이 들어 여러가지 자료들을 찾아보았고, 그 결과를 정리하기 위해 이 글을 작성한다. 모든 기술 블로그가 그러하듯, 본인의 블로그도 틀린 점이 존재할 수 있기에 무조건적인..

Summary 이 글은 Spring Security와 JWT를 사용하여 웹 사이트 보안을 강화하는 방법에 대한 내용을 다룬다. 우선 JWT의 개념과 Spring Security에서 JWT를 검증하는 방법, 그리고 웹 사이트 공격 종류와 JWT를 통해 이에 대비하는 방법에 대해 알아보자. JWT (Json Web Token) JWT(Json Web Token) 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격으로 주로 사용자의 인증(Authentication) 또는 인가(Authorization) 정보를 서버와 클라이언트 간에 안전하게 주고 받기 위해서 사용된다. JWT의 특징 두 개체에서 JSON객체를 사용하여 자가수용적(self-contained) 방식으로 정보를 안전성 있게 전달한다. 자가수용적..