Server/DB
코테 준비를 위한 SQL 첫걸음 정리 - Select
2025.03.25
기본 문법SELECT 열(속성) FROM 테이블명 WHERE 조건; 동일 비교WHERE 칼럼 = 2;WHERE 칼럼 = '문자';WHERE 칼럼 = 1 OR 칼럼 = 2;-- 잘못된 예제: WHERE 칼럼 = 1 OR 2; (X) NULL 값 비교WHERE 칼럼 IS NULL;-- 잘못된 예제: WHERE 칼럼 = NULL; (X) 패턴 매칭: LIKE-- 중간에 'Ex'가 포함된 문자열WHERE 열 LIKE '%Ex%';-- 'Ex2'로 끝나는 문자열WHERE 열 LIKE '%Ex2';-- 'Ex3'로 시작하는 문자열WHERE 열 LIKE 'Ex3%';와일드카드 문자% : 임의의 문자열 (빈 문자열 포함)_ : 임의의 문자 1개\% : %를 일반 문자로 취급\_ : _를 일반 문자로 취급 추가적인 조건..
Server/DB
SQL 코테 준비
2025.03.16
작년 상반기까지는 SQL 코테 문제는 상당히 쉽게 나왔다.SELECT만 활용하는 문제가 대부분이었고, 어렵다면 JOIN이 쓰였다. 하지만, 작년 하반기 SQL 코테 문제는 JOIN 문제가 나오면 땡큐였고 내가 모르는 문법이 당연하게 쓰이는 문제가 많았다. 코테에 떨어진 경우가 거의 없던 나지만, 코테 점수가 높을수록 더 나를 증명할 수 있는 것 아닌가? 어려워진 SQL 코테에 맞게, 공부를 진행하고자 한다.공부 계획은 youtube의 SQL 코딩테스트 공부 방법부터 실전 노하우까지를 참고하여 세워보았다. 1. SQL 첫걸음 도서를 통해 이론을 전체적으로 훑기2. 데이터리안 SQL 데이터 분석 캠프 | 입문반, 실전반 커리큘럼에 나온 문법 공부하여 블로그에 정리하기 3. 프로그래머스와 같은 문제 은행 사이..
Server/DB
처음으로 간단한 DB를 설계하며 한 고민 [정규화]
2025.03.07
이번에는 fast api와 react를 활용해서, 풀스택으로 개발해야 했다.DB를 설계하면서 고민한 것을 정리해보겠다! 정규화에 관해서회원가입, 로그인 페이지 디자인에서 받아들이는 값은 [전화번호, 차량번호, 비밀번호] 였다.또한 사용자와 관련해서, [전화번호, 차량번호, 프로필 이미지] 정보가 필요했다.그래서 User Table을 정말 단순히 짜보면idphonecar_numberpasswordprofile_imagejoin_date [ 가입 날짜 ]memo [ 서비스 운영 중, 해당 row의 설명이 필요할 때, 메모용 ]이러한 칼럼이 필요하다.하지만, 실제 서비스를 운영하면서 DB를 수정하기 힘든 상황이 발생할 수 있으니, 정말 한 테이블로 끝낼지 면접 준비를 하며 외웠던 정규화를 적용해보기로 했다. ..
FE/React
Tailwind CSS vs Styled Components
2025.03.02
이번 글에서는 Tailwind CSS와 Styled Components를 사용하면서 느낀 장단점을 정리해본다.1️⃣ CSS 렌더링 방식 차이방식Tailwind CSSStyled Components스타일 적용 방식정적 CSS 파일 (빌드 타임 적용)런타임에 JavaScript가 스타일 생성브라우저 성능 영향미리 컴파일된 CSS를 사용하여 빠름실행 중 스타일을 생성해야 하므로 성능 저하 발생🔹 Tailwind CSS빌드 시 필요한 클래스만 포함하여 최적화된 CSS 파일을 생성덕분에 실제 배포 환경에서는 매우 작은 CSS 파일이 만들어져 페이지 로딩 속도가 빨라진다. 🔹 Styled ComponentsJavaScript 실행 후 스타일을 생성하고, DOM에 스타일 태그를 주입하는 방식이로 인해 초기 렌더링..
FE/React
useState가 의도대로 동작을 하지 않는다.
2025.02.22
기존 코드다음은 showTradeList 함수가 currentPage 상태를 기반으로 API 요청을 보내는 코드const showTradeList = async () => { if (loading || currentPage > allPageCount) { return; } setLoading(true); const formData = new FormData(); formData.append("page_num", currentPage.toString()); await apiService.post( "/posts/search_second_hand/", formData, ).then(res => { if (res.data.code === 200) { ..