일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 플러터 공부
- 스프링공부
- 스프링 공부
- 코테준비
- nestjs공부
- Kafka
- 기술공부
- 알고리즘공부
- 카프카
- 기술면접공부
- JPA예제
- 스프링
- K8S
- 코테공부
- JPA
- nestjs
- 스프링부트공부
- 스프링부트
- Flutter
- 프로그래머스
- nestjs스터디
- DDD
- 플러터 개발
- querydsl
- 자바공부
- 자료구조공부
- JPA스터디
- JPA공부
- JPA 공부
- Axon framework
- Today
- Total
목록Develop/[Spring] (96)
DevBoi
정확히는 Spring 의 싱글톤 과 자바 static을 이용한 싱글톤 패턴의 차이라고 볼 수 있다. 여러 객체들이 하나의 인스턴스를 공유 한다는 개념은 같다. 하지만 해당 인스턴스의 생명주기에서는 큰 차이를 보인다. 1. 공유 기준 java static 의 공유 범위는 클래스 로더 기준 스프링 싱글톤의 공유 범위는 어플리케이션 컨텍스트 기준 클래스 로더기준이라고 하면, 톰캣 기준, webapp부분을 계층 적으로 관리한다. 만약에 webapp1, webapp2가 있다면, war파일 기준으로 다른 파일에 있는 클래스들끼리는 참조할 수 없다. 만약, 싱글 톤 기반으로 어플리케이션 컨텍스트 기준으로 공유하게 된다면 하나의 war파일 안에는 web.xml에 등록된 여러개의 servlet이 있을수있다. Spring..
커맨드 객체에 대한 기능에 대해서 알아야 한다. 서블릿의 생명주기 서블릿 컨테이너가 서블릿 인스턴스의 init()메서드를 호출하여, 초기화한다. 서블릿이 초기화된 다음부터 클라이언트가 요청을 처리할 수 있다. 각 요청은 별도 스레드로 처리하고, 이때 서블릿의 service메서드를 호출한다. 이안에서 HTTP 요청을 받고, 클라이언트로 보낼 HTTP응답을 만든다. get,post에 따라서 doGet이나 doPost등으로 위임하여 처리한다. 서블릿 컨테이너 판단에 따라 서블릿을 메모리에서 내려야할 시점에 destroy를 호출한다. 서블릿은 개발자가 Http요청 메시지를 편리하게 사용할 수 있도록 HTTP 요청 메시지를 파싱한다. 결과를 HttpServletRequest객체에 담아서 제공한다. HttpServ..
Http 소켓 통신은 계속 연결되어 있기 때문에, 사용자가 늘어남에 따라 부하가 커진다. 그래서 HTTP통신은 연결을 지속시키지 않고 끊어버리는 Stateless방식을 사용한다. 연결이 끊기기 떄문에 부하가 적지만, 이전에 보냈던 요청이나 되돌려준 응답에 대해서는 기억하지 못하는 단점이 있다. 1. 톰캣 웹서버와 was의 차이 1. 정적페이지와 동적 페이지 정적 페이지란 , 서버에 미리 저장된 파일이 그대로 전달되는 웹 페이지를 말한다. 서버에 저장된 데이터가 수정되지 않는 한 항상 동일한 페이지를 반환한다. 반면 동적 페이지는 서버에 있는 데이터들을 스크립트에 의해 가공처리한 후 생성되어 전달 되는 웹 페이지를 말한다. 서버는 사용자의 요청을 해석하여 데이터를 가공한 후 생성 된 웹페이지를 반환하며, ..
WebClient는 RestTamplate과 차이가있다. 공통점은 둘다 HttpClient의 모듈이다 차이점은 RestTemplate과 달리, WebClient는 Non-blocking방식이다. 해당 방식이 필요한 이유는 네트워킹의 병목현상을 줄이고 성능을 향상 시키기 위해서이다. Core당 1개의 쓰레드를 이용합니다. 각 요청은 이벤트 루프 내 job으로 등록이됩니다. 이벤트 루프는 각 Job을 제공자에게 요청하고, 결과를 기다리지 않고 다른 Job을 처리한다. 제공자로부터 이벤트 루프로 콜백으로 응답이 오면, 결과를 요청자에게 제공한다. WebClient는 이벤트에 반응형으로 동작하도록 설계 되었다. 동시 접속자가 많으면, RestTemplate보다 뛰어난 성능을 가지며 Spring 커뮤니티에서는 R..
RestTemplate이란? Spring 3.0에서부터 지원하는 RestTemplate은 Http 통신에 유용하게 쓸 수 있는 템플릿이다. Rest 서비스를 호출하도록 설계되어 HTTP 프로토콜 메서드에 맞게 여러 메서드를 제공한다. 특징 -통신을 단순화 하고 RestFul 원칙을 지킨다. -멀티쓰레드 방식을 사용한다. -블라킹 방식을 사용한다. RestTemplate의 구동방식 쓰레드 풀은은 요청자 어플리케이션 구동시에 만들어진다. Request 는 먼저 큐에 쌓이게 되고 가용한 쓰레드가 있으면, 스레드에 할당되어 처리된다. 1 요청당 1스레드가 할당 된다. 스레드에서는 블로킹 방식으로 처리되어, 응답이 올때까지 해당 스레드는 다른 요청에 할당 될 수 없다. 정확한 동작 방식 1. 어플리케이션이 Res..
Dao와 repository는 Data Access한다는 관점은 같지만, Repository는 객체 중심, Dao는 데이터 저장소 중심인 것이다. Dao는 storage system에 더 가까운 개념, 상대적으로 low level concept이다. Repository는 Domain객체에 가까운 개념, 상대적으로 high level concept이다. Dao Data Access Object로 실제 영구저장소에 접근하는 객체이다. 테이블 단위로 설계가 되며, DB Sql단위로 설계가 된다. Repository Repository는 객체 상태를 관리하는 저장소로 볼 수 있다. 엔티티 자체를 저장하고 불러온다. Domain Driven Design에서 생긴개념이다. DB 테이블 보다 객체 중심의 Layer라..
Database Connection Pool이란? 사용자의 요청에 따라 무수한 Connection을 생성하면, 서버에 과부하가 걸리게 된다. 미리 설정해놓은 일정수의 Connection을 만들어 놓고 이것을 Connection Pool에 보관해두었다가 요청이 발생하면 제공을 하고 Connection 사용이 끝나면, 다시 Pool에 반환하여 보관하는 기술을 DB connectionPool이라고 한다. 해당 장점은 이렇다. -DB 접속 설정 객체를 미리 만들어 연결하여 메모리 상에 등록해 놓기 때문에 클라이언트가 빠르게 DB에 접속 가능하다. -DB connection 수를 제한 할 수 있어서 과도한 접속으로 인한 서버 자원 고갈 방지 기능 -DB 접속 모듈을 공통화해 DB서버의 환경이 바뀔 경우 쉬운 유지..
1. 정의 비즈니스 로직이 트랜잭션 처리를 필요로 할때 트랜잭션 처리 코드가 비즈니스 로직과 공존한다면, 코드 중복이 발생, 비즈니스 로직에 집중 또한 힘들어진다. @Transactional은 이러한 문제를 해결해주는 Spring이 제공하는 어노테이션으로 트랜잭션을 메서드 또는 클래스에 명시하게 되면, 특정 메서드 또는 클래스가 제공하는 모든 메서드에 대해 내부적으로 AOP를 통해 트랜잭션 처리코드가 전후로 수행된다. Transactional은 두가지 방식으로 처리가된다 -Jdk dynamic Proxy (interface 구현 필요, 해당 인터페이스를 추상메서드로 오버라이딩해서 프록시 객체를 런타임시, dynamic하게 생성) -CGLIB (인터페이스없는 타겟을 상속받아서, 프록시 객체를 만든다. 바이..
@Requestparam 1:1로 값을 바인딩 해준다. (Get방식만 지원) 1:1로 받는값이 매서드 매게변수의 생성자의 인자와 일치하면 객체를 바로 바인드 한다. 잘못된 파라미터값이 오면 400발생 바인딩 해오는 값과 일치하면 인스턴스를 그냥 주입해주고, 아니라면 별도 이름을 지정, 해당 이름 과 같다면 주입해준다. @ModelAttribute 여러 파라미터 매게변수를 바인딩해준다. 단일 값부터 오브젝트까지 다양하다. setter를 사용해 담아주기 때문에 매게변수의 바인딩을 받는 필드는 setter가 있어야 한다. 타입변환에 실패하더라도 작업은 계속된다. 메서드 인자의 model의 attribute에 접근 할 수 있다. 파라미터 이름을 명시하지 않으면 필드명과 일치하는 필드의 Setter를 이용해서 데..
web.xml web.xml은 설정을 위한 설정 파일이다. WAS가 처음 구동될때 web.xml을 읽어, 웹 애플리케이션 설정을 구성한다. DispatcherServlet을 등록해주면서 스프링 설정 파일을 지정한다. DispatcherServlet은 초기화 과정에서 지정된 설정 파일을 이용해 스프링 컨테이너를 초기화 시킨다. web.xml은 초기 로드시 로드해야하는 xml들에 대한 정의 이다. WAS가 최초로 구동될때 각종 설정을 정의 해주는, 설정에 대한 경로를 정의해주는 파일이다. web.xml에서 두가지 전부 로드된다. root-context servlet-context *root-context root-context에 등록되는 빈들은 모든 컨텍스트에서 사용가능하다. service,dao포함, 웹 ..