본 포스팅은 인프런 - Spring Boot를 이용한 RESTful Web Service 개발 강의를 바탕으로 공부하고 정리한 글입니다. HTTP Status Code 제어하기 클라이언트가 요청을 보내면 서버는 그 요청을 처리한 뒤 응답코드를 반환한다. 이때 응답코드로 적절한 상태코드를 반환하는 것이 좋은 REST API 설계하는 방법이다. 성공 응답이라 하여 그냥 200 OK만을 응답코드로 반환하는 것보다, 새로운 객체(인스턴스)생성이 있는 경우에는 201 Created와 함께 생성된 객체를 확인할 수 있는 정보를 함께 반환해준다면 더할나위 없이 좋을 것이다! 그럼 어떻게 상태코드를 제어할 수 있을까? 예제를 통해 알아보자. 간단하게 사용자를 등록하는 예제이다. 👉🏻 사용자 도메인 클래스 @Data @..
🌱 Spring
REST API는 프론트엔드 개발자, 백엔드 개발자 모두 꼭 알고 있어야 하는 개념이다. 나 또한 정말 많이 들었는데, 그 개념이 아리송한 부분이 있어서 공부를 하다가 초보자인 나에게 아주 쉽게 다가온 유툽 영상이 있어서 내용을 까먹지 않기 위해 정리해보려고 한다. 들어가기 앞서.. REST API는 정보들이 주고받아지는 데 있어서 개발자들 사이에 널리 쓰이는 일종의 형식이라 할 수 있다. 예를 들어 우체국에 가면 송장들이 마련되어 있고, 사용자들은 그걸 채워넣기만 하면 되는 것처럼 REST API도 어떠한 기술이나 제품이 아닌 형식이기 때문에 어떤 프로그래멍 언어를 쓰든, 어떤 프레임워크를 쓰든 REST API라는 형식에 맞춰 기능을 만들어내면 되는 것이다. 그럼 일단 API라는 용어부터 간단하게 알아..
스프링 시큐리티 인증을 받은 로그인 한 사용자 정보를 타임리프에서 사용하고 싶을 때 방법을 간다하게 정리하고자 한다. 타임리프 + 시큐리티 사용하기 타임리프와 타임리프에 시큐리티 정보를 사용하기 위해 HTML에 네임스페이스를 등록해줘야 한다. 권한에 따른 뷰 처리하기 // admin 권한일 경우 보이기 // user 권한일 경우 보이기 sec 문법을 사용해 로그인 된 사용자의 권한에 따라 처리를 다르게 할 수 있다. 👉🏻 예제 상품 등록 Reference 타임리프로 화면단에서 사용자 시큐리티 정보 가져오기
JPA에서 엔티티를 변경하기 위해서 변경감지와 병합이라는 기능을 사용하는데, 이번 포스팅에서는 이 변경감지와 병합을 어떻게 사용하는지 알아보도록 하겠다. 변경감지와 병합을 알기 앞서 우선 준영속 엔티티가 무엇인지 이해할 필요가 있다. 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 임의로 만들어낸 엔티티도 기존에 DB에 한번 저장되어 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다. 이러한 준영속 엔티티를 수정할 때 변경 감지와 병합이 사용된다. 그럼 이제 변경감지와 병합에 대해 알아보도록하자. 준영속 엔티티 수정 방법 변경 감지(dirty checking) 사용 병합(merge) 사용 변경 감지 (Dirty Checking) @Transactional void update(It..
엔티티에는 가급적 Setter를 사용하지 말자. Setter가 모두 열려 있다면, 변경 포인트가 많아 유지보수가 어렵다. ⭐ 모든 연관관계는 반드시 지연로딩으로 설정해라. 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기가 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 따라서 실무에서는 모든 연관관계를 지연로딩(LAZY)으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 한다면, fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해줘야 한다. (@XToMany 관계는 기본이 지연로딩이므로 설정해줄 필요 없음) @ManyToOne(fetch = Fe..
본 포스팅은 인프런 - 스프링 MVC 2편을 강의를 바탕으로 공부하고 정리한 글입니다. 📢 본 포스팅에 앞서 예제를 위한 프로젝트를 생성하자. 더보기 📌 프로젝트 생성 Project: Gradle Project Language: Java Spring Boot: 2.7.0 (정식버전 중 가장 최신 버전 선택) Project Metadata Group: hello Artifact: typeconverter Name: typeconverter Package name: hello.typeconverter Packaging: Jar Java: 11 Dependencies : Spring Web, Thymeleaf, Lombok 📌 프로젝트 실행 인텔리제이로 프로젝트를 Open하고, 동작하는지 확인한다. 기본 메인..
본 포스팅은 인프런 - 스프링 MVC 2편을 강의를 바탕으로 공부하고 정리한 글입니다. 웹 페이지가 아닌 API 예외는 어떻게 처리하는지 알아보자. API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려줘야하므로, 생각할 내용이 더 많다. API 예외처리 (기존 방법) 서블릿 우선 서블릿 오류 페이지 방식으로 예외처리를 해보자. 👉🏻 서블릿 오류페이지 등록 📂 WebServerCustomizer @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { Err..
본 포스팅은 인프런 - 스프링 MVC 2편을 강의를 바탕으로 공부하고 정리한 글입니다. 📢 본 포스팅에 앞서 예제를 위한 프로젝트를 생성하자. 더보기 📌 프로젝트 생성 프로젝트 선택 Project: Gradle Project Language: Java Spring Boot: 2.6.x (정식버전 중 가장 최신 버전 선택) Project Metadata Group: hello Artifact: exception Name: exception Package name: hello.exception Packaging: Jar Java: 11 Dependencies : Spring Web, Thymeleaf, Lombok, Validation 📌 프로젝트 실행 인텔리제이로 프로젝트를 Open하고, 동작하는지 확인 ..