java 42

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

Spring Boot - 필터링 & 검색 기능

안녕하세요. 오늘은 스프링 부트의 필터링 & 검색기능의 종류에 알아볼게요. 1. 쿼리 메서드(Query Method) Spring Data JPA가 메서드명을 파싱 하여 JPQL을 자동생성하는데 즉 메서드 이름만으로 자동으로 쿼리 생성으로 가장 간단하고 직관적인 방식이에요. 대신 복잡한 조건에는 권장하지 않아요. List findByUsername(String username);List findByAgeGreaterThan(int age);List findByUsernameContaining(String keyword);List findByUsernameAndStatus(String username, String status); 2. JPQL(Java Persistence Query Langua..

Backend/Java 2025.08.22

Spring Boot - Validation

안녕하세요. 오늘은 스프링부트의 중요한 키워드 중 하나인 Validation에 알아볼게요. Validation Validation(검증, 유효화/유효성)의 뜻으로 즉 유효성 검증을 위해 사용하는 스프링부트의 키워드 잘못된 입력값(DIO)에 대한 DB 저장 방지(데이터 무결성)와 사용자의 잘못된 입력을 빠르게 알려줌으로써 UX가 향상돼요. 주요 어노테이션 Validation의 어노테이션은 message 속성을 가지고 있어 검증 실패 시 사용자에게 보여줄 오류 메시지를 직접 지정해 줄 수 있어요. 1) @NotNull - 값이 null이 아니어야 함 - 단, 빈 문자열("")은 허용됨2) @NotEmpty - 값이 null이 아니고 빈 문자열도 아님 - 단, 공백(" ")은 허용..

Backend/Java 2025.08.20

Spring Boot

안녕하세요. 오늘은 스프링 부트에 대해 알아볼게요. 스프링 부트(Spring Boot) 스프링(Spring)을 쉽고 빠르게 사용할 수 있도록 지원하는 프레임 워크 확장판으로 스프링 부트 스타터를 제공을 해줍니다. (빌드 & 의존성 관리 최소화) XML 설정 없이 Java 코드 기반으로 설정이 가능하고(Annotation 기반), 내장 WAS(Tomcat)를 포함하기 때문에 별도 설치 없이 실행이 가능해요. JAR 파일만으로 서버 실행 및 배포가 가능해요. (외부 서버 설치가 불필요) +% 스프링(Spring Framework)이란? % 엔터프라이즈 애플리케이션 개발을 위한 자바 기반의 강력한 프레임워크로 대규모, 복잡한 데이터 관리를 위한 서버 성능, 안정성, 보안 기능을 제공해 줘요. 그러나 초기 ..

Backend/Java 2025.08.17

Spring Boot 연동 방법

안녕하세요. 오늘은 Spring Boot 설치 및 적용법에 알아볼게요. 우선 인터넷 검색 - 스프링 IO 검색 최상단 홈페이지에 들어갑니다.홈페이지 상단 메뉴 중 Projects - Spring intializr 클릭 나에게 맞는 프로젝트와 언어, Spring Boot 선택 후 Name을 임의로 변경 (주의- Spring Boot 3은 자바 17 버전, 4는 21 버전 이상 호완성을 가집니다!) 우측에 Dependencies 클릭 후 의존성을 설정해줍니다. 의존성은 ADD Dependencies 내 Spring Web, MySQL, Lombok, JPA, H2를 검색 후 적용시켜 주세요. 그다음 GENERATE 클릭으로 다운로드 진행 해주세요. 다운로드하시면 알집으로 하실 텐데 알집은 java경..

Settings 2025.08.15

JDBC 연동방법

안녕하세요 이번시간에는 JDBC을 사용하기 위해 Java에 연동시키는 방법을 알아볼게요. 저는 Java에 MySQL을 연동시켜 볼게요. 자바에 build gradle을 들어가 보시면 빨간 테두리에 코드를 삽입해 MySQL과 연결시켜 볼게요. 홈페이지에 'MVN 검색' -> 최상단 프로그램에 들어가신 후 mysql을 검색하셔서 두 번째 프로그램을 눌러주세요. 버전은 최상단 8.0.33을 선택하신 후 Gradle - Fomat: Groovy Short를 설정하시면 홈페이지 주소와 코드가 나오는데 마우스 한 번만 클릭하시면 복사가 됩니다. 그리고 Java프로그램에 빨간 테투리안에 붙여 넣기 하시고 다시 MVN에 돌아갑니다. 홈페이지에 'MVN 검색' -> lombok을 검색하셔서 1.18.38(..

Settings 2025.08.14

Java - JDBC

안녕하세요. 이번시간에는 자바 프로그램을 데이터베이스와 연결시켜 주는 JDBC에 대해 알아볼게요. JDBC JDBC Java DataBase Connectivity 자바에서 DB에 접근(연결) 하기 위해 제공되는 표준 API로 MySQL, Oracle, MariaDB 등 다양한 Java에 연동할 수 있어요. JDBC 역할 JDBC는 데이터베이스와 '연결, 질의, 결과, 종료'를 담당해요. DB에 접속하고, SQL문을 작성 후 전송, SQL 결과를 Java의 객체 형태로 받을 수 있답니다. JDBC의 필요성 Java에서는 SQL문장을 직접 실행할 수 없어요. DB드라이버와 JDBC API를 통해 DB와 연결로 Java에 표준화된 SQL을 사용하여 DBMS의 유연성(유지보수, 효율정)을 확보할 수..

Backend/Java 2025.08.13

스트림(Stream) API

안녕하세요 오늘은 스트림에 대해 알아볼게요! 스트림이란? 스트림(Stream, 흐름)은 자바 8부터 도입된 기능으로, 컬렉션 또는 배열에 저장된 데이터를 선언형(직관, 간결) 방식으로 처리할 수 있게 지원하는 도구예요. 스트림을 사용하면 데이터 필터링, 매핑(변환), 집계 등 다양한 작업을 수행할 수 있고, 람다식과 결합하여 가독성이 높은 코드로 작성이 가능해집니다. 다음 스트림의 3단계 구조를 알아볼까요? 스트림의 3단계 구조 (데이터 파이프라인) 스트임은 데이터를 소스로부터 연속적으로 처리하는 '파이프 라인'을 구축을 하는데 여기서 '파이프 라인'은? 데이터를 사용하는 단계, 절차, 흐름을 뜻해요. 1. 스트림의 생성 - 소스 (Source) 소스는 스트림의 시작점 (생성 단계)로 컬렉..

Backend/Java 2025.07.29