분류 전체보기 118

GSLB(Global Server Load Balancing)

정의 글로벌하게 분산된 서버간의 로드 밸런싱 작업으로 지리적으로 분산된 애플리케이션 서버 간에 트래픽을 효율적으로 분산 즉 지리적으로 분산된 위치에 있는 서버 간 부하 분산 사용하는 이유? 성능 : 사용자 요청을 가장 가까운 서버로 전달하여 네트워크 지연 및 네트워크 문제를 최소화 맞춤형 콘텐츠 : GSLB를 사용하면 기업이 해당 지리적 위치 및 언어의 관련성을 위해 맞춤화된 로컬 서버에서 콘텐츠를 호스팅 재해복구(Disater Recovery)용도로도 사용 (ex 지진으로 인한 서울서버 장애시 부산서버로 연결) 유지 관리 : 클라이언트 요청을 다른 서버로 간단히 리디렉션할 수 있으므로 데이터 센터 마이그레이션 및 업그레이드를 중단 없이 실행 기존 DNS는 사용자에게 최적의 경로를 안내하지 못함, 기반 ..

CS 2022.06.11

XSS 와 CSRF

XSS(Cross Site Scripting) Web Application에서 나타나는 취약점중 하나로 웹사이트 관리자가 아닌 이가 사이트에 악성 script를 삽입할 수 있는 취약점이다. 사용자의 쿠키, 세션 탈취, 비정상기능 수행등을 한다. html이 를 자바스크립트라고 인식해서 실행한다. 악성코드를 퍼트릴 때 많이 사용한다. 다음과 같은 경우에 발생 데이터는 신뢰할 수 없는 소스를 통해 웹 응용 프로그램에 입력되며 가장 자주 웹 요청이 발생합니다. 데이터는 악성 콘텐츠의 유효성을 검사하지 않고 웹 사용자에게 전송되는 동적 콘텐츠에 포함됩니다 1. Reflected XSS - non persistent 요청과 동시에 결과가 사용자에게 반사되는 형태 클라이언트 요청에서 전송된 악성 스크립트는 서버에 전..

스프링 2022.06.05

서블릿(Servlet)

서블릿(Servlet) 이란? 서블릿이란 동적인 페이지를 만들기 위해 사용되는 웹 애플리케이션 프로그램 낮은 성능 및 낮은 수준의 확장성과 같은 CGI 의 한계를 해결 CGI (Common Gateway Interface)는 뭔가요? CGI 는 실제로 C 또는 C++ 와 같은 프로그래밍 언어를 사용하여 작성된 외부 응용 프로그램이며 클라이언트 요청을 처리하고 동적 콘텐츠를 생성하는 역할 CGI 는 이처럼 서버에서 모든 요청에 대한 프로세스를 만들기 때문에 많은 요청이 있을 경우 메모리에 적재하여 CPU할당을 받아 실행되는 프로세스는 서버에 부하가 많이 일어난다. 그래서 이를 해결하고자 모든 새 요청에 대해 프로세스를 생성하지 않고, 모든 요청을 동시에 처리하는 단일 인스턴스만 존재하는 서블릿을 사용합니다..

스프링 2022.05.31

싱글톤 패턴(Singleton)

정의 객체의 인스턴스가 오로지 한개만 생성되도록 설계하는 것 클래스의 인스턴스화를 하나의 객체로 제한 왜 쓰는지?? Singleton은 고유한 리소스를 캡슐화하여 애플리케이션 전체에서 쉽게 사용할 수 있도록 함 캘린더, 로깅 등에 사용 됨 why? => 오로지 한개만 필요하기 때문에 기타 장점 인터페이스를 구현 가능 지연 로드 가능 단점 전역 상태는 코드의 결합을 증가시키기 때문에 리팩토링하기가 어려워 진다. 클래스가 싱글톤의 구체적인 구현에 의존하게 된다. → IoC/ DI 컨테이너를 사용하여 객체를 요청하는 하는 것으로 바꿔야 한다. 단위 테스트가 어려워짐 → 생성자를 통해 동적으로 객체를 주입할 수 없어 이런 경우는 필요한 객체를 직접 만들어서 사용해야 하기 때문에 테스트용 객체로 대체하기가 힘듬 ..

스프링 2022.05.26

REST ? RESTful ? REST API?

