전체 글131 스프링 핵심 원리 - ComponentScan의 자동 빈 등록과 빈 탐색 관련 옵션, 빈 중복에 의한 충돌에 대한 고려 Repeat is the best medicine for memory 앞서 스프링에 의한 의존관계 주입에 있어서, @Configuration과 @Bean의 개념과 활용법에 대해서 알아보았다. 그런데, 스프링을 통한 객체들을 관리받기 위해서 모든 클래스에 @Configuration과 @Bean을 붙이는 점을 상상해보면 번거로움과 누락에 의한 문제가 발생할 것이라고 예상할 수 있다. 또 단순 반복적인 작업은 너무나 귀찮다.. 스프링은 역시나 이러한 번거로움을 해결하기 위해서 자동으로 Bean을 등록해주는 ComponentScan이라는 기능을 제공한다.( + @Autowired ) ComponentScan 자동 빈 등록 ComponentScan이 어떤 방법으로 자동 Bean 등록을 도와주는 지 확인해보자... Spring/SpringCore - basic 2024. 12. 30. 스프링 핵심 원리 - 싱글톤 컨테이너(stateless 코드 작성의 필요성과 @Configuration의 바이트 조작(CGLIB)을 통한 싱글톤 작동원리) Repeat is the best medicine for memory 스프링의 싱글톤스프링 컨테이너는 싱글톤이 적용되었다. 그 이유는 어플리케이션의 목적과 특수성을 생각해보면, 아래와 같은 고려 사항들이 있기 때문이다. 위의 내용처럼 웹 어플리케이션은 다수의 고객이 동시에 요청하는 경우가 빈번하게 발생한다.만약, 요청마다 새로운 인스턴스를 만들어 고객의 요청에 대응하는 어플리케이션이라면, 메모리 사용 관점에서 매우 비효율적이다. 이와 같은 상황을 스프링이 적용되지 않은 순수한 DI 환경으로 구성한다면, 아래와 같은 테스트 코드로 표현할 수 있을 것이다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void .. Spring/SpringCore - basic 2024. 12. 28. 도커 입문 18 - 도커 compose 시작 😎다룰 내용도커 Compose에 대해서 알아보자. Docker compose?도커 compose는 다중 컨테이너 도커 어플리케이션을 정의하고 실행하기 위한 도구로, yaml 파일을 사용해서 서비스를 구성한다. 지금까지 다룬 docker file을 통해서 인프라를 구축하려면, 백엔드와 DB를 도커 파일로 띄우고 이미지로 만든 뒤에 실행하고 서로 통신하기 위해서 IP/PORT 등의 정보로 다양한 설정을 해줘야한다. 꽤나 번거로운 작업이다.그리고 docker compose는 하나의 파일로 각 docker file을 유기적으로 연결하고 실행까지의 작업을 실행한다.docker file 단위로 작업하려면 발생하는 번거로운 작업을 획기적으로 줄여주는 것이다. Docker-Compose로 MySQL 실행하기 do.. Docker/Docker 입문 2024. 12. 28. 스프링 핵심원리 - 스프링 컨테이너 설계 이해, 스프링의 다양한 설정 형식 지원(JAVA/Xml), 스프링 빈 메타 정보(BeanDefinition) Repeat is the best medicine for memory 앞서, 스프링으로 전환과 더불어 스프링 컨테이너의 작동 원리에 대해서 알아보고 있었다.그리고 컨테이너 생성에 있어 ApplicationiContext 부모 타입을 사용해왔고, 구현체로는 AnnotationConfigApplicationContext을 사용하였다. 이번에는 이러한 컨테이너가 어떻게 설계되었는 가에 대해서 살펴보며, 동시에 다양한 설정 형식을 지원해주는 구조를 지닌 스프링의 설계적 측면을 파악하며 알 수 있는 BeanDefinition의 역할을 알아보자. 스프링 컨테이너의 설계 ( 1 ) - BeanFactory지금까지 사용해온 ApplicationiContext는 사실 BeanFactory라는 부모타입을 상속한 인터페이.. Spring/SpringCore - basic 2024. 12. 28. 도커 입문 17 - 도커file ( mysql 환경 변수와 데이터 저장 ) 😎다룰 내용도커 file을 통해서 mysql을 실행하는 경우 환경변수의 사용과 더불어 데이터 저장을 위한 볼륨 연결에 대해서 알아본다. Docker 기반 MySQL 환경변수 설정현재 사용하는 OS( window )위에서 도커( 가상화 )를 사용하여, mysql을 사용하는 경우 필요한 변수를 생성하고 mysql이 해당 변수들을 끌어다 사용하는 방법에 대해서 실습해겠다. 도커 허브 mysql 이미지에 대한 설명을 살펴보면, 환경변수 설정에 대한 설명이 자세히 나와있다. 이 중 필요한 환경 변수를 고려하여 아래와 같은 dockerfile 스크립트를 작성하고 build와 더불어 실행해보았다. ENV가 환경 변수를 설정하기 위한 스크립트 설정 명령어이다.그리고 MYSQL 작동에 있어 필요한 변수들에 대한.. Docker/Docker 입문 2024. 12. 27. 스프링 핵심 원리 - 스프링 컨테이너와 스프링 빈(컨테이너 생성 원리 및 다양한 Bean 조회 방법들) Repeat is the best medicine for memory 지금까지 다뤘던 내용들은 객체 지향적인 관점을 기준으로 스프링이 하는 역할과 핵심 원리을 이해하기 위한 과정이었다.이제, 스프링 자체에 대한 이해와 학습을 위한 내용들을 정리해보겠다.스프링 컨테이너 생성 방법과 작동 원리 먼저, 스프링 컨테이너가 생성되는 과정에 대해서 알아보자. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Appconfig.class); 위의 코드 부분이 이전 포스팅에서 스프링 컨테이너를 만드는 로직에 해당한다.코드의 내용은 ApplicationContext 타입의 변수에 사용할 구현체로 어노테이션 기반의 자바 설정을 .. Spring/SpringCore - basic 2024. 12. 27. 도커 입문 16 - 도커file ( nginx를 로비 서버로 활용 ) 😎다룰 내용도커 파일로 NGINX를 로비서버로 설정하는 방법에 대해서 알아보자.( 단일 진입 경로 서버 ) NGINX를 사용해서 로비 서버를 구성하는 실습을 진행하기 위해서 아래와 가이 프로젝트의 폴더 구조를 구성했다. 각 서버 실행하기server1과 server2 폴더가 있고각 폴더 하에 있는 도커 파일은 아래와 같다. 모두 nginx 서버 내용을 담은 도커 파일이다.FROM nginxCOPY webapp /usr/share/nginx/htmlENTRYPOINT ["nginx", "-g", "daemon off;"] 그리고 각 폴더의 webapp에 있는 index.html은 아래와 같이 작성되었다. ✅ server1 폴더의 index.html 파일 nginx server1✅ server2 폴더.. Docker/Docker 입문 2024. 12. 26. 리액티브 프로그래밍( text/event-streaming MIME TPYE ) text/event-streaming MIME type을 활용한 반응형 어플리케이션 Spring에서는 WebFlux를 통해 이벤트 반응형 어플리케이션을 지원하지만,이번에는 spring이 아닌 Servlet 수준의 구현을 통해 리액티브 어플리케이션이 동작되는 원리를 알아보겠다. 이를 위해 Filter를 사용한 실습을 진행해보자. 먼저, 프로젝트 폴더 구조와 코드는 아래와 같다. 그리고 각 코드들을 살펴보겠다.아래는 FilterConfig의 코드이다.@Configurationpublic class FilterConfig { @Bean public FilterRegistrationBean addFilter() { System.out.println("필터등록됨"); Filt.. Spring/WebFlux 2024. 12. 26. 리액티브 프로그래밍 리액티브 프로그래밍의 특징 어플리케이션 구성에 있어, server로 스프링을 사용한다면 많이 사용되는 Spring MVC는 thread per request (user level thread), Synchronous 으로 작동된다. 따라서 사용자의 요청에 따른 각각의 수준에서 block I/O로 진행되며, 요청에 따른 응답이 오기까지 서버는 기다리게 된다.그리고 많은 User들의 요청을 받기 위해서 multi thread 방식을 사용하고, 이에 따른 context switching이 발생하며, 만약 User가 많아지면, context switching에 걸리는 시간이 커질 것이고, 이는 multi thread의 효율 저하를 초래한다. 반면에, Spring에서 지원하는 Webflux와 같은 Reactive.. Spring/WebFlux 2024. 12. 26. 도커 입문 15 - 도커file (Nginx 설정 수정/복사하기, find/copy 명령어) 😎다룰 내용도커 파일로 NGINX의 설정파일을 수정함에 있어, 직접 컨테이너에 접근하여 경로를 확인하고 수정하는 방법을 알아보자. Nginx 이미지 파악하기 먼저, 도커 허브에 들어가서 공식 내용을 찾아 다음과 같은 file을 작성하였다. FROM nginx# COPY webapp /usr/share/nginx/html# COPY conf/nginx.conf /etc/nginx/nginx.confENTRYPOINT ["nginx", "-g", "daemon off;"] 각 로컬에서 폴더 아래 작성된 내용을 NGINX 컨테이너의 해당 디렉토리에 COPY하는 내용이다.정말, 로컬에서 전달하는 폴더의 내용이 NGINX 이미지의 해당 디렉토리에 복사하면 되는지 직접 컨테이너 내부를 살펴보자.이를 확인하기 위.. Docker/Docker 입문 2024. 12. 25. 도커 입문 14 - 도커file (Nginx 분석, inspect 명령어) 😎다룰 내용도커 file 작성에 있어 사용하는 nginx에 대해 알아보며 이미지를 분석하는 방법에 대해서 알아보자 이미지 분석( feat. NGINX )특정 이미지를 활용하는 방법에 대해서 알고 싶다면, 대게 dockerhub에 자세하게 기술되어 있다.nginx을 검색하여 들어가보면 사용법에 대해 아래와 같이 자세하게 기술되었다. 이를 통해서 해당 이미지에 대한 많은 정보들을 파악할 수 있다. 그리고 해당 이미지의 내부 설정값에 대한 자세한 내용을 볼 수도 있다.( inpect 명령어를 사용하여 ) Inspect 명령어 nginx 이미지를 컨테이너로 실행하고 inspect 명령어로 실습하는 과정을 알아보겠다.먼저, nginx 이미지를 컨테이너로 실행하고 를 입력하면 해당 컨테이너의 다양한 설정값 관.. Docker/Docker 입문 2024. 12. 25. 도커 입문 13 - 도커file (RUN, COPY) 😎다룰 내용도커 file 작성에 있어서 RUN과 COPY 명령어를 통해 NGINX를 실행하는 방법에 대해서 알아보자. 도커 컨테이너 실행도커 file에서 실행되는 명령어를 작성하고 싶다면, RUN 명령어를 사용한다.해당 명령어가 Docker File에서 사용되는 원리와 실습을 위해 nginx 이미지의 실행 실습으로 확인해보자. 위의 과정을 통해 nginx 컨테이너를 실행하였다. 그리고 해당 브라우저의 화면을 변경하기 위해서 docker hub의 nginx 설명서를 읽어보니아래와 같은 설명이 있다. html 파일이 해당 경로 아래에 있음을 알려준다. 따라서 컨테이너에 접근한 이후에 해당 경로로 이동하고vi를 통해 해당 파일을 수정하려고 시도하였지만, vi가 없다.이를 해결하는 방법에는 COPY .. Docker/Docker 입문 2024. 12. 22. 이전 1 2 3 4 5 6 7 ··· 11 다음