Category: Spring

Spring MVC의 ArgumentResolver 파헤치기

궁금한 점스프링 MVC로 컨트롤러 코드를 작성하다보면 다음과 같이 컨트롤러 메서드의 파라미터에 다양한 값을 받을 수 있음을 알게 된다. 1234567@RestControllerpublic class SomeClass { @GetMapping("/some") public ResponseEntity<?> getS

F12 서비스 의존성 개선 리팩토링

F12 서비스 링크(https://f12.app/) 기존 상황F12 서비스 백엔드 아키텍처는 도메인 개념 별로 의존성을 그려보면 다음과 같다.총 세가지 양방향 의존이 생긴다. 이런 상황이면 Review에 변경이 생기면 Product -> InventoryProduct -> Member -> Following 까지 변경에 따른 영향이 생길 수

스프링의 프록시

프록시 패턴의 종류간단하게 프록시 패턴을 어떻게 구현하는 지 간략하게 알아보자. 인터페이스 기반 프록시인터페이스가 있고 그 인터페이스를 구현한 구현체가 있는 상황일 때 사용한다. 그 구현체의 프록시는 인터페이스를 구현하여 만든다. 프록시는 타겟으로 구현체를 멤버 변수로 가지며 퍼블릭 메서드를 수행할 때 타겟 객체의 메서드 호출과 함께 프록시 로직을 수행한다

스프링의 예외 처리

기본 예외 처리스프링은 기본적으로 예외가 발생하면 /error에 매핑된 핸들러를 찾는다.만약 /error에 매핑되지 않았다면 우리가 흔히 보게 되는 Whitelabel Error Page를 보여주게 된다. 스프링 MVC의 요청 흐름요청이 오면 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 핸들러 순으로 진행된다.이때 컨트롤러에서 예

RestDocs의 Custom Snippet으로 에러코드 쉽게 문서화하기

배경RestDocs로 테스트를 통과한 API에 대해서 문서화를 할 수 있다.우리 프로젝트에서는 정상 요청 흐름을 중점으로 API 문서화했다.하지만 해당 API에서 발생 가능한 애외 상황에 대한 응답도 정리해줘야 했다.그래서 우리는 백엔드 단에서 발생하는 예외에 매핑되는 예외 코드를 만들어서 예외 상황 발생 시 해당 예외 코드를 바디에 담아서 반환하도록 해서

Spring boot에서 JWT 토큰 발급 구현하기

도입 배경우아한테크코스에 프로젝트를 진행하는데 사용자의 정보를 기억해야 하는 상황이 필요한 경우가 있다. 예를 들면 사용자가 작성한 리뷰를 삭제하거나 수정할 수 있어야 한다. 그러려면 현재 접속한 사용자가 이전에 리뷰를 작성한 사용자임을 알아낼 수 있어야 한다. 일단 사용자를 구분하기 위해서 로그인을 해서 사용자를 구분해서 관리할 수 있도록 했다. 이때 사

Transactional 어노테이션

요약 트랜잭션이 무엇인지 알아본다.@Transactional의 Propagation 옵션을 알아본다.@Transactional의 롤백 기준을 알아본다.@Transactional 적용 실패하는 경우를 알아본다. 트랜잭션?모두 반드시 성공해야 하는 연속된 작업들을 트랜잭션이라 한다.만약 작업들 중 하나만 실패해도 모든 작업들이 어플리케이션의 상태를 변경시키

Bean Validation으로 검증하기

Bean Validation일반적인 유효성 검사 로직지켜져야 할 조건에 맞지 않은 상황에 로직을 진행하려는 경우 예외를 터트려서 의도하지 않은 진행을 막을 수 있다. 1234567891011public class Name { private final String name; public Name(String name) {

Spring IoC 컨테이너, 컴포넌트 스캔, 빈 생명주기

요약 (다음 질문의 정답을 안다면 이 포스트를 읽지 않아도 된다.) IoC 컨테이너와 ApplicationContext는 완전히 같은 개념인가? IoC 컨테이너를 구성하는 방법은 어떤 것이 있는가? BeanFactory와 ApplicationContext의 차이를 알고 있는가? IoC 컨테이너스프링의 IoC 컨테이너는 객체를 인스턴스화하고 구성 및

왜 스프링을 쓰는 걸까??(IoC, DI)

요약 의존 역전과 유연함을 위해서 DI하도록 객체를 설계하는 경우,매번 해당 객체를 사용할 때마다 필요한 객체를 찾아서 주입해줘야 한다.스프링 프레임워크는 DI를 대신해주는 역할을 한다. 유연한 설계를 위해서객체지향 설계 원칙 중 SOLID 원칙이 있다.그 중 D에 해당하는 의존 역전 원칙은 상위 모듈이 하위 모듈의 구현에 의존하지 말고, 상위 모듈이

REDIRECT와 FORWARD의 차이!!

REDIRECT와 FORWARD의 차이REDIRECT리다이렉트는 “서버가 클라이언트에게 해당 URL로 다시 요청하라고 명령하는 것”이다. 클라이언트가 서버의 URL에 요청 (get이던 post던 상관없이) 서버의 컨트롤러가 해당 URL에 매핑된 메서드 실행 해당 메서드가 다른 URL로 리다이렉트 시킬 경우, 클라이언트는 그 URL로 GET 요청을 새로 실

스프링 부트의 특징

스프링 부트의 특징스프링 부트는 스프링의 복잡한 xml 간편화와 빠른 개발을 위해 등장했다.부트는 웹을 위해 필요한 필수 라이브러리를 내장하고 있다.(톰캣 등) 스타터(starter) : 특정 모듈을 사용할 수 있도록 필요한 라이브러리를 모아놓은 라이브러리 모음 자동설정(AutoConfiguration) : 추가된 라이브러리나 모듈을 사용할 수 있도록 자동

스프링 프레임워크의 기본 개념 정리 (POJO, Ioc/DI, AOP)

스프링 프레임워크의 기본 개념 정리 (POJO, Ioc/DI, AOP)POJO포조는 plane old java object란 의미인데, 필자도 처음에 이게 뭔 소린지 잘 이해가 안갔다.쉽게 말하면, 기본 자바의 기능 외에 다른 클래스를 사용하지 말자는 뜻이다.클래스나 메소드 시그니처를 개발자가 필요한 대로 만들어서 사용하자는 의미다. 서블릿으로 자

11. 카카오 로그인 OAuth2.0 개념

실제에는 나라는 사람은 한명인데, 수만은 웹사이트마다 회원가입하면, 인터넷 속 나는 엄청 많아진다…그래서 네이버, 카카오 계정으로 다른 사이트를 사용할 수 있게하자! 장단점 장점 : 인증처리를 우리가 안해도 됨단점 : 각 사이트에서 필요한 정보가 네이버나 카카오 정보에 없을 수도 있음… OAuth (Open Auth)인증 처리를 대신해주는 기능. 인증