전체 글(39)
-
@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 -
부트캠프 회고
부트캠프가 끝난 후 조금이라도 기억이 남아있을 때 경험정리 겸 회고를 작성합니다. 시간순으로 작성했고 개인적인 생각, 느낀 점 위주로 작성하였습니다. 부트캠프는 1월 2일부터 5월 16일까지 약 4.5개월 정도 진행이 되었다 짧은 시간 동안 많은 양을 공부해야 했으므로 각오를 하였음에도 쉽지는 않았다. 중간중간 꺾일 뻔한 순간들이 있었지만, 일정동안 단 하루도 빠지지 않고 책상에 앉았고.. 대부분 순간에 최선을 다했다고 생각한다.또한 개발자를 목표로 하며 올해 초에 혼자 공부할까 부트캠프를 선택할까 고민했었는데, 이런저런 일들을 겪으며 혼자 공부했으면 경험하지 못했을 법한 일들을 겪으며 많은 것을 느낄 수 있었기에 만족하는 시간이었다. 부트캠프를 겪으며 느낀 경험 1월 첫 한 달은 프론트엔드를 배우고..
2024.06.30 -
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