springboot

모바일 앱 백엔드를 개발하면서 눈이 많이 뜨였다. 설계자의 시점에서 프로젝트를 바라볼 필요가 있기에 많은 노력과 고생이 들어갔다. 아직 대학교 4학년이지만 어느정도 프로젝트를 거시적으로 바라보며 이 작업이 왜 필요하고 어떻게 설계하면 좋을지에 대한 감각이 생긴것 같아서 행복한 요즘이다. 이번 시간엔 카카오 OAuth 2.0 + Spring Security + JWT + Redis를 조합하여 인증 시스템을 설계한 과정을 포스팅해볼 것이다. 각각의 기술을 선택한 이유와 세부적으로 필터체인을 설계한 과정을 공유할 생각이다. 왜 JWT일까? 전통적인 웹 애플리케이션에선 세션 방식이 일반적이다. 로그인할 땐 브라우저가 자동으로 쿠키 전송 → 서버가 세션 저장소에서 조회 → 사용자 정보 확인 이후의 ..
백엔드 개발자로서 Spring 프레임워크를 사용하다 보면 가장 많이 마주하는 어노테이션 중 하나가 바로 @Transactional이다. 하지만 어노테이션만 붙였다고 해서 모든 것이 해결되진 않는다. 분명히 붙였는데 롤백이 안되거나 트랜잭션이 아예 시작조차 되지 않는 상황인 self-invocation 문제를 CS적인 관점에서 파헤쳐보자. 그리고 마지막으로 전체적인 스프링 트랜잭션의 로드맵을 정리해볼 것이다. 왜 롤백이 안될까?다음과 같은 티켓 예매 로직이 있다고 가정해보자. @Servicepublic class TicketService { // 외부에서 호출되는 진입점 (트랜잭션 없음) public void processReservation() { log.info("예매 프로세스..
Spring Boot 4.0.1로 새 프로젝트를 시작했다. 예전부터 당연히 ObjectMapper가 있을 줄 알았는데 실행하자마자 애플리케이션이 죽었다. required a bean of type 'com.fasterxml.jackson.databind.ObjectMapper' that could not be found spring boot starter web도 있는데 ObjectMapper가 죽었다? kafka를 사용하는 선착순 캠페인 시스템이라 JSON 직렬화는 핵심인데.. 아 이거 내가 새 프로젝트 하는 김에 spring boot 4를 적용해서 뭔가 바뀐게 생겼구나! 싶었다. Spring Boot 4부턴 Jackson 3가 기본이다. 스프링 부트 4.0.1에서는 Jackson 3가 기본 JSO..
스프링을 사용하다보면 빈이라는 개념을 자주 접한다. 빈은 스프링 컨테이너가 관리하는 객체로, 기본적으로 싱글톤으로 생성된다. 하지만 모든 빈을 싱글톤으로만 사용할 수는 없다. 요청마다 새로운 객체를 생성하거나 특정 범위 내에서만 유지해야 할 때가 있는데 이때 빈 스코프를 활용한다.   빈 스코프란? 스코프는 빈이 존재할 수 있는 범위를 의미한다. 크게 싱글톤, 프로토타입, 웹 스코프로 구분할 수 있다. 싱글톤 : 스프링 컨테이너 시작 시 생성되고 종료 시 소멸된다. 프로토타입 : 빈을 요청할 때마다 새로운 인스턴스가 생성된다. 생성과 의존성 주입만 관리된다.종료 메서드가 호출되지 않음웹 스코프: HTTP 요청 세션, 서블릿 컨텍스트와 같은 웹 환경에서 유효한 범위이다.  @Scope("singleton"..
hskhsmm
'springboot' 태그의 글 목록