영속성 컨텍스트란? 영속성 컨텍스트는 JPA(Java Persistence API)에서 엔티티의 생명주기를 관리하고 저장소처럼 엔티티를 캐싱하는 역할을 하는 메모리 공간이다. 이 컨텍스트는 엔티티 매니저(EntityManager)에 의해 관리되고, 애플리케이션에서 데이터베이스로의 접근을 효율적으로 제어한다. 카페로 예를 들어 보겠다.매일 같은 시간에 A는 아이스 아메리카노를 시킨다고 가정하자. 카페에 가서 A가 "아이스 아메리카노 한 잔 주세요"라고 주문한다. 이때 바리스타는 주문한 것을 기억하기 위해 메모를 하거나 POS 시스템에 입력한다. 다음 날 같은 카페에 다시 갔는데 지난번과 같은 바리스타가 일하고 있다. A가 또 "아이스 아메리카노 한 잔 주세요"라고 주문하려고 하니까, 바리스타가 "아, 지난..
Thread란 무엇일까?스레드는 프로세스 내에서 실행되는 독립적인 흐름을 의미한다. 하나의 프로그램(프로세스)이 여러 작업을 동시에 할 수 있게 해주는 기능이다. 예를 들어, 음악을 들으면서 문서 작업을 할 때 각각의 작업이 스레드로 실행된다고 생각할 수 있다. 애플리케이션이 하나의 프로세스가 되고, 그 안에서 여러 개의 스레드가 할당받은 자원을 이용하여 실행 단위로 존재할 수 있다. 즉 스레드는 하나의 프로세스 안에서 여러 실행의 흐름이라고 생각하면 된다. 자바에서 Thread란?자바에서 스레드는 Thread 클래스나 Runnable 인터페이스를 사용해 구현할 수 있다. Thread 클래스를 상속받아 직접 스레드를 생성하거나, Runnable 인터페이스를 구현한 클래스를 Thread 생성자에 넘겨서 스..
B-Tree 인덱스란?B-Tree 인덱스는 MySQL에서 가장 널리 사용되는 인덱스 타입이다. B-Tree는 데이터가 정렬된 상태로 저장되어 있다. 그래서 삽입과 삭제 시 정렬이 필연적으로 발생하게 된다. 노드의 자식들의 위치가 정해져 있어서 범위 검색에 유리하다. B-Tree의 구조는 루트노드, 브랜치 노드, 리프 노드로 구성되며, 각 노드는 여러 개의 키를 가질 수 있다. B-Tree 인덱스는 특히 범위 검색이 자주 필요한 경우에 적합하다. 예를 들어, 날짜 범위 내의 데이터를 검색하거나 특정 값보다 크거나 작은 값을 찾을 때 효과적이다. 또한, B-Tree 인덱스는 기본적으로 정렬된 상태를 유지하기 때문에, ORDER BY 절이나 GROUP BY 절을 포함한 쿼리에서도 이점을 가질 수 있다. 하지만..
프로젝트를 하며 yml과 같은 민감한 정보들을 안전하게 관리하도록 서브모듈을 사용하기로 결정하였다.1. SubModule이란?SubModule은 Git에서 제공하는 기능으로, 외부 라이브러리나 다른 프로젝트를 현재 레포지토리에 포함시킬 수 있는 기능이다. 덕분에 코드 중복 없이 다른 프로젝트의 코드를 가져다 쓸 수 있다.2. 왜 SubModule을 사용했을까?다양한 프로젝트를 진행하면서, 데이터베이스 설정 정보 같은 민감한 정보를 여러 레포지토리에서 중복 없이 관리하고 싶을 때가 있다. 이럴 때 SubModule을 사용하면, 중요한 정보들을 Private 레포지토리에 저장해 두고 필요한 메인 레포지토리에서 쉽게 가져와 쓸 수 있다. 이렇게 하면 실수로 중요한 정보를 공개하는 상황을 방지할 수 있다.3. ..
팀원들과 간단한 자기소개 웹 페이지를 만들기로 했습니다. 이전에는 배포 서버를 활용하여 통신을 하였지만 서버 없이 해결해야 하는 문제 상황이 발생하였습니다.1. 문제 발생배포 서버 없이 DB의 데이터를 리소스에 있는 프론트엔드로 전달하는 방법을 전혀 알지 못했습니다. 기존에는 배포 서버를 통해 프런트엔드와 통신했기에, 서버가 없는 상황에서 데이터를 어떻게 주고받아야 할지 난관에 부딪혔습니다.2. 해결책 탐색JSON 통신 시도: 이전에 해왔던것 처럼, JSON을 통해 데이터를 주고받는 방법을 먼저 시도했습니다. 포스트맨을 사용해 원하는 결과가 나오는 걸 확인했지만, 결과적으로 실패했습니다. 분명히 해결 방법이 있을 거라 생각하고 다른 접근을 고민하게 되었습니다.타임리프와 @Controller 사용: 이전에..
1. HTML이 갑자기 궁금해진 과정대학교 1학년 때 HTML과 CSS를 공부한 이후로는 한동안 사용하지 않았습니다. 그런데 최근에 HTML과 CSS를 사용할 기회가 생기면서, 제가 작성한 HTML이 웹 브라우저에서 어떻게 동작하는지 문득 궁금해졌습니다. 그래서 오늘의 TIL에서는 HTML이 웹 브라우저에서 어떻게 작동하는지 알아보겠습니다.2. HTML이란 무엇일까?HTML은 Hypertext Markup Language의 약자로, "마크업" 언어입니다.3. 그렇다면 마크업 언어란 무엇일까?마크업 언어는 정보를 "기록"하거나 "설명"하기 위한 언어로, 자바와 같은 “소프트웨어”를 만드는 프로그래밍 언어와는 다릅니다.4. 마크업 언어와 비슷한 이름 “마크다운 언어”HTML과 비슷한 개념으로 노션이나 Git..
제가 Spring 트랙에 참여한 계기는 무엇인가요?심도 있는 학습과 기록하는 습관을 들이기 위해 참여하게 되었습니다. 또한, 개발자로서의 역량을 더욱 강화하고 싶었습니다.제가 이해한 개발자는 어떤 역할을 하는 사람인가요?개발자는 현실 세계에서 발생하는 불편함이나 문제를 해결해주는 소프트웨어를 만드는 사람입니다. 이를 통해 사람들의 삶을 더 편리하게 만들어주는 중요한 역할을 한다고 생각합니다.개발을 경험해보셨나요? 해보셨다면 어떤 경험을 하셨는지를 작성해주시고, 아니라면 개발에 대해 찾아본 것을 작성해주세요.3가지 프로젝트를 진행해보았고, 대외활동(해커톤)에 참여하여 수상한 경험도 있습니다.개발자의 역할을 수행하는 데에 있어 나의 강점과 연관된 부분은 무엇이라고 생각하나요? 혹은 보완, 개선하고 싶은 개인..
저희 곽두철 프로젝트에는 카카오 소셜 로그인만을 이용하기로 결정했었습니다.하지만 추후에 네이버, 구글 등등 다양한 플랫폼이 추가될 것을 고려해 추상화를 하도록 결정이 났습니다.이번 포스트에서는 카카오를 중심으로 글을 써보겠습니다.1. 왜 전략 패턴을 사용할까?소셜 로그인을 구현할 때, 카카오, 네이버, 구글 등 여러 제공자의 로그인 방식이 각각 다릅니다. 각기 다른 로그인 로직을 하나의 서비스에 담아두면 코드가 복잡해지고 유지보수가 어렵습니다. 전략 패턴을 사용하면 각 소셜 로그인 로직을 별도의 클래스로 분리하여 코드의 확장성과 유지보수성을 높일 수 있습니다.1-1. 전략 패턴의 장점?전략 패턴을 사용하면 런타임에 다른 소셜 로그인 로직으로 쉽게 교체할 수 있어 유연한 구조를 가질 수 있습니다.예를 들어..
개발자로서 엔티티 클래스를 생성할 때, 저는 습관적으로 @NoArgsConstructor 어노테이션을 사용해 왔습니다.하지만 왜 사용하는지, 그리고 액세스 레벨을 왜 특정 값으로 설정하는지 명확히 알지 못한 채 사용해 왔습니다.이번 글에서는 @NoArgsConstructor의 역할과 액세스 레벨을 PROTECTED로 설정하는 이유를 정리해 보겠습니다. @NoArgsConstructor란?@NoArgsConstructor 어노테이션은 Lombok 라이브러리에서 제공하는 기능으로, 기본 생성자를 자동으로 생성해 주는 역할을 합니다. @NoArgsConstructor의 액세스 레벨@NoArgsConstructor 어노테이션에는 다양한 액세스 레벨을 설정할 수 있습니다. 이들은 다음과 같습니다:PUBLICPRO..
지금까지 저는 Redis는 Single Thread라고 알고 있었습니다.그리고 Single Thread라 Atomic 해 동시성을 보장할 수 있다고 생각하였습니다. 하지만 여러 글들을 보니 Redis는 Single Thread로만 이루어진 게 아니라고 합니다왜냐하면 Redis 6.0부터 추가된 ThreadedIO가 추가되면서 사용자 명령이 Multi Thread로 동작하기 때문입니다. ThreadedIO가 적용되는 부분은 다음과 같습니다.클라이언트가 전송한 명령을 네트워크로 읽어서 파싱 하는 부분명령이 처리된 결과 메시지를 클라이언트에게 네트워크로 전달하는 부분 이제, Redis 내부 사진을 보며 하나하나씩 이해해 보겠습니다. 먼저 클라이언트의 Socket이랑 Redis의 Socket이랑 연결을 한다..