Spring 27

@ControllerAdvice에 대해 알아보자.

이 글은 @ControllerAdvice에 대한 동작원리를 이해하기 위해서 다른 외부 블로그나 링크들을 참조하여 정리한 포스팅 입니다. @ControllerAdvice를 사용하는 이유 많은 예외 처리들을 적용하게 되면 코드량이 증가하고 복잡해집니다. 따라서, 비지니스 로직에 집중하기 힘들고 유지보수 하기가 어려워 집니다. 이러한 문제를 개선하기 위해서 @ExceptionHandler와 @ControllerAdvice를 사용한다고 생각하면 됩니다. 여러 예외 처리들을 적용하다보면 코드가 엄청나게 복잡해진다. 그렇게 되면 유지보수하기 아주 어려워진다. 또한, 비지니스 로직에 집중하기 어렵고, 비지니스 로직과 관련된 코드보다 예외 처리를 위한 코드가 더 많아지는 경우도 생긴다. 이런 문제를 조금이라도 개선하기..

시큐리티 로그인과 권한 처리

시큐리티 로그인 1. 시큐리티가 /login 주소 요청이 오면 낚아채서 로그인을 진행시킨다. @Configuration @EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록이 됩니다. public class SecurityConfig extends WebSecurityConfigurerAdapter { ... @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/manager/**").access("hasRole(..

참고하면 좋은 URI 설계 개념

문서 단일 개념 예) /members/100, /files/star.jpg 컬렉션(collection) 서버가 관리하는 리소스 디렉턱리 서버가 리소스의 URI를 생성하고 관리 예) /members 스토어(store) 클라이언트가 관리하는 자원 저장소 클라이언트가 리소스의 URI를 알고 관리 예) /files 컨트롤러(controller), 컨트롤 URI 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행 동사를 직접 사용 예) /members/{id}/delete https://restfulapi.net/resource-naming REST API URI Naming Conventions and Best Practices In REST, having a strong and consistent R..

Spring/HTTP 2023.09.11

[JPA 활용1] 프로젝트 환경설정

프로젝트 환경설정 목차 프로젝트 생성 라이브러리 살펴보기 View 환경설정 H2 데이터베이스 설치 JPA와 DB 설정, 동작확인 프로젝트 생성 스프링 부트와 JPA를 가지고 프로젝트를 만듬. ※ 참고로 요즘은 JSP를 거의 안씀. 스프링 부트 스타터(https://start.spring.io/) 사용 가능 : web, thymeleaf, jpa, h2, lombok groupId : jpabook artifactId : jpashop 압축 해제하고 import lombok은 plugin을 깔아야 한다. File - Settings - Plugin - lombok 검색 라이브러리 살펴보기 ./gradlew dependencies spring boot starter는 logback을 기본적으로 사용한다. 핵..

Spring/JPA 2023.03.21

스프링 핵심 원리 이해1

비지니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다. (미확정) 요구사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 그렇다고 이런 정책이 결정될 때까지 개발을 무기한..

Spring 2023.03.06

객체 지향 설계와 스프링

스프링 프레임워크 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합 : 캐시, 이메일, 원격 접근, 스케줄링 테스트 : 스프링 기반 테스트 지원 언어 : 코틀린, 그루비 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용 최근에는 스프링 부트를 통해서 스프링 프레임워크를 사용한다. 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성 Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨 손쉬운 빌드 구성을 위한 starter 종속성 제공 스프..

Spring 2023.03.05

객체지향 쿼리 언어2 - 중급 문법

JPQL - 경로 표현식 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 경로 표현식 용어 정리 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 ( ex : m.username ) 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 (ex : m.team) 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션(ex : m.orders) 경로..

Spring/JPA 2023.03.05

HTTP 메소드 활용

클라이언트에서 서버로 데이터 전송 데이터 전달 방식은 크게 2가지 쿼리 파라미터를 통한 데이터 전송 GET 주로 정렬 필터(검색어) 메세지 바디를 통한 데이터 전송 POST, PUT, PATCH 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 클라이언트 → 서버 데이터 전송 : 4가지 상황 1) 정적 데이터 조회 이미지, 정적 텍스트 문서 2) 동적 데이터 조회 주로 검색, 게시판 목록에서 정렬 필터(검색어) 3) HTML Form을 통한 데이터 전송 회원 가입, 상품 주문, 데이터 변경 4) HTTP API를 통한 데이터 전송 회원 가입, 상품 주문, 데이터 변경 서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax) 정적 데이터 조회 쿼리 파라미터 미사용 이미지, 정적 텍스트 문서 조회는 GE..

Spring/HTTP 2023.03.02

HTTP 메소드

HTTP 메소드 HTTP API를 만들어보자 HTTP 메소드 - GET, POST HTTP 메소드 - PUT, PATCH, DELETE HTTP 메소드의 속성 HTTP API를 만들어보자. 요구사항 회원 정보 관리 API를 만들어라. 회원 목록 조회 회원 조회 회원 등록 회원 수정 회원 삭제 API URI 설계 URI(Uniform Resource Identifier) 회원 목록 조회 / read-member-list 회원 조회 / read-member-by-id 회원 등록 / create-member 회원 수정 / update-member 회원 삭제 / delete-member 이건 좋은 URI 설계일까? → X 가장 중요한 것은 리소스 식별 API URI 고민 리소스의 의미는 뭘까? 회원을 등록하고 ..

Spring/HTTP 2023.03.02

객체지향 쿼리 언어1 - 기본 문법

JPQL(Java Persistence Query Language) JPQL - 기본 문법과 기능 JPQL 소개 JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 결국 SQL로 변환된다. JPQL 문법 select m from Member as m where m.age > 18 엔티티와 속성은 대소문자 구분O (Member, age) JPQL 키워드 대소문자 구분 X (SELECT, FROM, where) 엔티티 이름 사용, 테이블 이름이 아님(Member) 별칭은 필수(m) (as는 생략가능) 집합과 정렬 GROUP BY, HAVING ORDER BY T..

Spring/JPA 2023.03.01