일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- c언어
- 컴퓨터구조
- MSA
- Algorithm
- JPA
- 알고리즘
- Java
- Kafka
- 파이썬
- Proxy
- 디자인 패턴
- mongoDB
- MySQL
- C
- Data Structure
- 운영체제
- spring webflux
- react
- 네트워크
- JavaScript
- Spring
- design pattern
- OS
- 자료구조
- 자바
- redis
- 백준
- Galera Cluster
- Heap
- IT
- Today
- Total
목록Java, Spring (75)
시냅스

커넥션 풀, Connection Pool 데이터베이스 커넥션을 획득할 때마다 tcp/ip 커넥션 (3 way handshake)을 연결하는 네트워크 동작이 발생되어 커넥션을 생성하기 위한 리소스를 매번 사용해야 한다. 커넥션을 매번 새로 만드는 시간이 추가되기 때문에 결과적으로 응답 속도에 영향을 준다. 이런 것을 해결하기 위해 커넥션을 미리 생성해두고 사용하는 커넥션 풀을 사용한다. 애플리케이션을 시작하는 시점에 커넥션을 미리 확보한다. 보통 10개이다. 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 DB에 SQL을 전달할 수 있다. 이렇게 이미 생성되어 있는 커넥션을 가져다 쓴 후 커넥션을 다시 풀에 반환한다. 커넥션 풀 숫자는 서비스의 특징과 서..

클라이언트, 애플리케이션 서버, DB 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 다음과 같은 과정을 거친다. 1. 커넥션 연결 주로 TCP/IP 를 사용해서 커넥션을 연결한다. 3 way handshake 2. SQL 전달 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답 다만 각각의 데이터베이스 마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 응답을 받는 방법이 모두 다르다. JDBC Java Database Connectivity JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC 표준 인터페이스에 의존하게 하여 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버의 ..

프론트 컨트롤러 패턴으로 이뤄져있다. 서블릿이 호출되면 HttpServlet이 제공하는 service가 호출된다. 스프링 mvc는 DispatcherServlet의 부모인 FrameworkServlet에서 service를 override해두었다. FrameworkServlet.service를 시작으로 여러 메서드가 호출되면서 DispatcherServlet.doDispatch()가 호출된다. doDispatch()는 다음과 같다. 요청이 들어오면 핸들러 매핑을 통해 핸들러(컨트롤러)를 조회할 수 있는지 확인하고 핸들러 어댑터 목록에서 핸들러를 처리할 수 있는 핸들러 어댑터가 있는지 확인해서 핸들러 어댑터를 통해 핸들러의 컨트롤러를 실행하고 반환하는 정보를 ModelAndView로 변환해서 반환한다. 반환..

서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다. 서버에서 해야하는 일 서버 TCP/IP 연결 대기, 소켓 연결 HTTP 요청 메세지를 파싱해서 읽기 HTTP 메소드 방식, url pattern 인지 content-type 확인 HTTP 메시지 바디 내용 파싱 비즈니스 로직 수행 db connection 등 HTTP 응답 메세지 생성 시작 HTTP 시작 라인 생성 Header 생성 메세지 바디에 HTML 생성해서 입력 TCP/IP 에 응답 전달, 소켓 종료 Servlet을 지원하는 WAS 사용 시 지원 위에서 보았던 비즈니스 로직 수행 이외의 모든 것..

웹 서버 HTTP 기반으로 동작한다. 정적 리소스 제공, 기타 부가기능을 제공한다. HTML, CSS, JS, 이미지, 영상 등 e.g. NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작한다. 웹 서버 기능을 포함하고 있다. (정적 리소스 또한 제공) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 프로그램 실행 환경과 DB 접속 기능 제공 여러 개의 트랜잭션(논리적인 작업 단위) 관리 기능 e.g. 톰캣(Tomcat), Jetty, Unsertow 차이점 웹 서버는 정적 리소스, WAS는 애플리케이션 로직 모호성이 존재한다. 웹 서버도 프로그램을 실행하는 ..

빈 스코프 Spring Bean Scope 빈이 존재할 수 있는 범위 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 싱글톤 요청 싱글톤 스코프의 빈을 스프링 컨테이너에 요청한다. 스프링 컨테이너는 본인이 관리하는 스프링 빈을 반환한다. 이후에 스프링 컨테이너에 같은 요청이 와도 같은 객체 인스턴스의 스프링 ..

빈 생명주기, Bean Life Cycle - 싱글톤 빈 Singleton Bean 스프링 컨테이너 생성 스프링 빈 생성 의존 관계 주입 초기화 콜백 사용 소멸 전 콜백 스프링 종료 @Component public class OrderServiceImpl implements OrderService { @PostConstruct // annotation으로 객체 생성 후 실행할 함수 등록 public void init() { System.out.println("초기화 콜백"); } @PreDestroy // 객체 소멸 전 실행할 함수 등록 public void close() { System.out.println("소멸 전 콜백"); } } 빈 생명주기, Bean Life Cycle - Prototype b..

ComponentScan 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. ComponentScan은 Component가 붙은 모든 클래스를 스프링 빈으로 등록한다. 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. Autowired 생성자에 @Autowired를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다. 이때 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다. getbean(MemberRepository.class)와 동일하다고 이해하면 된다. 컴포넌트 스캔 기본 대상 @Componenet : 컴포넌트 스캔에서 사용 @Controller : 스프링 MVC 컨트롤러에서 사용 @Service : 스..

스프링 빈 Spring Bean 이란? 스프링 컨테이너에 의해 관리되는 자바 객체(POJO, plain old java object) @Bean 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우 에 사용된다. 메소드 또는 어노테이션 단위에 붙일 수 있다. @Component 개발자가 직접 컨트롤이 가능한 클래스들의 경우에 사용된다. 클래스 또는 인터페이스에 붙일 수 있다. 스프링 컨테이너 Spring Container 란? 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. IoC와 DI의 원리가 이 스프링 컨테이너에 적용된다. 스프링 컨테이너는 xml 기반으로 만들 수 있고, 에노테이션 기반의 자바 설정 클래스..
제어의 역전 IoC (Inversion of Control) 구현 객체는 자신의 로직을 실행하는 역할만 담당한다. 프로그램의 흐름은 컨테이너가 관리한다. 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라 한다. @Configuration public class AppConfig { @Bean public MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } @Bean public MemberService memberSer..