Backend/Java 45

Spring - interceptor

안녕하세요. 오늘은 인터셉터(interceptor)에 대해 알아볼게요. interceptor 인터셉터(interceptor)는 Spring MVC의 핵심 기능 중 하나로, 웹 애플리케이션에서 공통적인 처리를 재사용할 수 있게 해주는 강력한 도구예요. 인터셉터는 들어오는 요청과 나가는 응답을 가로채어 특정 로직을 수행할 수 있게 해주는 메커니즘을 제공해요. 이는 AOP(Aspect-Oriented Programming)의 일종으로 볼 수 있고, 컨트롤러(Controller)로 요청이 도달하기 전, 후 또는 완료된 후에 추가적인 처리를 하기 위해 사용돼요. 즉 인터셉터는 “요청이 컨트롤러에 도착하기 전·후에 공통 작업을 대신 처리해 주는 문지기” 에요. 인터셉터 활용 사례 1. 인증(Authent..

Backend/Java 2025.12.16

영속성 컨텍스트 (Persistence Context)

안녕하세요. 오늘은 영속성 컨텍스트에 대해 알아볼게요. 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트는 JPA(Java Persistence API)를 공부할 때 가장 핵심이 되는 개념으로 “엔티티를 1차 캐시에 저장해 두고, 동일 트랜잭션 안에서 엔티티를 관리하는 JPA의 내부 저장소” 라고 생각하시면 되요. 영속성 컨텍스트는 엔티티를 저장하는 1차 캐시 에요. EntityManager는 엔티티를 DB에 바로 저장하지 않고, 먼저 영속성 컨텍스트라는 메모리 공간(1차 캐시)에 저장해요.Member member = new Member(1L, "userA");em.persist(member); // DB에 INSERT X -> 1차 캐시에 저장됨 ※ 영속성 컨텍스트는..

Backend/Java 2025.12.14

Spring Boot - Mustache

안녕하세요. 오늘은 스프링부트 머스테치(Mustache)에 대해 알아볼게요. Mustache 머스테치(Mustache)는 로직 없는(Logic-less) 템플릿 엔진으로 서버나 클라이언트에서 데이터를 템플릿(HTML, 텍스트 등)에 깔끔하게 삽입하기 위해 사용하는 템플릿 언어예요. 템플릿 안에서는 조건문, 반복문 같은 프로그래밍 로직을 직접 작성하지 않고단순한 태그(placeholder)를 작성하고, 렌더링 할 때 데이터(JSON 등)를 넣어 처리해요. 그래서 단순하고 읽기가 쉽고, 뷰와 로직이 완전히 분리, 다양한 언어에서 동일한 템플릿 사용이 가능해요. Mustache 문법 머스테치는 중괄호 두 개 {{}}를 사용하는데요. 어떻게 사용하냐에 따라 출력이 달라져요. 1. 변수 출력Hello,..

Backend/Java 2025.12.12

Spring Security OAuth2

안녕하세요. 오늘은 스프링 시큐리티의 OAuth2에 대해 알아볼게요. OAuth2의 필요성 기존 로그인 방식은 어떤 서비스(A)가 다른 서비스(B)의 데이터를 사용하려면 사용자의 아이디 / 비밀번호를 A에게 직접 입력해야 해서 사용자의 전체 권한이 노출되는 위험이 있었어요. OAuth2는 이런 위험을 권한 위임으로 "비밀번호를 주지 않으면서 일부 기능만 허용"하게 해주는 표준 프로토콜이에요. OAuth2의 주요 구성 요소 구성 요소설명Resource Owner(사용자)실제 계정을 가진 사람Client(우리 서비스)정보를 얻고 싶은 서비스Authorization Server(카카오, 구글 등)로그인 인증 + 토큰 발급Resource Server실제 데이터 API 제공 (예: 프로필, 이메일) O..

Backend/Java 2025.12.08

RESTful API

안녕하세요. 오늘은 코딩 공부하면서 "좋은 설계를 하는 기준이 뭘까?" 라는 생각을 하다가 작성해요. 좋은 설계를 통해 코드의 일관성과 유지보수가 쉬워지는 효과 RESTful API에 대해 알아볼까 해요. RESTful API REST의 제약 조건을 준수하는 API로 URI에 명사를 사용하고 (행위 HTTP 메서드로 표현) 계층 구조를 URI로 표현하면서 대소문자, 언더바(_) 사용 규칙을 준수해요. 그리고 HTTP 상태코드로 결과를 명확하게 전달해요. ※ REST 란? ※ REpresentaion Status TransFer의 약자로 자원(Resource)을 URI로 식별하고, HTTP 메서드를 이용해 해당 자원에 대한 정의하는 아키텍처 스타일이에요. 자원의 표현은 JSON, XML 등이 있고..

Backend/Java 2025.09.07

@Transactional

안녕하세요. 오늘은 제가 코딩 연습하다가 하나의 어노테이션 때문에 고생을 했는데요. 이 친구를 소개해볼까 해요. @ Transactional Transactional은 트랜잭션 제어용 어노테이션으로 DB 작업을 하나의 단위로 묶어 처리하는데요. 중간에 오류 나면 롤백(rollback), 문제없으면 커핏(commit)을 해줘요. 그런데 왜 고생을 했으냐고 한다면 이 어노테이션 뒤에 (readOnly = true) 적용 시 읽기 전용 트랜잭션 생성으로 읽기만 가능하고 수정이 불가능하게 돼요. 만약 어노테이션이 적용 후 수정하게 될 경우에 오류가 발생하게 됩니다. // 예제 코드@Transactional(readOnly = true)public void someMethod() { stockRep..

Backend/Java 2025.09.04

Spring Security - Filter, Provider, Config

안녕하세요. 오늘은 스프링 시큐리티를 다루는데 가장 기본이자 중요한 시작점인 Filter, Provider, Config에 알아볼게요. 1. Filter (필터) 필터의 역할은 HTTP 요청을 가로채서 인증/인가 처리 흐름을 시작하는 친구예요. 스프링 시큐리티는 서블링 필터 체인을 기반으로 작동해요. 이 필터 체인 중 일부가 스프링 시큐리티의 필터들이고, 요청이 들어오면 가장 먼저 여기를 통과하게 돼요. 필터의 작동 순서는 HTTP 요청 → 여러 시큐리티 필터 → 인증 여부 판단 일제 인증 로직은 필터가 AuthenticationManager에게 위임을 하게 돼요.// 예시 필터UsernamePasswordAuthenticationFilter: 로그인 요청에서 사용자명/비밀번호를 처리BasicAu..

Backend/Java 2025.09.02

Spring Boot - JWT

안녕하세요. 오늘은 JWT에 대해 알아볼게요. JWT이란? JWT(JSON Web Token)으로 "JSON" 객체를 이용하여 인증 정보를 안전하게 "전달"하는 토큰 기반 인증 방식으로 서버가 클라이언트(사용자)에게 발급하는 디지털 서명이 된 토큰이에요. 사용자의 인증 상태를 유지하고 서버에 전달 가능해요. JWT와 인증/인가의 관계 인증(로그인) 시 서버는 사용자 정보를 기반으로 JWT 발급이 되고 이후 사용자는 요청마다 JWT를 서버에 전달하여 인증받아요. 인가는 JWT의 사용자 권한 정보(ROLE, AUTHORITY 등)가 포함될 수 있고, 서버는 JWT를 해석해서 해당 사용자가 어떤 API나 리소스에 접근할 수 있는지 판단해요. JWT 인증 과정 첫 번째 사용자가 로그인 시 서버는 JWT ..

Backend/Java 2025.08.31

Spring Security

안녕하세요. 오늘은 Spring Boot의 중요한 스프링 시큐리티(Spring Security)에 대해 간단히 알아볼게요. Spring Security 란? 스프링 프레임 워크 기반 애플리케이션에서 보안(인증, 인가, 권한)을 담당하는 보안 프레임 워크로 다양한 어노테이션으로 CSRF공격, 세션 고정 공격을 방어하는 친구에요. 인증 방식 (폼 로그인, OAuth2, JWT 등)을 지원함으로써 유연한 확장성을 가지기 때문에 표준화된 구조로 보안코드가 일관되면서 유지보수가 쉽고, 보안 기본기를 자동 제공이 되요. (ex- 비밀번호 암호화, 세션 / 토큰인증, 권한 체크, CSRF 보호 등) Security의 주요 개념 1. 인증(Authentication) 사용자가 누구인지 확인하는 절차로 하나의..

Backend/Java 2025.08.29

Java - List vs Set

안녕하세요. 오늘은 Java에서 자주 사용하는 List와 Set의 차이점을 알아볼게요. List List는 순서(인덱스)가 있는 컬렉션으로 중복 요소를 허용하고, 요소의 삽입 순서가 유지됩니다. List의 대표적인 구현 클래스는 ArrayList, LinkedList, Vector가 있는데요. ArrayList는 배열기반으로 탐색이 빠른 특징을 가지고 있어요. LinkedList는 연결리스트 기반으로 삽입/삭제가 빨라요. Vector는 동기화된 List로 배열 기반의 자료구조를 가지고 있어요. (구버전 - java 1.0)List list = new ArrayList();list.add("A");list.add("B");list.add("A"); // 중복 허용System.out.println(list..

Backend/Java 2025.08.25