본문 바로가기

Spring

(9)
Spring에서의 API 예외 처리 전략 1. 왜 예외 처리 전략이 중요한가?백엔드에서 예외(400~500)가 발생하면 사용자에게 정확하고 일관된 응답을 전달해야 함예외 응답이 일관되지 않으면:프론트는 어떤 에러인지 해석 불가디버깅도 어려움클린 아키텍처에선 도메인 → 컨트롤러 계층까지 예외가 잘 캡슐화되어야 함 2. 기본 예외 처리 방식의 문제점@GetMapping("/user/{id}")public UserDto getUser(@PathVariable Long id) { return userService.findById(id); // 존재하지 않으면 예외 발생}만약 id에 해당하는 유저가 없다면 NoSuchElementException 발생Spring이 알아서 500 에러를 내보냄 (내가 컨트롤 불가)메시지도 무의미함 → 사용자/프론트엔..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 53일차 Spring Security Spring SecuritySpring Security는 애플리케이션의 인증(Authentication)과 인가(Authorization) 기능을 제공하는강력한 보안 프레임워크 1️⃣ 웹 애플리케이션에 보안이 필요한 이유웹 애플리케이션은 다양한 보안 위협에 노출될 수 있음.인증되지 않은 사용자의 접근 차단 (로그인)권한 없는 사용자의 민감한 데이터 접근 차단 (권한 관리)CSRF, XSS, SQL Injection 같은 보안 공격 방어✔ 즉, "누가 시스템을 사용할 수 있는지(인증) + 어떤 데이터를 볼 수 있는지(인가)"를 결정하는 것이 필수.✔ Spring Security는 이러한 보안 기능을 자동화하여 쉽게 적용할 수 있도록 도와줌. 2️⃣ Spring Security가 해결하는 문제들Spring ..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 52일차 Double(래퍼 클래스), 빌더 패턴(Builder Pattern) 기본형(primitive type)과 래퍼 클래스(wrapper class)의 차이🔹 double (기본형, primitive type)8바이트(64비트) 크기의 부동소수점(floating-point) 타입.메모리 사용이 적고 연산 속도가 빠름.null을 저장할 수 없음.Java의 기본 데이터 타입이라서 객체가 아니라 값 자체를 저장함.예제:double pi = 3.14;double result = pi * 2; double은 산술 연산이 빠르지만, 객체처럼 사용하지 못함. 🔹 Double (래퍼 클래스, Wrapper Class)double을 객체로 감싸는 래퍼 클래스.Java의 객체 타입으로 null을 저장할 수 있음.double과 달리 컬렉션(List, Map 등)에 저장 가능.메서드를 제공 (..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 40일차 스트림 2. 스트림(Stream)스트림(Stream)은 컬렉션(List, Set 등) 데이터를 처리하는 방식 으로, 데이터를 필터링, 변환, 집계하는데 사용됩니다. Java 8부터 지원되며, 내부 반복을 사용하여 코드 가독성과 성능을 높입니다. 스트림의 특징✅ 연속적 처리: 데이터를 하나씩 처리하는 방식(파이프라인)✅ 중간 연산(Intermediate Operation): filter(), map(), sorted() 등✅ 최종 연산(Terminal Operation): collect(), forEach(), reduce() 등✅ 병렬 처리 가능: parallelStream()을 사용하면 병렬 연산 가능람다식 & 스트림을 사용하면 좋은 점✅ 코드가 간결해진다.✅ 가독성이 좋아진다.✅ 병렬 처리 가능 -> 성능 ..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 39일차 람다식 1. 람다식(Lambda Expression)람다식은 익명 함수(Anonymous Function) 를 작성하는 간결한 방법으로, Java 8부터 도입되었습니다. 이를 활용하면 코드가 더 간결해지고 가독성이 향상됩니다. 기본 문법 : (매개변수) -> { 실행 코드 }예제: 기존 방식과 비교(1) 익명 클래스 방식// Runnable 인터페이스를 익명 클래스로 구현Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, World!"); }}; (2) 람다식 사용Runnable runnable = () -> System.out.println("Hello, World!..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 37일차 쿠키, 세션 그리고 토큰 1. 쿠키 (Cookie)정의쿠키는 웹 서버가 클라이언트(주로 브라우저)에 저장하도록 보내는 작은 텍스트 파일입니다.클라이언트는 이후 같은 사이트에 접속할 때 쿠키 데이터를 함께 전송하여 서버가 사용자의 상태를 파악하도록 돕습니다.주요 특징저장 위치: 클라이언트(브라우저)의 로컬 저장소.수명: 만료 시간(Expiration)을 지정할 수 있으며, 만료 시간이 지나면 자동으로 삭제됨. (세션 쿠키는 브라우저 종료 시 삭제됨)보안: HTTPOnly, Secure, SameSite 등의 속성을 통해 보안 강화가 가능하지만, 기본적으로 클라이언트에 저장되므로 민감 정보를 저장하는 것은 권장되지 않음.크기 제한: 개별 쿠키는 보통 몇 KB 크기로 제한되며, 브라우저마다 저장 가능한 쿠키 수에도 제한이 있음.사용 ..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 34일차 Spring MVC Spring MVCMVC 패턴이란?MVC 패턴은 Model-View-Controller의 약자로, 소프트웨어 개발에서 흔히 사용되는 디자인 패턴입니다. 복잡한 애플리케이션을 세 가지 주요 구성 요소로 나누어 관리함으로써 코드의 유지보수성과 확장성을 높이는 데 효과적입니다.Model: 데이터를 표현하고 비즈니스 로직을 담당하는 부분입니다. 데이터베이스와의 상호 작용, 데이터 검증 등의 작업을 수행합니다.View: 사용자 인터페이스를 담당하는 부분입니다. 사용자에게 보여지는 화면을 구성하고, 사용자의 입력을 받습니다.Controller: 사용자의 요청을 받아 모델과 뷰를 연결하는 역할을 합니다. 사용자의 요청을 분석하고, 모델을 업데이트하며, 적절한 뷰를 선택하여 응답합니다. 서블릿/JSP와 MVC 패턴서블..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 32일차 Spring 2 1. Optional: Null 처리를 우아하게 관리하여 코드 안정성을 높이는 도구.Java 8에서 도입된 ‘클래스’, 스프링에서 Null값을 처리하거나 의존성을 더 안전하게 관리하는 데 자주 사용됨. (예외처리를 메서드로 한다) 주요 메서드:Optional.of(value): 절대 null이 아닌 값을 감싸는 Optional 객체를 반환합니다. 값이 null이면 예외를 발생시킵니다.Optional.ofNullable(value): 값이 null일 가능성이 있을 때 Optional 객체로 감쌉니다.Optional.empty(): 빈 Optional 객체를 생성합니다.orElse(defaultValue): Optional 값이 비어있을 경우 기본값을 반환합니다.orElseThrow(exceptionSupp..
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 30일차 Spring https://spring.io/ Spring | HomeCloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.spring.io스프링 공식 홈페이지 https://start.spring.io/다음과 같이 설정하고 Generate 해주었다.Jar War 차이.JAR 파일은 Java 클래스 파일, 관련 리소스(이미지, 설정 파일 등) 및 메타데이터를 하나의 파일로 압축한 것.WAR 파일은 웹 애플리케이션을 구성하는 요소들(서블릿, JSP, HTML, CSS, JavaScript, 이미지, 설정 파일 등)을 하나의 파일로 압축한 것. JAR는 Java 코드와 리소스를 묶어서 ..