[JWT] 인증의 핵심, JSON Web Token 구조 완전 정리
·
Computer Science/Web
1. 시작하며JWT(JSON Web Token)는 RFC 7519 표준으로 정의된 토큰 기반 인증 방식입니다. 클라이언트와 서버 사이에서 신뢰 가능한 인증 정보를 안전하게 전달하기 위한 구조화된 문자열 포맷입니다.전통적인 세션(Session) 기반 인증은 서버가 로그인 상태를 저장하는 Stateful 구조였습니다.반면 JWT는 토큰 자체에 사용자 정보를 포함하고, 서버는 이를 검증만 수행하는 Stateless 인증 구조를 구현합니다.JWT는 다음과 같은 환경에서 표준처럼 사용됩니다.SPA (React, Vue, Next.js)모바일 애플리케이션MSA 아키텍처API Gateway 기반 인증 시스템이 글에서는 다음 내용을 체계적으로 정리합니다.JWT의 구조서명(Signature)의 동작 원리Access / ..
[Java / JDBC] Statement VS PreparedStatement - 보안·성능·JPA 관점
·
Backend/Java
1. 시작하며백엔드 개발을 하다 보면 DB와의 통신은 피할 수 없는 핵심 영역입니다.그 중심에는 항상 JDBC(Java Database Connectivity) 가 존재하고, JDBC를 통해 SQL을 실행할 때 가장 기본적으로 접하게 되는 객체가 바로 다음 두 가지입니다.StatementPreparedStatement둘 다 SQL을 실행하는 역할을 하지만,보안성능유지보수성실무 활용성측면에서 매우 큰 차이가 존재합니다.이번 글에서는 단순 문법 비교를 넘어서,JDBC 내부 동작 관점SQL Injection이 발생하는 구조적 이유DB 실행 계획(Execution Plan) 관점의 성능 차이Connection Pool, JPA와의 관계까지 실무 기준으로 깊이 있게 정리해보겠습니다.2. JDBC에서 SQL이 실행..
[Redis] 초고속 인메모리 데이터베이스 구조 완전 정리
·
Infra/Redis
1. 시작하며Redis는 Remote Dictionary Server의 약자로, 이름 그대로 키-값(key-value) 형태의 데이터를 메모리에 저장하는 인메모리(In-memory) 데이터베이스입니다.보통 “캐시 서버”로 많이 알려져 있지만, 실제로는 캐시 그 이상의 역할을 수행할 수 있는 강력한 시스템입니다.이번 글에서는 Redis의 기본 개념, 자료구조, 동작 방식, 영속성(Persistence), 클러스터 구조까지 정리하여, 다음 글인 “Redis Sentinel(센티널)”을 이해하기 위한 기초를 탄탄히 다져보겠습니다.2. Redis란?2.1 인메모리 데이터 저장소Redis는 모든 데이터를 메모리(RAM)에 저장하고, 필요에 따라 디스크에 백업하는 구조를 가지고 있습니다.이 덕분에 일반적인 RDBM..
Oracle FK 순서 불일치 - ORA-02291 실무 트러블슈팅
·
트러블 슈팅
1. 시작하며회사 프로젝트에서 Oracle DB를 사용하던 중, “데이터는 분명 존재하는데 INSERT가 실패하는” 이상한 문제가 발생했습니다.로컬에서는 정상 작동했지만, 개발 서버에서는 아래와 같은 오류가 발생했습니다.ORA-02291: integrity constraint violated - parent key not found분명히 부모 테이블에 데이터가 있는데, Oracle은 “부모 키를 찾을 수 없다”고 말합니다.이 문제의 핵심 원인은 복합키(Foreign Key)의 컬럼 순서 불일치였습니다.이번 글에서는 실제 트러블슈팅 과정을 통해 Oracle에서 FK 제약조건을 정의할 때 왜 “순서(position)” 가 중요한지 알아보겠습니다.2. 문제 상황2.1 에러 발생아래는 실제 프로젝트와 유사한 구..
[Spring Cloud MSA] Config, Gateway, Eureka까지 MSA 핵심 구조 쉽게 이해하기
·
Backend/Spring & JPA
마이크로서비스 아키텍처(MSA, Microservice Architecture)를 처음 접했을 때, 여러 개의 서비스가 어떻게 서로를 찾고 통신하는지 궁금하지 않으셨나요?"수십 개의 서비스가 있는데, 클라이언트는 이걸 어떻게 호출하지?""매번 설정 파일을 서비스마다 일일이 고쳐야 하나?""서비스 IP가 바뀌면 호출은 어떻게 하지?"이러한 고민들을 해결하기 위해 등장한 것이 바로 Spring Cloud입니다.Spring Cloud는 마이크로서비스 환경에서 반복적으로 발생하는 문제들을 자동화하고 추상화하여 보다 쉽게 시스템을 구축할 수 있게 도와주는 도구입니다.이번 글에서는 Spring Cloud의 개념을 먼저 알아보고, 실무에서 자주 사용하는 핵심 구성 요소들인API GatewayConfig ServerS..
[Java] String은 왜 불변(Immutable)할까? String Pool, intern(), 생성 방식까지 완벽 정리
·
Backend/Java
자바에서 문자열을 다룰 때 가장 많이 사용하는 타입은 단연 String입니다. 하지만 여러분은 다음과 같은 코드에서 의문을 가져본 적 없으신가요?String s1 = "Cat";String s2 = "Cat";String s3 = new String("Cat");System.out.println(s1 == s2); // trueSystem.out.println(s1 == s3); // false위 코드에서 s1 == s2는 true이고 s1 == s3는 false라는 결과가 나옵니다. 도대체 무슨 일이 일어난 걸까요?이번 글에서는 Java에서 String이 어떻게 동작하고, 왜 불변(Immutable)하게 설계되었는지, 그리고 메모리 구조, 성능, 보안 측면에서 어떤 이점이 있는지 하나씩 정리해보겠습니다..
[Spring Boot] MySQL Master/Slave 복제 설정과 Read/Write 자동 분기 처리 방법 정리
·
Backend/Spring & JPA
1. 시작하며사이드 프로젝트를 운영하면서 현재는 단일 데이터베이스만 사용 중이었습니다. 단순한 개인 프로젝트 수준이라면 큰 무리는 없겠지만, 운영 환경에서 안정성과 확장성을 확보하려면 최소한의 DB 이중화 구조는 반드시 필요하다는 생각이 들었습니다.특히, 현재 운영 중인 프로젝트는 전체 쿼리 중 약 80~90%가 읽기(Read) 작업으로 이루어져 있기 때문에, 읽기/쓰기 분리 구조를 미리 연습해보는 것만으로도 큰 도움이 되겠다는 판단이 들었습니다.물론 단일 DB로도 운영은 가능하지만, 실무에서는 장애 대응, 확장성, 성능 분산 등의 이유로 Master/Slave 구조(Master-Replica)를 도입하는 경우가 많습니다.이에 따라, MySQL Master/Slave Replication 구조를 설정하고..
[Database] 트랜잭션의 격리 수준 (Isolation Level)에 대해 완벽하게 이해하기
·
Database
1. 트랜잭션과 데이터 정합성 문제데이터베이스를 사용할 때 여러 개의 트랜잭션이 동시에 실행되면서 데이터 정합성 문제(Consistency Issue)가 발생할 수 있습니다.트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위로, 반드시 모든 작업이 성공해야 완료(Commit)되고, 하나라도 실패하면 전체가 롤백(Rollback)되어야 합니다.트랜잭션이 ACID 원칙을 준수해야 하는 이유도 바로 이러한 동시성 문제를 방지하기 위해서입니다.그 중에서도 Isolation(격리수준)은 여러 트랜잭션이 동시에 실행될 때 서로 영향을 미치지 않도록 독립적으로 동작하는 것을 의미합니다.만약 격리 수준을 적절히 설정하지 않으면, 동시성 문제(DIRTY READ, NON-REPEATABLE RE..
[Web] RESTful API란? REST API와의 차이점과 구현 원칙 정리
·
Computer Science/Web
1. REST API와 RESTful API 비교1.1 REST API란?REST API는 REST(Representational State Transfer) 아키텍처 스타일을 따르는 API(Application Programming Interface)를 의미합니다. REST는 웹에서 리소스(데이터)를 효율적으로 전송하는 방식으로, 주로 HTTP를 기반으로 합니다. REST API는 클라이언트와 서버 간의 통신을 효율적으로 설계하고 리소스(데이터)를 HTTP 메서드를 통해 전달하는 방식입니다.REST API는 REST(Representational State Transfer) 아키텍처 스타일을 따르는 API(Application Programming Interface)를 의미합니다.REST는 웹에서 리소..
[React + Nginx] Nginx에서 React(Vite) 배포 시 캐싱 문제 해결 및 최신 화면 자동 반영 적용
·
DevOps
1. 시작하며회사에서 프로젝트를 진행하면서 프론트엔드 팀원분들이 패치 후에도 브라우저가 이전 버전을 유지하는 문제로 어려움을 겪고 있었습니다.운영 서버에 배포할 때마다 강력 새로고침(Ctrl + Shift + R)을 해야만 최신 화면이 반영되는 상황이었습니다.이는 사용자 경험(UX)에도 영향을 미치고, 운영 과정에서도 번거로움을 유발했습니다.1.1 문제 상황패치 후에도 브라우저가 이전 버전의 화면을 유지함Nginx를 재시작하지 않으면 새로운 화면이 반영되지 않음사용자가 강제 새로고침을 하지 않으면 변경 사항이 보이지 않음배포 후 매번 "새로고침 해주세요!"라고 안내하는 번거로움이 존재운영 서버에 배포할 때마다 개발자나 운영팀이 직접 강력 새로고침을 해줘야 하는 상황이 반복되었고, 이는 근본적으로 Ngin..