Spring 16

Spring - Feign Client

기존에 RestTemplate을 사용했었는데 Deprecated된다는 말이 있어 다른 요청방법을 찾아보다가 WebClient를 알게 되었는데 해당 WebClient는 MVC에 적용하는게 맞지 않다는 생각이 들어 Feign Client에 대해 찾아보았다. 요청날리는 게 RestTemplate보다 간편하다. 일단 Feign Client는 무엇일까? Feign은 Netflix에서 개발된 Http Client Binder이다. 공식문서에 따르면 Feign is a declarative web service client 라고 명시되어있다. 즉 선언적인 웹 클라이언트라는 것이다. Feign을 사용하려면 interface를 작성하고 해당 interface에 annotation들을 선언해주면 된다. 코드구현 코드는 공..

Spring 2023.04.24

AWS - 배포와 기록(Spring boot)

우리 프로젝트 배포는 AWS EC2와 S3 만 사용했고 Spring Boot (gardle) 로 배포진행 그리고 ubuntu 사용함 일단 먼저 겪었던 문제점들 1. Ubuntu는 맨 앞에 / 를 인식하지 못한다. -> 컨트롤러에서 view 이름을 보낼때 앞에 / 가 있으면 해당 경로를 인식하지 못하고 파일을 못 찾는다는 말이 나오게 된다 컨트롤러에서 view 이름에 / 는 제거가 필요하다. 2. 메모리는 2기가 이상 서버를 유지해야한다. -> 테스트를 위해 t2.nano(0.5) 테스트 했을 때 docker 이미지를 다운 받는 과정에서 바로 서버가 터졌다. t2.micro(1) 로 다시 올려서 진행했는데 docker 이미지를 다운받는 거 까지와 openjdk를 다운 받는거 까지는 문제가 없었다. 여기서 ..

Spring 2023.04.14

Spring - MockMvc

MockMvc -스프링에서 제공하는 테스트 도구 중 하나로, 컨트롤러의 테스트를 지원하는 모듈이다. MockMvc를 사용하면 서버를 띄우지 않고도 컨트롤러의 동작을 테스트할 수 있다. -MockMvc는 브라우저에서 요청을 보낼 떄와 동일한 방식으로 HTTP 요청을 생성할 수 있으며, 이를통해 컨트롤러의 응답 결과를 검증할 수 있다. 또한 MockMvc를 사용하여 컨트롤러에서 사용되는 다른 빈들을 Mock객체로 대체하여 테스트를 진행할 수 있다. -MockMvc 클래스에서 가장 중요한 역할을 하는 메서드,는 perform()이다. 메서드의 선언부는 테스트 대상에 HTTP 메시지를 요청(RequestBulder)하고 실행 결과를 ResultActions에서 확인할 수 있다. 해당 perform 메소드는 인자..

Spring 2023.04.03

Spring - Filter

1. Filter 필터는 말 그대로 요청과 응답을 정제하는 역할을 한다. DispatcherServlet에 요청이 들어가기 전에 만나면서 서버에서 응답이 마지막에 만나는 곳이기도 하다. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 컨테이너에서 관리가 되는 것이고, 스프링 범위 밖에서 처리되는 것이다. 여기서 의문이 들어서 글들을 찾아봤다. 스프링 범위 밖이라는 것은 스프링에서 관리를 하지 못한다는 것이고 빈으로도 당연히 등록하지 못할텐데 어떻게 빈으로 등록할 수 있는거지? 답은 https://mangkyu.tistory.com/221 [Spring] 필터(Filter)가 스프링 빈 등록과 주입이 가능한 이유(DelegatingFilterProxy의 등장) - (2) 몇몇 포스팅과 조금 오래된 책들을 보면 필..

Spring 2023.03.30

Spring - DispatcherServlet

스프링의 정석을 학습하고 정리한 내용입니다 DispatcherServlet 각 서블릿들은 입력을 받아야 하는데 이 공통 부분을 FrontContrller로 묶어서 정리할 수 있다. 결국 공통처리 부분을 따로 빼서 처리하는 것이 DispatcherServlet의 역할이다. DispatcherServlet이 앞에서 전처리를 해준다. 각 Servlet들이 공통적으로 처리해야 할 일을 앞부분에서 처리해준다. HandlerMapping Map으로 데이터를 관리한다. Key로는 URL(/login.do)을 관리하고 value로 메서드 정보를 저장하고 있다가 요청이 들어오면 해당 요청을 어던 메소드가 처리하면 되는지 DispatcherServlet이 HandlerMapping에게 알려달라고 요청한다. HandlerM..

