본문 바로가기

JAVA/Spring

(16)
[Spring] 스프링MVC - HTTP 요청과 응답 [Spring]스프링MVC - HTTP 요청과 응답 스프링에서 HTTP요청을 받는 방법은 여러가지가 있다. 폼 데이터의 인자로 넘어올 때는 RequestParam, ModelAttribute를 사용할 수 있지만 Http 바디를 통해 직접 넘어올 때는 별도의 파싱이 필요하다. 텍스트 파싱 1. InputStream (V1) @PostMapping("/request-body-string-v1") public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream inputStream = request.getInputStream(); String me..
[Spring] 스프링 트랜잭션과 동작방식에 대한 간략한 기록 스프링의 데이터베이스 처리 중 작동 방식에 대해 컨트롤할 수 있는 트랜잭션 기능을 제공합니다. 동작방식은 아래 4가지와 같습니다. 전파: 로직 중 예외가 발생했을 때 예외까지 변경된 데이터가 되돌아가야(RollBack) 할지, 저장되어야 할지 (Commit) 제한시간: 수행하는데 걸리는 시간을 설정 격리수준: 실시간으로 수정 중인 다른 데이터를 조회했을 때 수정된 상태로 보여야 하는지, 트랜잭션 간의 작업의 연관성에 개입 읽기전용: 데이터 조작을 방지 트랜잭션 전파 (PROPAGATION) 작업 A와 B가 있을 때 두 작업 간의 처리방식에 대한 설정입니다. PROPAGATION_REQUIRED A 작업이 수행된 후 B는 새로운 트랜잭션을 만들지 않고 A에 트랜잭션에 참여합니다. A와 B는 하나의 트랜잭션..
[Spring] 웹 스코프 웹 스코프의 특징 웹 스코프는 웹 환경에서만 동작한다. 웹 스코프는 프로토타입과 다르게 스프링이 종료시점 까지 관리한다. (종료 메서드 호출됨) 종류 request : ****HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 요청마다 별도 빈 인스턴스가 생성되고 관리됨 session : http session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 설명보다 예제를 만들어보는 것이 이해가 더 잘될 것이다. request 스코프 예제 만들기 웹 환경 추가하기 웹 스코프는 웹 환경에서만 동작하므로 web 환경이 동작하도록 라이브러..
[Spring] 빈 스코프(singleton bean, prototype bean) 빈 스코프란? 스프링 빈은 스프링 컨테이너 시작 때 생성되어 컨테이너 종료까지 유지된다. 이는 스프링 빈이 기본적으로 싱글톤 스코프이기 때문이다. 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료시 까지 유지되는 가장 넓은 범위의 스코프이다. 프로트타입 : 스프링 컨테이너는 프로트타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프 session : 세션이 생성되고 종료될 떄 까지 유지되는 스코프 application : 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프이다. 등록 예제*..
[Spring] 빈 생명주기의 콜백 빈 생명주기 콜백은 스프링 빈이 생성되거나 종료될 때 빈 안의 메소드를 호출하는 것이다. 목차 빈 생명주기 콜백 시작 인터페이스 InitalizingBean, DisposableBean 빈 등록 초기화, 소멸 메서드 애노테이션 @PostConstruct, @PreDestory 빈 생명주기 콜백 시작 DBCP(데이터베이스 커넥션 풀), 네트워크 소켓 등 애플리케이션 시작 전 필요한 연결을 미리 하거나 종료될 때 안전하게 종료할 수 있는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 예제로 어떻게 초기화와 종료 작업이 이루어지는지 알아보자. public class NetworkClient { private String url; public NetworkClient() { System.out.pri..
[Spring]컴포넌트 스캔과 의존관계 자동 주입 (Component Scan, Autowired) 컴포넌트 스캔이란? 기존에 빈을 등록할 때는 자바 설정파일이나 XML을 이용해 일일이 등록해주어야 했다. 실무에서는 이렇게 등록해주어야 할 빈이 수십, 수백개가 되므로 누락하거나 반복해야하는 문제점이 발생한다. 그렇기에 스프링은 설정정보가 없어도 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔 이라는 기능을 제공한다. @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } 컴포넌트 스캔을 사용하려면 설정정보에 @ComponentScan 어노테이션을 달아준다. 기존 설정파일..
[Spring] 스프링과 싱글톤 웹서비스는 대량의 트래픽을 고려하여 설계되어야 한다. 스프링은 기업의 온라인 서비스 기술을 지원하기 위해 탄생했기에 대량의 트래픽에 대한 문제점을 해결책을 갖고있다. 스프링이 없는 DI의 경우 void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회 : 호출할 때 마다 객체 생성 MemberService memberService1 = appConfig.memberService(); //2. 조회 : 호출할 때 마다 객체 생성 MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 System.out.println("memberService1 = " + membe..
[Spring] 스프링 빈 조회하기 모든 Bean 출력하기 메소드 getBeanDefinitionNames() // 스프링의 모든 빈 이름으로 조회 ac.getBean(빈 이름 입력) // 빈 이름으로 빈 객체(인스턴스) 조회 코드 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name = " ..