절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점 절차지향은 프로그램 전체가 유기적으로 연결되어 있고 위에서 아래로 순차적으로 코드가 실행이 되며 데이터 흐름을 중심으로 로직이 구성됩니다. 그래서 단순하고 직관적인 구조로 프로그램을 작성할 수 있고 실행 속도가 빠름니다. 단점으로는 코드 재사용성이 낮아서 큰 규모의 프로잭트에는 적합하지 않습니다. 주로 C언어와 같은 저급 언어에서 사용합니다. 객체지향은 객체들의 집합으로 이루어져있고 객체들의 메시지를 주고 받으면서 상호작용을 합니다. 그리고 캡슐화, 상속, 추상화, 다형성의 개념을 사용해서 쉽게 코드를 확장시킬 수 있고 코드의 재사용성도 좋아 유지보수에 용이 합니다. 단점으로는 처리 속도가 절차형 보다 느리고 설계에 많은 시간이 소요됩니다. ..
웹 서버와 WAS의 차이점 웹서버는 클라이언트로부터 HTTP요청을 받아들이고 주로 HTML, CSS, 이미지와 같은 정적인 콘텐츠를 처리합니다. 정정인 컨텐츠는 WAS를 거치지 않고 처리하고 동적인 컨텐츠가 있으면 WAS로 요청해서 처리한 결과를 전달합니다. 웹서버 소프트웨어는 Apache Server와NginX가 있고 요청이 올때 가장 앞단에서 처리하고 트래픽에 대한 처리가 특화되어 있습니다. WAS는 jsp와 같은 언어들을 사용해서 DB조회나 다양한 로직처리가 필요한 동적인 컨텐츠를 처리합니다. 앞에서 말한 웹서버에서 요청을 받고 필요한 기능을 수행해서 다시 전할다는 역할을 합니다. WAS 소프트웨어는 톰캣, JEUS가 있고 웹서버보다는 더욱 복잡한 작업 수행을 하고 더욱 많은 보안 요구사항을 충족시..
Spring Rest Client Spring Rest Client는 웹 서비스에 HTTP 요청을 보내고 응답을 받는 클라이언트입니다. 서버에 요청을 보내고 응답을 처리하기 위해 필요한 다양한 기능이 있는데 Spring에서 RestTemplate와 WebClient의 Rest Client를 제공합니다. RestTemplate는 Blocking I/O 기반의 동기식API입니다. 그렇기 때문에 절차 지향처럼 각 코드 라인이 끝나야 다음 라인으로 넘어갑니다. 즉 요청과 응답이 완료될때까지 스레드가 차단이 됩니다. WebClient는 Non-Blocking I/O 기반의 비동기API입니다. 그렇기 때문에 요청-응답 동작이 블로킹되지 않기 때문에 RestTemplate 성능이 좋습니다. Spring에서는 WebC..
Filter, Interceptor, AOP를 사용하는 이유 웹 개발을 하면은 로그인 처리, 권한 체크, XSS 방어, 모바일과 PC 웹의 분기 처리, 로그 기록, 페이지 인코딩 변환 등과 같이 공통적으로 처리해야 할 업무들이 많이 있다. 이러한 공통 업무는 모든 페이지마다 중복된 코드를 작성해야 한다면 코드 중복이 많아지게 되고, 프로젝트가 커질수록 서버 부하가 커질 수 있으며 소스 관리도 어려워진다. 코드의 재사용성과 모듈화를 가능하게 함으로써 중복 코드를 줄이고 개발 효율성을 향상시킨다. 공통 부분과 핵심 로직을 분리하여 코드의 모듈화와 관심사 분리를 지원하며, 유연한 확장성을 제공한다. 관심사 처리를 가능하게 하여 보안, 로깅, 트랜잭션 관리와 같은 공통된 업무를 효과적으로 처리할 수 있다. Fi..
List, Set, Map, HashMap의 차이에 대해서 설명해주세요. List는 데이터의 중복을 허용하고 들어온 순서그대로를 유지하고 있습니다. 그리고 인덱스를 통해서 데이터에 접근이 가능하고 크기를 동적으로 늘릴수 있다는 장점이 있고 단점으로는 원하는 리스트의 크기가 커지면 속도문제점이 발생할 수 있습니다. 자바에서 List에 관한 주요 구현체는 ArrayList, LinkedList가 있습니다. Set은 데이터 중복을 허용하지 않고 순서를 유지하지 않습니다. Set은 순서가 없기 때문에 인데스로 접근은 불가능하고 순차적인 탐색을 해야하기 때문에 List보다 속도가 느릴 수 있습니다. Set의 주요 구현체는 HashSet, LinkedHashSet, TreeSet이 있습니다. Map은 Key&Val..
JPA 영속성 컨텍스트란? JPA 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이고 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 입니다. 영속성 컨텍스트는 엔티티 객체를 생성하거나 조회할때 생성되고 트랜잭션이 시작되고 커밋되거나 롤백될 때 까지 유지됩니다. 영속성 컨텍스트 기능과 장점으로 엔티티 객체를 저장하는 1차 캐시가 있습니다. 1차 캐시는 동일한 엔티티에 대한 조회가 반복적으로 이루어질때 데이터베이스에 접근하지 않고 엔티티를 가지고올수 있어서 성능향상에 도움이 됩니다. 그리고 쓰지 지연이라는 기능이 있는데 엔티티의 변경된 값을 데이터베이스에 바로 보내지 않고 쌓아뒀다가 flush나 커밋을 통해서 한꺼번에 보내는 기능입니다 이것도 데이터베이스의 호출을 줄여서 성능..
Inversion of Control (IoC) 프로그램 흐름이 더 이상 개발자에 의해 제어되지 않고, 대신 프레임워크나 컨테이너가 객체의 생성부터 생명주기 관리까지 전체적인 제어권을 가지는 디자인 원칙입니다. Dependency Injection (DI) 의존성 주입은 객체에 다른 객체를 주입하는 것을 의미합니다. 일반적으로 객체 간의 관계에서 하나의 객체가 다른 객체를 사용하거나 의존하는 경우입니다. 예를 들어, 클래스 A가 클래스 B를 사용하고자 할 때, A는 B에 대한 의존성을 가집니다. 이때 의존성 주입을 통해 클래스 A에 클래스 B의 인스턴스를 주입하면, A는 B 객체의 기능을 사용할 수 있게 됩니다. 필요한 의존성을 클래스 내에서 직접 생성하거나 찾는 대신, 외부에서 주입받아 사용하는 기법입..
DI(Dependency Injection)에 대한 설명과 해당 기술의 장점 스프링 컨테이너에 Bean 객체들이 모여 있습니다. 이것을 객체에 다른 객체를 주입하기 위해 필요한 의존성을 클래스 내에서 직접 생성하거나 찾는 대신에 외부에서 생성자, 메소드를 통해 주입받아 사용하는 기법입니다. 이 기술을 적용하면 객체간의 종속성이 줄어들어 코드간의 결합도를 낮추고 유지 보수성이 좋아지고 가짜 객체로 대체하여 테스트도 용이하게 됩니다. 최종적으로 스프링 컨테이너가 객체의 생명주기를 관리하기 때문에 개발자는 객체 생성과 의존성 관리에 신경쓰지 않고 개발을 할 수 있습니다. Spring MVC에서의 예외 처리 기법에 대해서 설명해주세요. 예외처리기법에는 다양하게 많지만 @ControllerAdvice @Excep..
객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요 객체지향 프로그래밍은 여러개의 객체들 간의 상호작용으로 구성하는 프로그래밍입니다. 객체지향 프로그래밍으로 코드의 재사용성과 유지보수가 쉽습니다. 그리고 객체지향 프로그래밍에서는 중요한 키워드가 있는 클래스, 객체, 캡상추다가 있습니다. 클래스는 객체를 생성하기위한 설계도이며 필드와 메서드가 정의되어 있습니다. 객체는 클래스가 구체화된 형태로 메모리에 실제로 존재하며 각각의 속성값을 가지고 있을 수 있습니다. 그리고 캡상추다는 캡슐화, 상속, 추상화, 다형성인데 캡술화는 객체의 안정성과 신뢰성을 높이기 위해 객체의 기능을 외부에서 접근하는 것을 막는 것입니다. 상속은 부모 클래스의 특성과 동작을 물려받아서 재사용하는 ..
시간 복잡도(time complexity)는 알고리즘을 실행하는 데 필요한 컴퓨터의 연산 시간을 나타내는 개념이다. 입력 데이터의 크기에 따라 얼마나 많은 시간이 걸리는지를 측정한다. 알고리즘 시간 복잡도는 기본적으로 Big O 표기법으로 사용해서 표현된다. O(1) : 상수 시간(Constant time) - 입력 크기에 상관없이 항상 일정한 시간이 걸립니다. 예를 들어, 배열의 특정 인덱스에 위치한 요소를 조회하는 경우입니다. O(log n) : 로그 시간(Logarithmic time) - 데이터 양이 늘어나도, 연산 시간은 로그 함수로 증가합니다. 예를 들어, 이진 검색(binary search)이 이에 해당합니다. O(n) : 선형 시간(Linear time) - 입력 크기에 비례해서 시간이 걸..
- Total
- Today
- Yesterday
- Auto Scaling
- aws
- 위치의 중요성
- 인스턴스
- 로드 밸런서
- 로드밸런서
- script
- 오토 스케일링
- flask
- CodeDeploy
- githubactions
- JWT
- EC2
- Load Balancer
- HTML
- CICD
- java
- 시작 템플릿
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
