분류 전체보기 118

웹 서버(Web Server) 와 웹 애플리케이션 서버(WAS)

웹 서버(Web Server) 란? HTTP 기반으로 동작하며 클라이언트로부터 HTTP 요청을 받아 각종 서비스를 제공하는 컴퓨터 입니다. 클라이언트는 웹서버에게 주소를 가지고 통신규약에 맞게 요청하면 알맞은 내용을 응답 받습니다. 서버는 클라이언트의 요청을 기다리고, 웹 요청에 대한 데이터를 만들어서 응답합니다. 서버는 이때 정적 리소스를 제공합니다. 그러면 WAS는 무엇일까요? 웹 애플리케이션 서버(Web Application Server) 란? - 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크. - 웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에게 전달합니다. WAS는 웹 서버 기능을 포함 하고 프로그램 코드를 실행해서 애플리케이션 로직..

스프링 2022.01.27

[백준 12904] - A와 B(JAVA)

[문제] 출처 - https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net [문제풀이] 처음은 문자열 S 를 T 로 바꿀 수 있는지 찾으려고 접근을 해봤습니다. S에서 A를 추가하거나, 뒤집고 B를 추가하는 방식 2가지중 하나를 선택하면 풀지 않을까 생각을 했는데 문제 제한 조건이 T의 길이가 1000보다 작다고 주어졌습니다. 이 방법으로 구현을 하면 2^1000 이기 때문에 당연히 시간초과가 날 것이고.. 문제를 ..

백준 문제풀이 2022.01.26

그리디(Greedy) 알고리즘

그리디 알고리즘은 최적해를 구하는 데에 사용되는 근사적인 방법으로, 매 선택에서 그 순간에 가장 최적이라 생각되는것을 선택하여 결과에 도달하는 방법입니다. 매 순간 가장 최적을 선택하기 때문에 현재 상황의 선택이 나중에 미칠 영향은 고려하지 않습니다. 그래서 결과를 만들었다고 해서 그것이 최적이라는 보장이 없습니다. 하지만 이 알고리즘을 적용할 수 있는 문제들은 지역적으로, 전역적으로 최적인 문제입니다. 지역적으로 전역적으로 무슨말인지 헷갈리시다면 위 그림을 보시면 바로 이해가 가능합니다. 왼쪽 그림은 최소값을 찾는다고 가정했을때 지역적으로, 전역적으로 최적인 답을 만족하는 그래프의 형태이고 오른쪽 그림은 지역적으로는 최적인 답을 찾을 수 있지만, 전역적으로는 최적인 답이 아닙니다. 그래서 문제를 접하면..

알고리즘 정리 2022.01.25

[백준 11000] - 강의실 배정(JAVA)

[문제] 출처 - https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net [문제풀이] 언뜻 회의실 배정(1931) 문제와 똑같다고 생각하여 종료시간 기준으로 정렬한 뒤 풀었으나 틀렸습니다. 그 이유는 최대한 많이 강의실을 배정할 수 있게 만드는 게 아니라 최소의 강의실을 사용한다 가 포인트입니다. 한 강의가 시작되고 끝나는 시간에 최대한 강의를 시작할 수 있게 만들어야 강의실을 최대한 적게 쓸 수 있습니다. 예를들어 아래와 같이 수업이 주어집니다.(시작시간 기준 정렬함) 1 5 2 3 4 9 5 8..

백준 문제풀이 2022.01.24

SOLID 5원칙 - DIP 의존관계 역전 원칙(Dependency inversion principle)

프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나다. 쉽게 이야기해서 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻입니다. 클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있습니다. 구현체에 의존하게 되면 변경이 아주 어려워집니다. 바로 DIP를 위반한 코드를 보여드리면서 설명 드리도록 하겠습니다. interface Car{ void rideCar(); } class Tesla implements Car{ @Override public void rideCar() { System.out.println("Tesla에 탑승했습니다."); } } class Genesis implements Car { @Override publ..

SOLID 5원칙 - ISP 인터페이스 분리 원칙(Interface Segregation Principle)

인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다. 즉 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터 페이스 하나보다 낫다 라는 뜻 입니다. 바로 예시 코드를 들어 간단하게 설명 하도록 하겠습니다. 우선 ISP를 위반한 코드를 보여드리겠습니다. interface Car{ void rideCar(); void Accel(); void stop(); void UseElectric(); } class K3 implements Car{ @Override public void rideCar() { System...

SOLID 5원칙 - LSP 리스코프 치환 원칙(Liskov Substitution Principle)

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것, 다형성을 지원하기 위한 원칙, 인터페이스를 구현한 구현 체는 믿고 사용하려면, 이 원칙이 필요하다. 단순히 컴파일을 실패하고 성공하는 것을 얘기하는 것이 아니다. 즉, 상위타입에서 어떤 동작하는 기능이 있는데 이를 확장한 하위타입에서도 상위타입과 동일하게 동작해야 합니다. 위키백과에 실려있는 전형적인 위반의 예로 코드를 만들어 보겠습니다. 너비와 높이의 조회(getter) 및 할당(setter) 메서드를 가진 직사각형 클래스로부터 정사각형 클래스를 파생하는 경우를 들 수 있습니다. 편의상 getter는 생략하겠습니다. package SOL..

SOLID 5원칙 - OCP 개방 폐쇄 원칙(Open/Closed Principle)

소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현하는 것이다.개방-폐쇄 원칙이 잘 적용되면, 기능을 추가하거나 변경해야 할 때 이미 제대로 동작하고 있던 원래 코드를 변경하지 않아도, 기존의 코드에 새로운 코드를 추가함으로써 기능의 추가나 변경이 가능합니다. 만약 이 원칙을 지키지 않으면 어떤일이 발생하는지 코드로 먼저 보여드리겠습니다. class Car{ String name; String brand; public Car(String name, String brand) { this.name = name; this.brand = brand; } } public class ..

SOLID 5원칙 - SRP 단일 책임 원칙(Single Responsibility Principle)

컴퓨터 프로그래밍에서 SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. 출처 - 위키백과 SRP 단일 책임 원칙(Single Responsibility Principle) 이란?? 한 클래스는 하나의 책임만 가져야 한다. 다른말로는 클래스를 변경하는 이유는 단 한개여야 한다. 라는 원칙입니다. 하나의 책임? 솔직히 처음 접하면 무슨말인지 이해하기 참 어렵습니다. 아주 유명하신 로버트 마틴이라는 분이 말하시는 SRP는 하나의 클래스가 변경되어야 하는 사유는 하나여야 한다. 소프트웨어를 더 쉽게 구현하고 변경으로 인하여 예상못한 부작용을 방지하기 위함입니다. 사용자의 요..

[프로그래머스 Level3] - 디스크 컨트롤러 (JAVA)

[문제] 출처 - https://programmers.co.kr/learn/courses/30/lessons/42627?language=java 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr [문제 풀이] 이 문제는 '우선순위 큐' 로 해결 할 수 있는 문제입니다. 현재 작업이 종료되기 전에 들어온 요청들을 작업의 소요시간이 짧은 순서대로 나열해야하기 때문입니다. 근데 이 문제에서는 작업이 요청되는 시점과 작업의 소요시간으로 주어집니다. 문제에서는 [0,3] [1,9] [2,6] 으로 요청되는 시점 순..

프로그래머스 2022.01.17