728x90
반응형
SMALL

개발지식 32

싱글톤 패턴(Singleton Pattern)이란

예전 기술 면접을 볼 때 싱글톤 패턴 관련해서 질문을 받았었습니다 ㅎㅎ 공부 중 이전 면접 기억이 나서 한번 정리해보겠습니다! 싱글톤 패턴이란 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴 즉, 싱글톤 패턴은 '하나'의 인스턴스만 생성하여 사용하는 디자인 패턴입니다. 쉽게 말하자면 메모리 절약을 위해, 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법입니다! 왜 사용하나요 객체는 생성할 때마다 메모리 영역을 새로 할당 받아야 합니다. 동일한 객체를 사용해야하는 경우 선언된 객체를 호출할 때마다 객체가 새로 생성이 되는데 만약 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸되며 이..

개발지식 2024.02.23

[SPRING] DI(Dependency Injection) 의존관계 주입 2탄!

DI 를 공부하던 중 깨달음을 얻고 더 적절한 예시와 설명을 하기위해서 추가로 작성해봅니다 ㅎㅎ DI, 의존관계 주입이란 Dependency Injection은 의존성 주입이라고도 하며, 객체 간의 의존성을 외부에서 주입하여 결합도를 낮추고 유연한 코드를 작성하는 방법입니다. 말 그대로 메서드 안에 파라미터값을 통해 필요한 메서드나 데이터들을 추가하여 사용하는 것으로 이해하면 편합니다! 바로 예시를 들어가보겠습니다 우선 DI를 사용하지 않는 경우입니다 public class UserServiceImpl implements UserService { private UserRepository userRepository = new UserRepositoryImpl(); public void addUser(Use..

개발지식 2024.02.15

index 가 뭔지, 동작원리에 대해 설명해보세요(실제 기술면접 질문)

이전 기술면접을 진행했던 당시 index 의 동작원리에 대해서 질문을 받았는데 대략적적으로 index가 뭔지는 알고 있었지만 상세하게 답변을 못했던 기억있어 확실하게 알기위해! 문서를 작성해봅시다. index란 무엇인가?! 인덱스(index)는 데이터베이스에서 검색 속도를 향상시키는데 중요한 역할을 하는 자료구조입니다! 데이터베이스에서는 대량의 데이터를 효율적으로 처리해야하는데, 인덱스는 이를 가능하게끔 합니다. 또한, 데이터베이스 인덱스는 특정 열 또는 컬럼에 대한 정렬된 구조로 데이터를 저장하며, 이를 통해 데이터베이스 시스템은 빠른 검색을 가능하게 하고 특히 WHERE 절에서 자주 사용되는 조건에 따라 데이터의 위치를 빠르게 찾아줍니다. INDEX 의 종류에는 이진탐색트리(Binary Search ..

개발지식 2024.02.13

도커(Docker)란! 컨테이너(Container)란! 쿠버네티스(Kubernetes)란! 무엇인가!

도커(Docker)란!컨테이너 기반의 오픈소스 가상화 플랫폼입니다!컨테이너란 개발 환경의 표준화를 가능하게하는, 격리된 공간에서 프로세스가 동작하는 기술을 의미합니다.이 컨테이너를 사용하면 개발 환경의 표준화가 가능하므로, 개발자가 작업한 환경을 그대로 배포할 수 있게 됩니다! 도커는 '내 PC에서는 잘 돌아가는데, 서버에서는 왜 안돌아가지?!' 라는 문제를 해결하기 위해 등장하였으며, 개발환경을 코드로 관리하고, 이를 통해 동일한 환경을 재생성할 수 있습니다. 컨테이너(Container)란!컨테이너는 애플리케이션과 그 실행 환경을 패키징하는 기술로 격리된 공간에서 어플리케이션이 실행되도록 하는 기술입니다. 각 컨테이너는 독립적인 실행 환경을 가지며, 서로의 시스템 리소스나 파일 시스템을 ..

개발지식 2024.02.12

[SPRING] 스프링 프레임워크의 처리 흐름

예전 기술면접을 볼 때 스프링 프레임워크의 처리 흐름에 대해 질문을 받았었는데 필터나 인터셉터 등의 처리과정들을 제대로 답변하지 못했던 기억이 있어서 한번 정리해봅니다! ● 필터(Filter – 서블릿 필터라고도 함) 디스패처 서블릿에 요청이 전달되기 전/후의 모든 요청에 대해 인코딩, 보안, 로깅 등의 부가작업을 처리되고, 스프링 범위 밖에서 처리가 되며 web.xml에서 설정을 합니다. 역할 : 인코딩, 보안, 로깅 등의 부가작업 ● 디스패처 서블릿(Dispacher Servlet) 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러입니다. 역할 : 요청에 대한 적합한 컨트롤러 선택 ● 인터셉터(Interceptor) 디스패처 서블릿이 컨트롤러를 호출하기 전과 후의 요청과 응답을..

개발지식 2024.02.07

[SPRING] 스프링 컨테이너(Spring Container)란?!

스프링 컨테이너(Spring Container)란?! ApplicationContext 를 스프링 컨테이너라고 합니다. 스프링 컨테이너는 @Configuration 이 붙은 AppConfig 를 설정(구성) 정보로 사용합니다. 여기서 @Bean 이라 적힌 메서드를 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록합니다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 합니다. // 스프링 컨테이너 생성 ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); 일반적으로 'IOC 컨테이너' 와 '스프링 컨테이너'는 동일한 의미로 사용됩니다. IOC 컨테이너는 Inversion Of Control(제어의..

개발지식 2024.02.05

[SPRING] DI(Dependency Injection) 의존관계 주입, DI 컨테이너

DI 의존관계 주입 객체 간의 의존성을 외부에서 주입하여 결합도를 낮추고 유연한 코드를 작성하는 방법입니다! DI(Dependency Injection) 는 객체 간의 의존 관계를 외부에서 결정하여 객체가 필요한 의존성을 주입받는 개념입니다. DI 를 통해 객체 간의 결합도를 낮출 수 있고, 코드의 재사용성과 테스트 용이성을 높일 수 있습니다. DI 는 주로 생성자, 메서드 매개변수, 속성에 의해 의존성을 주입하며, 의존성을 관리하는 컨테이너를 활용하여 객체의 생성과 관리를 담당합니다. 이를 통해 유연하고 확장 가능한 애플리케이션을 개발할 수 있습니다! 스프링 DI를 코드 예시를 통해 확인을 해보자! public interface MessageService { void sendMessage(String ..

개발지식 2024.02.05

[SPRING] IOC(Inversion of Control) 제어의 역전

IOC 제어의 역전 프레임워크가 내 코드를 대신 호출해 주는 것, 말 그대로 제어권이 뒤바뀌는 것을 제어의 역전이라고 합니다. 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했습니다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했으며 개발자 입장에서는 자연스러운 흐름이였습니다. 하지만 IOC(Inversion of Control)는 일반적인 객체의 생명주기를 개발자가 직접 관리하는 것이 아닌, 스프링 프레임워크가 객체의 생성과 관리와 같은 프로그램의 제어 흐름을 관리하는 것을 제어의 역전(IOC)이라 합니다. 프레임워크 VS 라이브러리 ● 프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞다 ● 반면에 내가 작성한..

개발지식 2024.02.05

프록시(Proxy) 서버

Proxy란 대리인이라는 뜻으로 프록시 서버는 사용자와 원래의 서버 사이에서 중개자 역할을 하며, 사용자의 요청을 대신하여 원 서버에 전달하고 그 응답을 사용자에게 전달합니다. 이 과정에서 프록시 서버는 자주 요청되는 데이터를 캐시에 저장해두어, 같은 요청이 다시 오면 캐시에서 바로 데이터를 제공하여 효율성을 높이는 역할도 합니다! 예를 들어 프록시서버가 없을 경우를 가정해보겠습니다. 한국의 클라이언트가 미국의 원 서버에 접속하려고 하려고 한다면 캐싱 기능을 사용할 수 없어 접속이 오래걸릴 뿐 아니라 원서버에 직접 접속하는 과정에서 사용자의 실제 IP가 노출되어 보안에 취약해질 수 있는 점 등등 다양한 단점들이 존재합니다. 프록시 서버를 사용하지 않을 경우 단점들 ① 보안 취약성 프록시 서버는 사용자의 ..

개발지식 2024.02.04

[Spring] Spring의 삼각관계 IOC와 DI, 그리고 AOP...

GPT-4가 말하길 스프링의 3대 핵심 개념은 DI, IOC, AOP 이다! 그러므로 우리는 서로 얽히고 설킨 IOC와 DI, 그리고 AOP에 대해 알아보자 (그리고 추가로 어떤 순서로 공부하는게 좋은지도 물어봄) 여기 게시글에서는 IOC와 DI, AOP의 각각 연관성에 대해 설명하고 하나하나 별도의 게시글로 상세 내용을 다루겠습니다! IOC(Inversion of Control) 는 객체의 생성과 생명주기 관리를 개발자가 아닌 Spring 컨테이너가 담당하는 프로그래밍 기법입니다. IOC는 개발자가 직접 객체를 생성하고 참조하는 것이 아닌 Spring 컨테이너가 알아서 처리하도록 합니다. DI(Dependency Injection) 는 객체 간의 의존성을 외부에서 주입받는 방식을 의미합니다. IOC C..

개발지식 2024.02.04
728x90
반응형
LIST