전체 글 26

2026. 01. 16

프로젝트가 마무리가 되어간다. 그런 와중 네이티브 쿼리문이 점점 복잡해져 무언가 해결을 해야한다고 생각할때, QueryDSL 를 도입하기로 결정하였다. 물론 나는 기본적인 쿼리도 잘 못 작성하기에 걱정이 되었다. 그래서 조금이나 공부한 점을 여기에 작성하려고 한다 BooleanBuilder동적 쿼리를 만들기 위한 도구다. 예를 들어서 사용자가 검색창에 아무것도 입력하지 않았을 때와 검색어를 입력했을때 실행되어야하는 조건절을 달라야할때 사용할 수 있다. 복잡하게 if 문 등으로 SQL를 짜지 않아도 조건이 있을때 블록을 끼워넣는 깔끔한 방식으로 해결할 수 있게 해준다 @Overridepublic Page findPeerQuestsForVerification(List peerIds, QuestStatus s..

TIL 2026.01.16

2025. 07. 25

나는 이번 프로젝트를 친구와 함께 진행하면서 하나의 문제에 당면했다. 바로 백엔드 서버에서 이미지를 어떻게 관리할 것인가에 대해서다. 하지만 나는 그전 프로젝트인 단축 URL 프로젝트에서는 이미지를 관리할 일이 없었기에 여러 고찰이 필요했다. 어떤식으로 이미지를 저장하는 것이 좋을까? 찾아보고 장단점을 알아보았다. 데이터 베이스에 저장하자 기본적으로 생각해 볼 수 있는건 데이터베이스에 이미지를 포함시켜 백엔드 서버에서 트랜잭션 단위로 관리할 수 있을 것 같다. 알아보니 이미지 파일을 바이너리 데이터로 저장하고, 파일에 직접 데이터를 삽입하여 사용한다고 한다. 직관적으로 사용할 수 있는 방법인데 잘 사용하지는 않는다고 한다 왜일까? 일단 기본적으로 DB의 용량이 증가하면 그에 따라 당연하게도 성능 저하로 ..

TIL 2025.07.25

2025. 06. 05

리그오브레전드 프로게이머에 대한 데이터베이스를 설계하고 조회할 수 있게하는 서비스를 만들고 있었는데, 이런 정보들을 효율적으로 검색하고, 필터링을 할 수 있는지에 대해 궁금해졌다. 그리고 Elasticsearch에 대해서 알게 되었다. 일라스틱 서치는 JSON 기반의 REST API 로 데이터를 검색하고 분석 할 수 있다고 한다. 일라스틱 서치는 내가 진행하는 프로젝트에는 이러한 이점을 줄 수 있다. 대량의 텍스트나 메타데이터를 검색할 때 도움을 줄 수 있다고 한다. 선수 이름이나 팀 이름, 아니면 닉네임이나 개인 프로필 등으로 풀텍스트 검색이 가능해진다. 예를 들어 부분적인 검색이나 오타를 교정하거나 유사한 것들을 검색 가능하게 해준다. 특정 시즌에서의 성적, 범위적으로 필터링도 가능하다. 새로운 프로..

TIL 2025.06.05

2025. 05. 01

최근에 친구의 프로젝트를 하게 되면서 복합키를 아주 많이 접하고 작성하게 될 일이 있었다. 나는 그냥 예전에 봤던것처럼 @Embeddable 으로 복합키에 대한 아이디 키를 작성하였는데 이게 정확히 어떤 어노테이션인지 궁금해졌다. @Embeddable은 값 타입 또는 복합 키용 클래스를 정의할 때 사용한다. 엔티티가 직접 테이블 칼럼으로 매핑할 수 있는 속성들의 묶음을 나타낸다. 값 타입을 사용할 때 여러 엔티티에서 재사용되는 공통 필드 그룹을 한 곳에 모으고 싶거나 단일 엔티티 안에서 여러 칼럼을 논리적으로 묶어서 관리하고 싶을때 사용할 수 있다. chatGPT 가 하나의 예시를 던져주었다. @Embeddablepublic class AuditInfo { @Column(name="created_a..

TIL 2025.05.01

2025. 03. 10

단축 URL 를 위한 백엔드 서버 코드를 작성하면서, 난잡하게 chat-gpt 에게 도움을 받은 코드와 내가 직접 작성한 코드가 쌓이다 보니 리펙토링의 필요성을 느끼게 되었다. 일단 컨트롤러들의 역할을 확실하게 분리해두고, 뭉쳐진 서비스들을 분해하여 용도에 맞게 분리하였다. 그런 와중 컨트롤러단에 여러 try-catch 구문들이 쌓이게 되었는데, 이런 예외처리들을 스프링에서 전역적으로 제공하는 방식을 알게되었다. @ControllerAdvice 에 대해 간략하게 알아보고 적용해보았다.  @ControllerAdvice는 스프링 MVC 에서 전역적으로 예외 처리와 데이터 바인딩 설정, 모델 속성 추가 등의 기능을 제공하는 어노테이션이다. 각 컨트롤러마다 반복되는 공통 코드를 한곳에서 관리할 수 있어 유지보..

TIL 2025.03.10

2025. 03. 09

프로세스와 스레드... 나는 그것의 차이를 물어봤을 때 제대로 대답하지 못했다. 개인적으로 운영체제나 여러 수업을 들었을 때 어렴풋이 알고 있다고 생각했는데 전혀 알고 있는 상태가 아니였다. 머리속으로 대충 개념은 있으나 그저 대충일뿐 알지 못하는 상태였던 것이다. 그렇기 때문에 정리해서 기억해두고 싶었다. 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위이자 실행중인 프로그램의 인스턴스이다. 스레드 : 프로세스가 할당받은 자원을 이용하는 작업 흐름의 작은 단위이다. 하나의 프로세스는 여러 스레드를 가질 수가 있다. 그럼 이 둘은 어떤 차이가 있을까? 물론 스레드 자체가 프로세스 안에 있다는 점 말고도 말이다. 일단 프로세스는 독립된 메모리 공간을 가진다. 따라서 운영체제는 PCB(Process C..

TIL 2025.03.09

2025. 03. 08

가끔 아빠가 물어보는 것이 있다. Mutex 와 Semaphore 가 뭐야? 사실 전공 과정에서 배웠지만 막상 말하려니깐 잘 생각이 안났다. 그래서 다시 한번 짚어보고 확실하게 알고 싶어서 간단하게 메모를 하였다.  뮤텍스(Mutex) 란? Mutual Exclusion 의 줄임말로 상호 배제를 의미하는 동기화 메커니즘이다. 멀티 스레드 환경에서 공유 자원에 한번에 하나의 스레드만 접근 할 수 있도록 보장한다.락과 해제를 통해 자원 접근을 제어한다. 자원을 사용하려는 스레드는 lock 를 획득해야하며 사용이 끝나면 바로 unlock 를 수행하여야 한다. 해당 자원을 사용중이면 다른 스레드는 대기 상태가 된다. 그래서 바이너리 세마포어라고도 한다. 세마포어(Semaphore) 란? 세마포어는 여러 개의 스..

TIL 2025.03.08

BCrypt 에 관하여

이번에 프로젝트를 진행하면서 스프링 시큐리티에 관하여 공부를 해야했다. BCrypt 해싱 알고리즘에 대해서 좀더 알아봐야겠다고 생각했고 간단하게 정리해보았다. BCrypt 은 무엇일까?비밀번호 해싱 알고리즘으로 입력된 비밀번호를 단방향 해시 값으로 변환하여 저장한다. 단방향 해싱으로 인해 이 해시값으로 원본 비밀번호를 저장된 해시값만으로는 알수가 없다. 또한 고유한 랜덤 Salt 값을 추가하기 때문에 같은 비밀번호여도 매번 다른 해시값이 생성되며 레인보우 테이블 등의 공격을 방지하는데 도움이 된다고 한다. 비용 매개변수를 사용하여 계산의 복잡도를 조절할 수 있다. 비용 값이 높아질 수록 해싱에 필요한 연산 횟수가 증가한다. 브루드포스 공격을 어렵게 한다. Blowfish 기반 알고리즘으로 초기 키 설정부..

카테고리 없음 2025.03.07

2025. 03. 02

단축 URL 설계시 인증 과정을 어떻게 하는게 좋을 것인지에 대해 생각했었다. 토큰 기반 방식으로 인증 및 인가를 하는 것이 좋겠다고 조언을 들었고, 그런 과정을 설계하는 와중에 재밌는 것을 알게되었다.  나는 단순히 토큰을 클라이언트에게 주고, 그것을 기반으로 서버와 api 요청등을 처리하면 되겠다고 생각했는데, 이런 점에서 사용자 경험을 위해 설계된 것이 또 있다는 것을 알게되었다. 액세스 토큰과 리프레시 토큰을 통해 액세스 토큰이 만료되더라도 원한다면 리프레시 토큰을 통해서 액세스 토큰을 또 발급받을 수 있게 하는 것이다. 그런 요소와 기술을 알게 된 후 chat-GPT 와 인터넷 자료들을 통해 간략하게 알아보았다.  토큰 기반 인증에서 액세스 토큰과 리프레시 토큰은 보안성과 사용자 경험을 고려하여..

TIL 2025.03.02

2025. 02. 16

단축 url 서비스에 대해 공부하다가 어떤 방식으로 인코딩하는 게 좋은지에 대해 고찰하다가 인코딩 방식에 대해 공부하였다.   base64란?3바이트 단위로 데이터를 읽고 이를 6비트 단위로 쪼개서 4개의 base64 문자로 변환한다. 그 이유는 6비트 단위로 변환하면 총 64개의 문자를 사용할 수 있기 때문이다. A-Z a-z 0-9 + / 등의 문자 집합으로 이루어져 있으며 데이터 길이가 3의 배수가 아닐 경우 = 문자가 추가된다.텍스트 환경에서도 바이너리 데이터를 안전하게 전송가능하다는 특징이 있다. 보았듯이 ASCII 문자만 사용하기 때문에 대부분의 시스템에서 깨지지 않는다는 장점이 있다. 물론 기본 데이터보다 커진다는 점과 URL-safe 하지 않다는 단점이 있다.그럼 url 에 사용할때는 어떤..

TIL 2025.02.16