Spring 9

Spring 커스텀 예외 만들기와 전역 예외 처리

Spring으로 회원 조회 API를 구현하면서 존재하지 않는 회원을 조회했을 때 예외를 어떻게 발생시키고, 발생한 예외를 어떻게 처리하는지 학습했다.처음에는 IllegalStateException을 사용했다.@Transactional(readOnly = true)public GetMemberResponse getOne(Long memberId) { Member member = memberRepository.findById(memberId) .orElseThrow( () -> new IllegalStateException("없는 멤버입니다.") ); return new GetMemberResponse( ..

Spring 2026.08.04

[Spring] JPA 연관관계 매핑 정리

연관관계 매핑이란?객체지향에서는 객체와 객체가 서로를 참조하지만, 데이터베이스에서는 객체가 아닌 외래키(Foreign Key) 로 관계를 표현한다.JPA 연관관계 매핑은 객체의 참조를 데이터베이스의 외래키와 연결해주는 기능이다. 예를 들어 회원과 주문이 있다고 가정하면,회원 1명은 여러 개의 주문을 할 수 있다.주문 1개는 회원 1명에게만 속한다.데이터베이스에서는 다음과 같이 표현된다.Member----------------idnameOrder----------------idpricemember_id (FK) 하지만 객체에서는 숫자(member_id)를 저장하지 않고 객체를 저장한다.@ManyToOne@JoinColumn(name = "member_id")private Member member; 즉, 객..

Spring 2026.07.06

[Spring] Session과 JWT란?

웹 서비스에서 로그인 기능을 구현할 때 가장 중요한 문제는 "로그인 상태를 어떻게 유지할 것인가?" 이다.HTTP는 Stateless(무상태) 프로토콜이기 때문에 요청이 끝나면 이전 요청을 기억하지 않는다. 즉, 로그인 요청이 끝난 후 다음 요청이 들어오면 서버는 사용자가 누구인지 알 수 없다.그래서 로그인 상태를 유지하기 위한 기술로 Session과 JWT를 사용한다. HTTP는 왜 로그인을 기억하지 못할까?예를 들어 인스타그램에 로그인했다고 가정해보자.로그인↓홈 화면↓좋아요↓댓글 작성 만약 로그인 정보를 저장하지 않는다면사용자는 매 요청마다 로그인해야 한다.홈 화면 → 아이디, 비밀번호 입력좋아요 → 아이디, 비밀번호 입력댓글 → 아이디, 비밀번호 입력 이 문제를 해결하기 위해 Session과 JW..

Spring 2026.07.03

[Spring] 핵심 개념 정리 (Bean, IoC, DI)

스프링을 처음 공부하면 가장 많이 듣는 단어가 있다.BeanIoCDI처음에는 어려워 보이지만 사실 이 세 가지는 하나의 흐름으로 연결되어 있다. Bean이란? Bean = 스프링이 직접 생성하고 관리하는 객체(Object) 예를 들어@Servicepublic class MovieService {} 프로그램이 실행되면스프링이 객체 생성을 대신 실행한다.new MovieService(); 그리고 이 객체를 보관한다.이렇게 스프링이 관리하는 객체를 Bean이라고 한다. Spring ┌─────────────────┐ │ │ │ MovieService │ ← Bean │ MovieRepository ..

Spring 2026.07.02

[Spring] Request DTO는 스프링이 만들어주는데, Response DTO는 왜 내가 만들어야 할까?

오늘 스프링을 공부하면서 가장 궁금했던 점은CreateMovieRequest는 내가 new를 하지 않았는데도 객체가 생성되어 있었고,반대로 CreateMovieResponse는 내가 직접 new를 해서 만들어야 했다.왜 이런 차이가 있을까?@PostMapping("/movies")public ResponseEntity createMovie( @RequestBody CreateMovieRequest request) { return ResponseEntity.status(HttpStatus.CREATED) .body(movieService.save(request));} Request DTO는 스프링이 만들어준다.사용자가 서버에 요청을 보내면 보통 JSON 형태로 전달된다..

Spring 2026.07.01

[Spring 입문] 스프링 전체 흐름 정리

스프링은 한마디로사용자의 요청을 받아서 DB와 연결해 데이터를 처리하고 다시 응답하는 구조 이 전체 흐름은 아래 3-Layer 구조로 움직인다.1. 전체 구조 한눈에 보기 2. Controller (입구 / 안내 데스크)Controller는 사용자의 HTTP 요청을 받는 입구@RestController@RequiredArgsConstructorpublic class MemoController { private final MemoService memoService; @PostMapping("/memos") public ResponseEntity createMemo(@RequestBody CreateMemoRequest request) { return ResponseEntity...

Spring 2026.06.29

[Spring 입문] Servlet 이해하기

서블릿(Servlet)이란?클라이언트의 HTTP 요청(Request)을 받아 처리하고, 처리 결과를 HTTP 응답(Response)으로 보내는 자바 프로그램 웹 애플리케이션에서 브라우저와 서버 사이를 연결해 주는 역할 서블릿의 역할서블릿은 다음과 같은 역할을 수행한다.클라이언트의 HTTP 요청(Request)을 받는다.요청 데이터를 읽고 해석한다.요청을 적절한 비즈니스 로직(Controller, Service)으로 전달한다.처리 결과를 HTTP 응답(Response)으로 만들어 클라이언트에게 전송한다. 서블릿 동작 과정브라우저↓HTTP 요청(Request)↓Servlet↓Controller↓Service↓Repository↓DB↓Controller↓Servlet↓HTTP 응답(Response)↓브라우저 ..

Spring 2026.06.26

[Spring 입문] 어노테이션 & Lombok

스프링 시작하면서 처음 들어보는 낯선 용어들..어노테이션, Lombok 1. 어노테이션 (Annotation)어노테이션이란? 자바 코드에 메타 데이터를 추가하여 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용. 메타데이터란 데이터를 설명하는 데이터다.어노테이션은 프로그램에게 추가 정보를 알려주는 표시(메타데이터) 라고 보면 된다. 즉, 간단히 말해서 어노테이션은 프로그램이 읽는 표시 정도로 생각하면 될듯. 알고보니 이미 어노테이션을 보고 쓴적이 있었다@Overridepublic String toString() {} 부모의 메서드를 재정의 하는 오버라이드도 어노테이션이었다는거! 2. Lombok Lombok은 반복되는 코드를 자동으로 생성해주는 라이브러리이다. ..

Spring 2026.06.25

[Spring 기초] Spring이란?

Spring은 웹서버 개발을 쉽게 만들어 주는 도구상자이다.Java로 개발할때 많은 코드가 필요하다면, Spring을 사용하면 단 몇줄이면 구현이된다. 딸깍으로 할 수 있다고 한다.. 이제 그 유명한 Spring을 한번 배워 보자!! Spring도 있고, Spring Boot도 있던데 두 개의 차이가 뭐지..? 라는 의문이 있었는데 Spring이 딸깍이라면 Spring Boot는 그 딸깍마저 더 간소화해서 개발자들이 개발 로직에 더 집중할 수 있게 나온거라고 한다..아자쓰! 자주 듣는 용어 중에 라이브러리랑 프레임워크가 있는데 라이브러리란?개발에 필요한 클래스, 함수 들을 모아 놓은 것. 프레임워크란?개발을 편하게 하기 위해 개발환경 틀을 제공하는 것 대충 요약하자면프레임워크 틀 안에서 라이브러..

Spring 2026.06.24