자바 스프링을 공부하기에 카테고리는 마땅히 추가할 곳이 없어 스프링에 분류했습니다. F-lab 2주차 RESTful 에 대하여 한번 공부해보라는 과제가 주어져 한번 찾아보게 되었다. 자바 스프링 공부를 하면 자연스럽게 HTTP 도 공부를 하게 되는데 그 과정에서 REST라는 단어를 많은 사람들이 쓰는것을 보았고 RESTful 하다. RESTful 하지않다. REST API 를 만드려면 어떻게 해야하나요? 라는 글 같은 것을 많이 봤지만 아직 나랑은 먼 단계 라고 생각하여 자세하게 알아 볼 생각은 없었다.. 반성하자 과제도 과제이지만 이미 많은 사람들이 언급하는 것으로 보아 중요할 것 같은데 왜 이런 말들이 많을까 한번 알아보고 정리해봤다. 왜? 라는 이유에 집중을 해봤다. REST REST(REprese..

스프링 2022.05.26

모던 자바 인 액션 - 6장 스트림으로 데이터 수집

6.1 컬렉터란 무엇인가? Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정 함수형 프로그래밍은 ‘무엇'을 원하는지 직접 명시할 수 있어 어떤 방법으로 이를 얻을지는 신경 쓸 필요가 없다. 이는 다수준으로 그룹화를 수행할 때 명령형 프로그래밍과 함수형 프로그래밍의 차이점이 더욱 두드러진다. 명령형 코드에서는 문제를 해결하는 과정에서 다중 루프와 조건문을 추가하며 가독성과 유지보수성이 떨어지지만 함수형 프로그래밍에서는 컬렉터를 쉽게 추가할 수 있다. 강점 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다 명령형 프로그래밍에서 직접 구현해야 했던 작업이 자동으로 수행 collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 방문하면서 컬렉터..

관심사의 분리(Seperation Of Concern)

객체지향의 세계에서는 모든 것이 변한다. 변수나 객체의 필드값이 변하는게 아닌 객체에 대한 설계와 이를 구현한 코드가 변한다는 뜻 입니다. 사용자의 변화하는 요구사항은 소프트웨어 엔지니어링에서 피할 수 없습니다. 그래서 개발자는 객체를 설계할 때 이 '변화하는 미래를 어떻게 대비할 것인가' 를 고려해야 합니다. 가장 좋은 방법은 변화가 이루어질 때 이 변화의 폭을 최소한으로 줄여주는 것이다. 이 변화의 폭을 최소한으로 줄이기 위해 관심사의 분리가 필요합니다. 사용자는 자동차를 운전한다 라는 프로그램을 만드려고 합니다. 그런데 사용자가 아반떼를 운전하고싶다는 요구사항이 있습니다. 그럼 어떻게 코드를 구현할 수 있을까요? class Avante { public void accel(){ System.out.p..

스프링 2022.05.18

모던 자바 인 액션 - 5장 스트림 활용

스트림 활용 지난 장에서 외부 반복을 내부 반복으로 바꾸는 방법을 살펴봤습니다. 데이터를 어떻게 처리할지는 스트림 API가 관리 → 편리하게 데이터관련 작업을 할 수 있다. 스트림 API 내부적으로 다양한 최적화가 이루어질 수 있다. 스트림 API는 내부반복 뿐 아니라 코드를 병렬로 실행할지 결정 가능 이러한 일은 단일 스레드로 구현하는 외부 반복으로는 달성할 수 없습니다. 이번 파트는 스트림 API가 지원하는 다양한 연산을 살펴볼 것입니다. 1. 필터링 스트림의 요소를 선택하는 방법 두가지 프레디케이트 필터링 방법과 고유 요소만 필터링 하는 방법을 알아봅시다. 1.1 프레디케이트 필터링 스트림 인터페이스는 filter 메서드를 지원 프레디케이트를 인수로 받아 프레디케이트와 일치하는 모든 요소를 포함하는..

[프로그래머스 Level3] 불량 사용자(JAVA) - 2019 카카오 인턴

문제 https://programmers.co.kr/learn/courses/30/lessons/64064?language=java 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr [제한사항] user_id 배열의 크기는 1 이상 8 이하입니다. user_id 배열 각 원소들의 값은 길이가 1 이상 8 이하인 문자열입니다. 응모한 사용자 아이디들은 서로 중복되지 않습니다. 응모한 사용자 아이디는 알파벳 소문자와 숫자로만으로 구성되어 있습니다. banned_id 배열의 크기는 1 이상 user_id 배열의 크기..

카테고리 없음 2022.05.12

모던 자바 인 액션 - 4장 스트림 소개

스트림 소개 거의 모든 자바 애플리케이션은 컬렉션을 만들고 처리하는 과정을 포함합니다. 대부분의 프로그래밍 작업에 사용되며, 컬렉션으로 데이터를 그룹화하고 처리할 수 있습니다. 비즈니스 로직상 컬렉션에 대해 특정 카테고리로 그룹화 하던가, 특정 키워드를 사용하여 원하는 결과를 찾는 연산을 요구하는 작업이 있을 수 있습니다. 대부분 데이터베이스에서는 선언형으로 이와 같은 연산을 표현할 수 있습니다. 예를 들어 ‘SELECT name FROM cars WHERE price < 2500’이라는 문장같이 2500 이하인 차량을 선택하라는 SQL질의를 만들 수 있습니다. 이처럼 자동차의 속성을 이용하여 어떻게 필터링 할 것인지는 구현할 필요가 없습니다. 어떻게 구현해야 할지 명시할 필요가 없고 구현은 자동으로 제..