본문 바로가기

개발 이론/Spring21

요청에 대하여 쓰레드는 어떻게 획득하는가? 갑자기 프로젝트하다가 쓰레드, 쓰레드풀이 궁금해지면 쓰레드는 간단하게 worker라는건 알겠는데,..그래서 요청에대해서 누가 쓰레드를 할당해줄까??가 궁금해졌다. Tomcat이 시작할때 원초적으로 돌아가서 결국 쓰레드풀세팅과 쓰레드에 대한 세팅은 누가 해주는 걸까??로 시작해서 디버깅을 시작했다.먼저 정리한 상황을 말하자면1. Http11NioProtocol(AbstractProtocol) : 엔드포인트 새로운거 세팅2. AbstractEndPoint(NioEndPoint, AbstractJessEndPoint) : 초기화 과정3. Http11NoiProtocal : 위에서 초기화과정을 거친 EndPoint setter4. 앞선 Endpoint : 쓰레드 할당5. CoyoteAdapter : 세팅6. A.. 2024. 8. 30.
프록시??? 스프링 AOP?? 트랜젝션?? (5) 이 제목의 챕터를 사실 마무리?라고 해야하나..? 어째든 정리하고자했는데 갑자기 지연로딩도 프록시랑 관련있다는게 생각나서 어떻게 관련이 있는지 한번 공부할겸 정리해본다 지연로딩 JPA를 써봤다면 지연로딩이라는 단어를 한번쯤은 들어봤을 거다. 간단하게 설명하자면 엔티티 A와 연관된 엔티티 B의 정보를 한번에 가져오지 않는 것이다. class Member { @ManyToOne(fetch = FetchType.LAZY) // 지연로딩 @JoinColumn private Team team; } 위의 코드에서 Member를 조회했을때 지연로딩으로 설정되어있다면 해당 값은 같이 조회되지않는다. 좀더 제대로 말하자면 프록시로 감싸진다? 의 느낌이다. 근데 만약 해당 값이 필요하다면?? member.getTeam().. 2024. 4. 15.
프록시??? 스프링 AOP?? 트랜젝션?? (4) 약 한달만에 이어쓰는 프록시이야기...ㅎㅎ 최근 한달동안 서류합격한거 과제하느라 바빴다.. 또 이번주는 꼭 최종합격하고 싶은지라... 열심히 면접 준비하라... 애를 마니 썼다.. 뭐랄까 부족함은 존재하지만 잘할수 있는 신입 개발자라는 걸 어필하고 싶어서...ㅎㅎㅎ 어째든 시간이 좀 나서 그동안 궁금했던 트랜젝션 동작원리를 알아보고자 한다. 트랜젝션은 AOP의 예이다 찾아보니 나는 단순히 트랜젝션이 프록시 패턴 이용해서 구현했거니.. 추측하고 있었는데 그게 아니라 AOP의 대표적인 예였다. 앞서 말했듯이 AOP는 여러 클래스의 비즈니스 로직과 공통적인 부가로직을 구분하게 위하여 사용되는 기술?? 이다. 그래서 생각해보면 트랜젝션도 결국 여러 서비스 코드에서 @Transactional이 붙으면 AOP에 의.. 2024. 4. 10.
프록시??? 스프링 AOP?? 트랜젝션?? (3) 지난 블로그에서 동적프록시에 대해서 이야기 해봤다. 오늘은 프록시 팩토리에 대해서 이야기해볼예정이다. 앞선 블로그를 정리해보자면 인터페이스가 있는 경우 JDK 동적 프록시가 적용되고, 그렇지 않은 경우 CGLIB가 적용된다. 근데 여기서 궁금한점이 있다. 누가 인터페이스 유무를 인지해서 프록시를 생성할까?? 만약 JDK 동적 프록시, CGLIB프록시를 모두 사용하면 각각 InvocationHandler, MethodInterceptor를 만들어서 관리해야하는가?? 또는 If문과 같이 어쩔때는 적용하고 안하고 싶다면 어떻게 해야할까? ProxyFactory 스프링이 ProxyFactory를 통해서 동적 프록시를 통합하여 편리하게 만들어주는 기능을 제공한다. 뿐만 아니라 Advice라는 개념을 통해 Invo.. 2024. 3. 12.
프록시??? 스프링 AOP?? 트랜젝션?? (2) 지난 블로그에서 프록시와 프록시 패턴에 대해서 알아보았다. 간단하게 정리해보자면 프록시를 사용하는 이유는 원본 객체를 수정할 수 없는 상황을 극복하기 위해서였다. 예를 들어 A라는 클래스를 수정할 수 없다고 해보자. 근데 A라는 클래스 앞에 x라는 기능을 넣고 싶다. 이럴때 프록시라는 것을 통해 A수정없이 x라는 기능을 추가할 수 있다. 그러니까 프록시를 이용해 부가적인 기능을 부여(트랜젝션, 시간측정등), 또는 타깃에 대한 접근방법 제어(지연로딩)일때 사용된다. 다만 프록시 패턴을 사용하면 - 인터페이스를 구현해서 프록시 객체를 생성해야하는 코드 복잡도 증가 - 모든 메서드에 부가기능 구현 해야하는 중복코드 발생 과 같은 단점이 존재한다. 그래서 나온게 동적 프록시이다 동적 프록시 프록시의 단점 해결하.. 2024. 3. 2.
Spring Context는 모든 빈들을 프록시로 만들까??? 내가 얼핏 듣기로는 스프링 컨텍스트가 프록시로 만든다는 말을 들은 적이 있는데.. 확실하지가 않다.. 모든 빈들을 프록시로 만드는 건지.. 그래서 간단하게 테스트 해보았다. @Component public class Service { public void test(){ System.out.println("test"); } } @Configuration public class Config { @Bean public Service service(){ return new Service(); } } public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(.. 2024. 2. 22.
728x90