분류 전체보기 12

TIL (12) - Security / Transactional

1. Spring Security개념Spring Security는 스프링 기반 애플리케이션에 인증(Authentication)과 인가(Authorization)를 제공하는 프레임워크다.인증(Authentication): 사용자가 누구인지 확인하는 과정 (로그인)인가(Authorization): 인증된 사용자가 특정 리소스에 접근할 권한이 있는지 확인하는 과정동작 흐름클라이언트가 요청을 보내면 FilterChain을 거친다.UsernamePasswordAuthenticationFilter 등에서 인증 정보를 확인한다.AuthenticationManager가 실제 인증을 처리한다.UserDetailsService에서 사용자 정보를 조회한다.인증 성공 시 SecurityContext에 인증 객체(Authent..

TIL 2026.07.12

TIL (11) - N+1

1번 조회하려고 했는데 뒤에서 N번이 더 나가는 상황이다.생기는 이유지연 로딩은 실제로 쓸 때까지 조회를 미루는데. 문제는 반복문 안에서 그걸 쓸 때 터진다.// 회원 목록 조회 → SELECT * FROM member (쿼리 1번)List members = memberRepository.findAll();for (Member m : members) { // m.getTeam() 을 실제로 쓰는 순간, 팀을 조회하는 SELECT가 나감 // 회원이 10명이면 여기서 10번 (쿼리 N번) System.out.println(m.getTeam().getName());}// 결과: 1 + N 번 쿼리findAll() 시점엔 회원만 가져온다. 팀은 프록시(가짜 객체)로 채워두고 미뤄뒀다가, 루프 ..

TIL 2026.07.05

TIL (10) - 영속성 컨텍스트(Persistence Context)

영속성 컨텍스트한 줄로 하면 엔티티를 보관하는 임시 작업 공간 이다. 식당에 비유하면, DB는 창고고 영속성 컨텍스트는 주방의 작업대다. 손님 주문(엔티티)을 매번 창고까지 왔다 갔다 하지 않고, 일단 작업대에 올려두고 거기서 다듬다가, 마지막에 한 번에 창고로 보낸다. 이 작업대를 관리하는 게 EntityManager다. 엔티티의 4가지 상태 처음에 이게 제일 헷갈렸다. 엔티티는 상태가 있다. 비영속(new): new로 막 만든 객체. 작업대에 아직 안 올라옴. 영속(managed): persist() 하거나 조회해온 상태. 작업대 위에서 관리되는 중. 준영속(detached): 작업대에서 내려온 상태(detach, close, clear). 삭제(removed): remove() 한 상태. Membe..

TIL 2026.06.28

TIL (9) - Spring Data JPA

Spring Data JPA는 데이터베이스에 접근하는 반복적인 코드를 대신 짜주는 도구이다. 원래는 SQL을 쓰고 결과를 객체에 담는 작업을 일일이 해야 하는데, 이걸 식당에 비유하면 매번 육수를 처음부터 끓이는 셈Spring Data JPA는 자주 쓰는 육수를 미리 준비해 두고, 우리는 "이 메뉴 주세요"라고 주문만 하면 되도록 만들어 준다. 1. Spring Data JPA란? JpaRepository를 상속한 인터페이스를 하나 만들면, save, findById, findAll, delete 같은 기본 CRUD가 구현 없이 그냥 생긴다. 우리가 만드는 건 인터페이스뿐이고, 실제 구현체는 Spring이 실행 시점에 알아서 만들어 준다고 보면 된다. 즉 개발자는 "무엇을 가져올지만 정의하고, 어떻게 가..

TIL 2026.06.21

TIL (8) - 스프링 부트(Spring Boot)

1. 스프링 부트란?스프링 부트는 자바(Java)로 웹 애플리케이션(웹사이트, 서버 프로그램)을 쉽고 빠르게 만들 수 있게 도와주는 도구이다. 원래 자바로 서버를 만들려면 준비해야 할 설정이 무척 많은데, 스프링 부트는 그 복잡한 준비 과정을 대신 처리해 준다. 쉽게 말해 "바로 요리만 하면 되도록 재료 손질과 주방 세팅을 미리 끝내 놓은 상태"라고 생각하면 된다.스프링 부트를 이해하려면 먼저 그 바탕이 되는 개념들을 알아야 한다.1-1. 스프링 프레임워크(Spring Framework)프레임워크란 프로그램을 만들 때 쓰는 '뼈대' 또는 '틀'이다. 집을 지을 때 기둥과 골조가 미리 세워져 있으면 벽과 인테리어만 채우면 되듯, 프레임워크는 개발에 필요한 기본 구조를 미리 제공한다.스프링 프레임워크는 자바..

TIL 2026.06.12

TIL (7) - 협업관리 툴 GitHub

GitHub란?GitHub는 Git 기반의 원격 저장소(Repository) 호스팅 서비스이다. 개발자가 작성한 소스 코드를 온라인에 저장하고 관리할 수 있으며, 여러 사람이 함께 프로젝트를 진행할 수 있도록 협업 기능을 제공한다.Git은 버전 관리 시스템(VCS, Version Control System)이고, GitHub는 Git으로 관리되는 프로젝트를 인터넷 상에서 저장하고 공유할 수 있게 해주는 플랫폼이라고 볼 수 있다.예를 들어 프로젝트를 개발하다가 오류가 발생했을 경우, 이전 버전으로 되돌아가거나 특정 시점의 코드를 확인할 수 있다. 또한 팀원들과 같은 프로젝트를 공유하면서 변경 내역을 추적할 수 있다. GitHub를 사용하는 이유1. 버전 관리코드가 변경될 때마다 변경 이력을 저장할 수 있다..

TIL 2026.06.06

TIL (6) - SQLD

SQLD 대비 주요개념 정리 JOIN JOIN 의 종류 1. INNER JOIN교집합 기준 테이블과 JOIN 테이블의 중복된 값을 보여준다.두 테이블에 모두 데이터가 있어야한다. 2. (LEFT)OUTER JOIN조인 기준이 되는 LEFT 테이블을 모두 표시.공통부분 + LEFT에는 있지만 RIGHT 테이블에 없는 값은 NULL로 채운다. 3. FULL OUTER JOIN합집합A 테이블의 데이터 , B 테이블의 데이터를 모두 SELECT양쪽에 데이터가 있는경우 정상 매칭,한쪽만 없는경우 NULL 로 채워서 출력. 4. CROSS JOIN모든 경우의수 (N x M) 개의 행 출력ANSI : FROM T1 CROSS JOIN T2ORACLE : FROM T1, T2 - WHERE 절에 조인조건이 ..

TIL 2026.05.29

TIL (5) - Mini Project / Java Swing 영화 예약 시스템 개발 후기 / team CINE

유레카 과정 첫 번째 미니 프로젝트가 끝났다. 이번에 다룬 프로젝트는 Java 21, Swing, JDBC, MySQL 기반의 영화예약 관리 시스템 이였다. 기본기능은 영화, 고객, 상영, 예매, 극장, 수익을 CRUD 로 관리하는 형태이며, 메인 대시보드를 중심으로 UI 파트와 백엔드 파트가 분리되어 있다. 1. 프로젝트 소개 유레카 과정 첫 번째 미니 프로젝트가 끝났다.이번에 다룬 프로젝트는 Java 21, Swing, JDBC, MySQL 기반의 영화예약 관리 시스템 이였다.기본기능은 영화, 고객, 상영, 예매, 극장, 수익을 CRUD 로 관리하는 형태이며, 메인 대시보드를 중심으로 UI 파트와 백엔드 파트가 분리되어 있다. 2. 협업 방식 Gradle일단 팀원 5명 모두 개발환경이 달랐다..

TIL 2026.05.22

TIL (4) - Lamda

프로그래머스 문제를 풀고 활성화 되는 '다른 사람의 풀이' 버튼.다양한 사람들(특히 고수)의 다양한 자바 메서드와 풀이법들을 구경할 수 있다. 오늘 알아볼것은 이 람다식이다 람다 함수란?람다식(Lambda Expression) 익명 함수 (Anonymous functions)를 지칭하는 용어고,함수를 보다 단순하게 표현하는 방법 정도로 생각하면 될것같다. 특징람다식은 이름을 가질 필요가 없다.람다를 사용하면 불필요한 반복문의 생략이 가능하며 (간결성)불필요한 연산을 최소화 할 수 있다 (지연연산 수행) 단, 호출이 까다롭고, 람다 stream 사용시 단순 for문 혹은 while 문 사용시 성능이 떨어진다.그리고 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있다. 쉽게말해매서드를 하..

TIL 2026.05.17

TIL (3) - Stack / Queue / Valid Parentheses 문제 풀이

Stack과 Queue의 개념과 주요 메서드스택을 활용한 Valid Parentheses 문제를 풀이를 진행해보았다. StackLIFO (Last In First Out) 후입선출 구조데이터의 입출력 방향이 같은 단방향구조 스택의 선언Stack stackInt = new Stack();Stack stackChar = new Stack();Stack stackStr = new Stack(); 데이터 추가Stack stack = new Stack();stack.add(1);stack.add(2);stack.push(3);stack.push(4);// [1,2,3,4]push와 add를 사용해서 데이터를 입력해 줄수 있다. 데이터 제거stack.pop();stack.pop();//[1,2]pop을 사용해서 ..

TIL 2026.05.10