Backend 취업준비(37)
-
@Transactional사용 시 주의 사항과 원인
1. 프록시와 내부 호출의 문제 @Transactional이 적용된 메서드(코드 예시의 internal())를 @Transactional이 적용되지 않은 메서드(코드 예시의 external()) 안에서 사용하게 되면, external()메서드를 사용할 때 우리의 기대와 다르게 internal() 에서 트랜잭션이 전혀 적용되지 않는다. 이는 @Transactional 이 작동하는 프록시 객체의 원리에 있다.코드 예시@Slf4jstatic class CallService { public void external() { log.info("callExternal"); printTxInfo(); internal(); } @Transactional publ..
2024.09.21 -
스프링MVC, DispatcherServlet, ArgumentResolver, HttpMessageConverter
서블릿 이란?위와 같은 HTTP요청, 응답 흐름에 필요한 일련의 작업들에서 의미있는 비지니스 로직을 제외한 모든 작업들을 자동화 해주는 객체HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest 객체 제공HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse 객체 제공 서블릿 객체의 작동 방식스프링 부트가 실행하면서 내장 통켓 서버가 스프링 부트가 내장 톰켓 서버를띄워줌. 톰켓 서버 (WAS)는 내부에 Servlet Container 기능을 가지고 있음WAS의 Servlet Container가 servlet 객체를 생성클라이언트가 해당 servlet을 사용하는 http 요청을 하면, Servlet Container에서 request,response 객..
2024.08.15 -
AOP를 활용한 api 중복 요청 방지 (따닥 방지)
숙박 서비스를 만들면서 숙소 등록 / 예약 등록 버튼을 누를 때 버튼을 실수로 여러번 누른다거나 하는 경우가 있었고, 이는 서비스에 안좋은 영향을 끼칠 것이라고 판단하여 이를 방지하고자 하였다.프론트로 alert창으로 1차적으로 막는걸 시도했지만, 약간의 버튼을 누르고 alert창이 뜰 때 까지 약간의 텀이 있는 경우도 존재해서 충분하지 않았다. 이에 스프링 AOP를 활용하였다. HttpServletRequest 객체에서 우저 정보를 가져온 후 시간 정보와 함께 HashMap에 저장한다HttpServletRequest는 서블릿 컨테이너(예: 톰캣)가 HTTP 요청에 대한 정보를 제공하기 위해 사용하는 객체. 클라이언트로부터의 요청 정보를 포함하고 있으며, 파라미터, 헤더, 세션 정보 등을 제공특정 기준 ..
2024.07.22 -
@WebMvcTest를 사용한 Controller 단위 테스트
스프링 시큐리티가 적용된 곳에서 @SpringBootTest 를 사용하여 controller계층을 테스트 해보았었는데 이것을 @WebMveTest로 단위테스트로 리팩토링 하면서 많은 오류들을 마주하였어서 기록합니다먼저 단순히 @SpringBootTest 어노테이션을 @WebMveTest로 바꾸어 주게 되면 다음과 같은 오류 메세지를 확인할 수 있다 주요 오류 메세지org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argum..
2024.07.15 -
GitHub Flow로 협업하기
1. 로컬의 브랜치 확인 터미널에서 현재의 브랜치를 확인한다 git branch 만약 이전에 작업을 끝낸 feature브랜치에 위치 한다면 master브랜치로 이동 git switch master 그 후 로컬에서 작업을 끝낸 feature브랜치 삭제 하려면 삭제 로컬 master 브랜치가 최신 상태인지 확인. 만약 최신이 아니라면, 최신 변경 사항을 pull 개발 환경을 업데이트 git pull origin master 2. feature 브랜치 생성 브랜치 이름 작업할 이슈명이랑 통일하기 git checkout -b feature/issue#1 master master 브랜치로 부터 분기된 feature/issue#1를 생성하고 이동하겠다는 뜻 3. 기능 개발 새로운 기능을 구현하고 코드를 작성. 이 ..
2024.03.24 -
@Transactional, 영속성 컨텍스트
@Transactional데이터 접근 기술마다 데이터 베이스 접근 방법이 다름하지만 실제로 하는 일은 비슷함 => 추상화 가능@Transactional은 Spring AOP로 구현되어 있다.빈 생성시 @Transactional애노테이션이 붙어있다면 프록시 객체가 빈으로 등록된다.=> @Transactional를 Service 클래스에 선언하면 해당 클래스에서 비지니스 로직을 수행할 때 Service의 프록시 객체가 빈으로 등록되어 수행 스프링에서 @Transactional 을 이용하여 트랜잭션 처리를 하는 방법DB와 관련된, 트랜잭션이 필요한 서비스 클래스 혹은 메서드에 @Transactional 어노테이션을 달아주어야 한다클래스, 메서드 모두에 @Transactional 어노테이션을 붙이면 메서드 레..
2024.03.23