본문 바로가기

전체 글459

JPA 1. @Entity, @Table → CREATE TABLE@Entity@Table(name = "users")public class User { ...}CREATE TABLE users ( ...);@Entity가 붙으면 해당 클래스는 DB 테이블로 변환@Table(name = "...") 없으면 → 클래스명이 소문자로 변환됨 (User → user)2. @Id, @GeneratedValue → PRIMARY KEY, AUTO_INCREMENT@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;id BIGINT PRIMARY KEY AUTO_INCREMENT IDENTITYAUTO_INCREMENT (MySQL), SERI.. 2025. 3. 31.
React에서 화면 사이즈 감지하기(반응형 설정하기, window.innerWidth, matchMedia, react-responsive, tailwind) 1. window.innerWidth 직접 사용 (기본 방식 / 비추천)import { useEffect, useState } from 'react';const useWindowWidth = () => { const [width, setWidth] = useState(window.innerWidth); useEffect(() => { const handleResize = () => setWidth(window.innerWidth); window.addEventListener('resize', handleResize); return () => window.removeEventListener('resize', handleResize); }, []); return width;};이걸 사.. 2025. 3. 31.
OAuth 구현 목표프론트에서 "구글 로그인"을 누르면Spring 서버가 로그인 처리 → 사용자 정보 저장 → JWT 발급 → 클라이언트 전달이 전체 흐름을 이해하는 게 목표야!1. 전체 OAuth 로그인 흐름[프론트]사용자가 구글 로그인 버튼 클릭 ↓GET /oauth2/authorization/google(Spring이 자동 제공하는 URL)[Spring 서버]→ Google 로그인 페이지로 리다이렉트 ↓→ 사용자가 로그인 후 동의 ↓Google → Spring으로 "code" 전송 (리디렉션 URL로)[Spring 서버]→ code를 access_token으로 교환→ access_token으로 사용자 정보(email, name 등) 조회→ OAuth2User 객체로 변환됨2. 이후 흐름 (커스텀 처리)[.. 2025. 3. 28.
.env 파일과 실행 모드 import.meta.env.DEV는 Vite에서 자동으로 설정해줍니다.따라서 직접 설정할 필요는 없습니다.환경 변수 | 의미 | 설정 필요 여부import.meta.env.DEV개발 서버(vite dev)에서 실행 중이면 true❌ 자동 설정됨import.meta.env.PROD프로덕션 빌드(vite build)된 결과물이 실행 중이면 true❌ 자동 설정됨import.meta.env.MODE현재 모드 ('development', 'production', 'test' 등)❌ 자동 설정됨import.meta.env.VITE_XXX는 직접 설정해야 함위에 소개한 기본 환경 변수들과 다르게,VITE_로 시작하는 커스텀 환경 변수는 .env 파일 등에 직접 작성해야 합니다.예:# .envVITE_API_URL.. 2025. 3. 28.
네트워크 보안 01. 네트워크 보안의 개요■ 컴퓨터 네트워크컴퓨터 간의 상호 접속 및 정보교환 수단다양한 사용자 접근 가능침입자에 의한 보안사고 가능성 존재■ 네트워크 보안의 목적가정: 통신회선상의 정보는 항상 노출 가능목표: 통신회선상의 정보 보호■ 보안 위협 요소물리적 위협:네트워크 시스템에 대한 직접적인 파괴나 손상을 입히는 행위장비 파괴, 도난 등기술적 위협:수동적 공격: 정보 도청(정보를 무단으로 취득)능동적 공격: 정보 변조, 위조■ 네트워크 보안수동적 공격과 능동적 공격에 대한 대응을 총칭수동적 공격 방어:통신 회선 접근 차단데이터 암호화능동적 공격 방어:데이터 암호화수신 측 무결성 검증02. 네트워크 보안의 목표기밀성: 정보 노출 방지무결성: 데이터 위조 및 변조 방지가용성: 합법 사용자 접근 가능 보장.. 2025. 3. 28.
SQL(4) 1. 중첩 질의(Subquery)란?하나의 SQL 문 안에 또 다른 SELECT 문이 포함된 것보통 괄호 () 안에 작성메인 쿼리가 서브쿼리(=중첩 질의)의 결과를 사용WHERE, FROM, SELECT, HAVING 절 등 다양한 위치에 들어갈 수 있음2. 기본 구조SELECT 컬럼1, 컬럼2, ...FROM 테이블명WHERE 컬럼 비교연산자 (SELECT ... FROM ... WHERE ...);3. 중첩 질의 위치별 설명(1) WHERE절의 중첩 질의조건식으로 사용하는 서브쿼리→ "이 값과 같은 것", "이 목록에 포함된 것" 등구조SELECT 컬럼1, 컬럼2FROM 테이블WHERE 컬럼명 = (SELECT ... FROM ... WHERE ...);최고 점수를 받은 학생SELECT name, s.. 2025. 3. 28.
SQL(3) SELECT 전체 문법 구조SELECT [DISTINCT] 컬럼1, 컬럼2, ...FROM 테이블1 [INNER JOIN | LEFT/RIGHT OUTER JOIN] 테이블2 ON 조인 조건1 [INNER JOIN | LEFT/RIGHT OUTER JOIN] 테이블3 ON 조인 조건2 ...WHERE 조건식 [서브쿼리 가능]GROUP BY 컬럼1, 컬럼2, ...HAVING 조건식ORDER BY 컬럼1 [ASC|DESC], 컬럼2 [ASC|DESC], ... 데이터 정렬 — ORDER BY결과 데이터를 정렬된 순서대로 출력할 때 사용합니다.SELECT 컬럼1, 컬럼2, ...FROM 테이블명ORDER BY 정렬기준컬럼 [ASC|DESC], ...;ASC오름차순 (기본값)DESC내림차순SE.. 2025. 3. 28.
SQL(2) DML(데이터 조작 언어)실행 즉시 방영되는 영구적 변경을 위한 명령어의 집합이 아니며 복구가 가능(설정에 따라 복구가 불가능 할 수 있다.)1. INSERT 문 — 데이터 삽입테이블에 새로운 데이터를 추가기본 문법INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)VALUES (값1, 값2, ...);예시INSERT INTO Student (id, name, age)VALUES (1, '철수', 20);모든 컬럼 순서대로 값을 넣을 경우 컬럼 생략 가능:INSERT INTO Student VALUES (2, '영희', 22);INSERT INTO ... VALUES ...는 우리가 직접 값을 써서 삽입하는 방식이고,INSERT INTO ... SELECT ... 문은 다른 테이블의 검색결과를 기반.. 2025. 3. 28.
SQL(1) 1. SQL 명령어의 종류DDLData Definition Language데이터베이스 구조를 정의하거나 변경하는 언어DMLData Manipulation Language데이터를 조작하는 언어 (조회, 삽입, 수정, 삭제)DCLData Control Language데이터베이스에 대한 권한 제어와 보안 관리2. DDL (데이터 정의 언어)데이터베이스 객체를 생성/변경/삭제할 때 사용주요 객체스키마(Schema) = 데이터베이스(DB)테이블(Table) = 실제 데이터 저장 구조뷰(View) = SELECT 문 결과를 가상의 테이블처럼 사용인덱스(Index) = 검색 속도 향상시퀀스(Sequence) = 자동 번호 생성주요 명령어CREATE객체 생성CREATE TABLE, CREATE DATABASEALTER.. 2025. 3. 28.
Redis, kafka RedisRedis는 기본적으로 인메모리 키-값 저장소야. 데이터가 메모리에 있어서 정말 빠르고, 보통은 캐시로 많이 사용.그리고 pub/sub 구조를 지원해서 메시지 전달에도 사용.또한 Redis Streams 같은 기능을 통해 간단한 메시지 큐 시스템으로도 사용.특징 요약하자면:빠르다 (메모리 기반이라서)구조가 단순하고 사용하기 쉽다캐시, 세션 저장, 일시적인 메시지 처리에 적합메시지 보관 기간이 짧고, 디스크 내구성이 약해 (기본은 휘발성)언제?서버 간 간단한 pub/sub 통신이 필요할 때로그인 세션 저장이나 캐시 용도로요청을 큐에 잠깐 쌓았다가 백그라운드 처리할 때 (예: 이메일 발송 대기열)KafkaKafka는 일종의 분산 메시징 시스템 또는 이벤트 스트리밍 플랫폼으로 보면 된다.기본적으로 모.. 2025. 3. 27.
HTTP 상태 코드 종류 예외처리 상태코드org.springframework.http.HttpStatusSpring에서 제공하는 HTTP 상태 코드(enum) 클래스[HttpStatus 공식 JavaDoc 보기 (Spring)]https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpStatus.html주요 HTTP 상태 코드 종류200HttpStatus.OK성공201CREATED리소스 생성 완료 (POST 응답 등)204NO_CONTENT응답 본문 없음 (삭제 등)400BAD_REQUEST클라이언트 요청 오류 (잘못된 파라미터 등)401UNAUTHORIZED인증 실패 (로그인 안 됨 등)403FORBIDDEN권한 없음.. 2025. 3. 27.
서버 보안 서버 보안 개요기본 구성클라이언트: 서버에 요청을 보내는 컴퓨터서버: 서비스를 제공하는 컴퓨터통신채널: 인터넷을 통해 데이터 교환구성도클라이언트(App → OS → 트래픽 제어, 암호화) ⇅ 인터넷 ⇅서버(App → OS → 트래픽 제어, 암호화)서버 침입 과정 (4단계)1️⃣ 정보 수집: 공격 대상 결정2️⃣ 권한 획득: 일반 사용자 → 관리자 권한 상승3️⃣ 공격 수행: 로그 삭제, 백도어 설치4️⃣ 재침입: 다른 시스템 공격, 정보 유출 등서버 공격 유형1. 계정 크랙 공격방식 설명전수 공격 (Brute Force)가능한 모든 패스워드를 시도사전 공격 (Dictionary)사전 파일에 있는 단어들로 시도 (빠름)• 사전 파일: 서버를 이용하는 사람의 다양한 정보로 생성2. 네트워.. 2025. 3. 26.