전체 글
-
[Spring] 싱글톤 컨테이너Backend Dev/Spring Framework 2022. 3. 8. 21:49
웹 애플리케이션과 싱글톤 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했으며 대부분 스프링 애플리케이션은 웹 애플리케이션이다. 이러한 웹 앱은 보통 여러 클라이언트가 동시에 요청을한다. 순수 자바 코드로 구현된 DI 컨테이너(AppConfig)의 경우 클라이언트에서 요청을 할 때마다 아래와 같이 객체를 새로 생성하여 서로 다른 참조값을 갖기에 메모리 낭비가 심한 문제가 있다. 이는 해당 객체가 딱 1개만 생성(같은 참조값)되고, 공유하도록 설계하면 되는데 이를 싱글톤 패턴이라 한다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new ..
-
[Spring] IoC, DI 그리고 컨테이너Backend Dev/Spring Framework 2022. 3. 8. 19:16
제어의 역전 IoC(Inversion of Control) 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고 실행하였다. 즉, 클라이언트가 프로그램의 제어 흐름을 조종했다. AppConfig가 등장한 이후로 클라이언트 구현 객체는 자신의 로직을 실행하는 역할만 담당하고 제어 흐름은 AppConfig가 담당한다. 결국 프로그램 제어 흐름에 대한 권한은 AppConfig가 가지고 있으며, OrderServiceImpl은 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모르고 OrderService 인터페이스의 다른 구현 객체를 생성하고 실행할 수도 있다. 어떤 인터페이스의 구현체가 실행될지도 모른체 OrderServiceImpl은 자신의 로직 "실행"에만..
-
[Spring] 객체 지향 설계의 적용Backend Dev/Spring Framework 2022. 3. 8. 03:14
객체 지향의 원리와 설계 원칙을 소스코드로 적용해보려 하고, 스프링을 사용하지 않는 순수 자바로만 코드를 작성하는 단계에서 생기는 문제점부터 짚어볼 것이다. 아래의 클라이언트 코드를 변경해야 하는데, 왜 변경이 필요한 것일까? public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } OrderServiceImpl이 DiscountPolicy라는 인터페이스에 의존하면서 구체 클래스에도 의존을 하기에 DI..
-
3. CPU 스케줄링Computer Science/Operating System 2022. 3. 7. 03:21
이전 "프로세스 관리" 편에서 다루었던 프로세스 상태는 CPU 스케줄링과 관련이 있다. 2. 프로세스 관리 하드디스크와 같은 파일 시스템에 있는 프로그램이 먼저 프로세스가 되기까지의 과정을 살펴본 후 프로세스에 대한 전반적인 흐름을 확인해보려 한다. 프로그램 실행 - 파일 시스템에 저장되 6ro-29.tistory.com CPU 스케줄링과 디스패처 그렇다면, 아래처럼 프로세스의 전반적인 작업 상태를 관리하고 어떠한 프로세스에게 CPU를 할당해줄지를 결정해주는 CPU 스케줄링이 필요한 이유는 무엇인가? 이를 알기위해 CPU, I/O 버스트에 대해 알아보자. CPU 버스트 : CPU를 통해 프로세스의 기계어를 실행 중인 주기 I/O 버스트 : 입력, 출력이 이뤄지는 주기 CPU가 사용되는 시간 단위가 길다면..
-
SW 마에스트로 13기 서류 합격 후기 + 정보 공유IT 대외활동 2022. 3. 4. 00:08
SW 마에스트로는 과학기술정보통신부와 정보통신기획평가원에서 주관하는 우수 SW 인재 양성 정부 지원 사업으로 소프트웨어 산업 분야별 멘토를 지정해 자기주도형 프로젝트와 멘토링을 약 1년간 진행한다. 선발 과정은 서류 전형과 2차례의 코딩 테스트 이후 최종적으로 심층 면접을 통해 선발된다. 11, 12기에 활동하셨던 분들의 말씀을 들어보면 제출했던 서류를 기반으로 기술, 인성 면접 또는 포트폴리오 발표가 이루어지는 것 같다. 기수가 거듭날수록 지원자가 급증하고 있어 올해도 가장 높은 지원자 수를 찍었고 총 250명을 선발한다. 최종 선발된 연수생들에게 지원하는 혜택은 다음과 같다. IT기기: 노트북 등 IT 기기 구입비 최대 200만원 지원 지원금: 프로젝트 개발 기간(6개월) 월 100만원 지원금 지급 ..
-
[Spring] 좋은 객체 지향 설계를 위한 5원칙, SOLIDBackend Dev/Spring Framework 2022. 3. 3. 16:07
이전 포스팅에서 스프링과 객체 지향 프로그래밍의 컨셉과 핵심에 대해 알아보았는데 이번에는 스프링 프레임워크가 객체 지향 설계를 하는 데 있어서 어떤 이점과 관계가 있는지 알아보려 한다. 스프링에서 지원하는 제어의 역전(IoC)이나 의존관계 주입(DI)과 같은 기술은 다형성과 함께 역할과 구현을 편리하게 다룰 수 있도록 지원한다. 역할과 구현의 분리에 대한 이해가 부족하다면 아래 글을 통해 내용을 숙지하고 보는 게 좋을 것 같다. [Spring] 스프링과 객체 지향 설계 Spring이란? 스프링을 나타내는 의미는 문맥에 따라 다양한데 스프링 DI 컨테이너 기술, 스프링 프레임워크, 스프링 생태계 자체를 의미하기도 한다. 스프링의 주 기술은 스프링 DI 컨테이너, AOP, 6ro-29.tistory.com ..
-
[Spring] 스프링과 객체 지향 설계Backend Dev/Spring Framework 2022. 3. 3. 05:24
Spring이란? 스프링을 나타내는 의미는 문맥에 따라 다양한데 스프링 DI 컨테이너 기술, 스프링 프레임워크, 스프링 생태계 자체를 의미하기도 한다. 스프링의 주 기술은 스프링 DI 컨테이너, AOP, 이벤트와 같은 것들이 있다. 핵심적인 건 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크라는 것이다. 객체 지향 언어인 자바 언어 기반의 프레임워크로써, 객체 지향 언어가 가진 강력한 특징을 살려낸다. 그렇다면 스프링 부트라는 것도 자바로 백엔드 개발 공부를 하다보면 들어봤을 법한 단어인데, 이는 스프링을 편리하게 사용할 수 있도록 지원해주며 스프링 프레임워크 사용 시 때에 따라 필요한 라이브러리들을 불러올 수 있게 해준다. 스프링 부트의 대표적인 특징은 다음과 같다. - 단독으로 실행..
-
2. 프로세스 관리Computer Science/Operating System 2022. 2. 28. 02:41
하드디스크와 같은 파일 시스템에 있는 프로그램이 먼저 프로세스가 되기까지의 과정을 살펴본 후 프로세스에 대한 전반적인 흐름을 확인해보려 한다. 프로그램 실행 - 파일 시스템에 저장되어 있는 실행 파일을 실행시키면 메모리에 적재되어 프로세스가 된다. - 메모리에 적재되기 이전에 실행 파일마다 개별적인 가상 메모리가 존재하며 필요한 페이지만 물리적 메모리에 적재되며, 올라가지 않은 페이지는 스왑 영역에 올라간다. 이때, 각 프로세스별 가상 메모리는 0번지부터 시작하고 실제 물리 메모리에 쌓이는 주소와는 다른데, 가상 메모리의 논리적 주소에서 물리 주소로 변환하는 과정을 거친다. 스왑 영역이란 쫓겨난 프로세스가 저장장치의 특별한 공간을 모아두는데 이러한 영역을 의미하며, 스왑 영역에서 메모리로 데이터를 가져오..