Spring 2023.02.24

Spring - 작성자 체크하기

원래 기존 코드는 Querydsl을 사용하여 이런식으로 작성자와 Room에 연관된 Hotel에 writer 열을 현재 로그인한 사용자가 맞는지 체크하는 메소드를 만들어서 사용하려 했는데 이렇게 사용할 경우 컨트롤러에서는 쿼리가 두 번 생성되어 날라간다. 기존 자세히 보기로 필요한 select from where id =? 쿼리 하나와 작성자가 맞는지 체크하는 쿼리 이런식으로 날라간다. 쿼리 한 번으로 해결할 수 있을 거 같아 합쳐봤다. FETCH JOIN은 기본적으로 OneToMany 관계는 하나 초과해서 같이 못 부르지만 ManyToOne은 부를 수 있다. 여기서 RoomImage는 Room과 OneToMany이다. Hotel은 ManyToOne의 관계를 갖는다. 메소드를 동작시켜 본다면 left ou..

Spring 2023.02.09

Spring - AOP,@Transactional

AOP(Aspect Oriented Programming) 관점 지향 프로그램이라고 불린다. 관점지향은 쉽게 어떤 로직을 기준으로 핵심적인 관저므 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 그림처럼 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이다. AOP 주요 개념 Aspect : 흩어진 관심사를 모듈화 한 것이고 주로 부가기능을 모듈화한다. Target : Aspect를 적용하는 곳(클래스, 메서드...) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPonit : Advice가 적용..

Spring 2023.01.27

Spring - Session

Session 서로 관련된 요청을 묶은 것이고 요청은 모두 독립적이다 -> 요청들끼리는 공통적인 부분이 없고 독립적이다. Request 가 들어오면 Server는 Request 자체를 구분할 수 없다. 즉 매번 들어온 Request는 새로운 Request라고 생각하는 것이다. 하지만 Session을 통해 이 Request를 공통적인 부분을 만들어 묶을 수 있다. 처음 요청이 들어오면 Sever는 JSESSIONID쿠키(SessionID)가 없는 경우 새로운 SessionID(중복되지 않는 값) 을 만들어 Response (Set- Cookie)를 통해 브라우저에 발급한다. 여기서 중요한 건 각 브라우저마다 새로운 ID를 만들어준다는 것이다. 한 피시 안에서 브라우저 여러창을 띄어서 요청을 날리면 각 브라..

Spring 2022.12.26

Spring - Cookie

쿠키(Cookie ) 이름과 값의 쌍으로 구성된 정보, 아스키 문자만 가능하다. name = value 형식으로 젖아한다. name = value와 domain, path, Max-Age를 저장한다. 특수문자 안됨, 한글은 URL인코딩이 필요하다. 서버에서 브라우저에 저장시킨다. 유효기간이 지나면 자동으로 삭제된다(Max-Age) domain과 path에 대한 정보를 가지고 있어 같은 곳에 요청을 날리면 요청헤더에 담겨 요청된다. Cookie 생성 Cookie ck = new Cookie("id","test"); ck.setMaxAge(60*60*48);//유효기간 2일(48시간) response.addCookie(ck); 쿠키가 생성되면 쿠키는 절대시간과 상대시간 두개를 가지게 된다. (서버와 클라이언..

Spring 2022.12.23

Spring - 파일 올리기(이미지 저장하기 ) - RestController

Spring 에서 MultipartFile 인터페이스를 지원해준다. 파일저장을 도와주고 Temporary storage 에 잠시 있다 요청처리가 끝나면 지워지게 된다. 메소드 소개(getName, getOriginalrFilename, isEmpty, getSize, getBytes, transforTo) 여기서 가장 중요한 것은 transferTo 메소드이다. 메소드에 설명을 간단히 보면 파일을 저장할 수 있고 대상 파일이 이미 존재하는 경우 기존에 존재하는 걸 삭제한다. 1.프론트 부분 Html 코드에 multiple을 추가해준다. 여기서 RestController에 요청을 보내야 하는데 어떻게 보낼까? Axios를 사용해서 RestController에 요청을 보낸다. 하나씩 살펴보자 async fu..

Spring 2022.10.11