서블릿 웹 서버는 요청에 대해 정적 웹 페이지로 응답하는 방식의 서버이다. 여기에 동적인 응답을 내려주기 위해서 서블릿을 붙인 서버를 WAS(Web Application Server)라고 한다. 하지만 정적 페이지를 내려주기 위한 요청까지 처리하기에는 WAS에 부하가 걸릴 수 있으므로, 현재는 WAS 앞에 WS(웹 서버)를 붙여서 4 tier 아키텍처의 구조로 서버를 구성하는 것이 일반적이다. 그렇다면 서블릿을 붙였다는 것이 무슨 의미일까? HTTP 헤더에는 HTTP Method, Content-type, User-Agent, Host, Connection, Date, Keep-Alive 등의 다양한 옵션들이 존재한다. 만약 개발자들이 이러한 옵션들을 텍스트로 파싱하고 규약에 따라서 응답을 내려주어야 ..
웹 서버(Web Server) ㆍHTTP를 기반으로 동작 ㆍ정적 리소스(HTML, CSS, JS, 이미지, 영상) 제공 웹 애플리케이션 서버(WAS, Web Application Server) ㆍHTTP를 기반으로 동작 ㆍ웹 서버의 기능에 프로그램 코드를 실행하여 로직을 수행 ㆍ정적 리소스 + 동적 리소스 정적 리소스는 웹 서버가 처리하고, 남은 동적 리소스는 WAS에 처리를 위임하여 애플리케이션 로직을 전담한다. 그러면 WAS는 동적 리소스만 전담하여 처리할 수 있고, WAS에 오류 발생시 오류화면을 웹 서버에서 처리해줄 수 있는 장점이 있다. 서블릿(Servlet) 웹 서버에서 동작하는 웹 어플리케이션 컴포넌트(서비스 페이지)로, 웹브라우저의 요청에 따라서 서버가 실행하는 자바 프로그램을 말하는데, ..
HTTPHTTP(HyperText Transfer Protocol)은 텍스트 기반의 통신 규약으로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. HTTP는 클라이언트-서버 구조로 이루어져 request-response의 과정을 통해서 동작한다.Clint : Server에 requestServer : Client에 response 데이터 통신에 TCP나 UDP와 같은 하위 프로토콜을 직접 사용하는 경우는 많지 않으며, 대부분 HTTP를 이용한다. HTTP는 TCP/IP를 이용하는 응용 프로토콜이며, 무상태(stateless), 비연결형(connectionless)이라는 특징을 가진다. - stateless하다는 것은 서버가 클라이언트의 이전 상태와 정보를 보존/저장하지 않는다는 의미이며(저장이 필요..
DFS 스택(재귀)을 이용한 DFS에 대하여 알아보자. 코드의 편하게 작성하기 위해서 DFS는 스택을 따로 만들지 않고 재귀적으로 구현하기도 하는데, 이는 재귀적으로 함수호출이 이루어지는 로컬공간 자체가 스택의 구조를 갖고 있기 때문에 동일한 원리라고 할 수 있다. //백트래킹 void dfs(int root) { if(종료조건) return; for(i: root에 방문하지 않은 자식노드) { dfs(i); } 재귀를 이용한 DFS는 간단하게 종료조건이 나오기 전까지 계속 재귀호출을 이어가다가, 종료조건이 나오면 return하는 방식의 DFS이다. 스택을 사용한 DFS도 원리는 동일하다. 다만 상태공간트리에서 leaf노드를 나타낼 때 재귀를 이용한 구현에서는 return문을 사용했다면, 스택을 이용한 ..
문제 서기 2012년! 드디어 2년간 수많은 국민들을 기다리게 한 게임 ACM Craft (Association of Construction Manager Craft)가 발매되었다. 이 게임은 지금까지 나온 게임들과는 다르게 ACM크래프트는 다이나믹한 게임 진행을 위해 건물을 짓는 순서가 정해져 있지 않다. 즉, 첫 번째 게임과 두 번째 게임이 건물을 짓는 순서가 다를 수도 있다. 매 게임시작 시 건물을 짓는 순서가 주어진다. 또한 모든 건물은 각각 건설을 시작하여 완성이 될 때까지 Delay가 존재한다. 위의 예시를 보자. 이번 게임에서는 다음과 같이 건설 순서 규칙이 주어졌다. 1번 건물의 건설이 완료된다면 2번과 3번의 건설을 시작할수 있다. (동시에 진행이 가능하다) 그리고 4번 건물을 짓기 위해..
원래는 @RequestMapping 어노테이션을 통해서 URL을 컨트롤러의 메서드와 매핑할때 요청 주소와 방식을 설정하였다. @RequestMapping(value="/check", method={RequestMethod.POST}) 이후 스프링이 업데이트되면서 일일히 RequestMapping의 method를 설정해주지 않고 직관적으로 설정하기 위하여 Mapping관련 어노테이션인 @GetMapping, @PostMapping등이 추가되었다. 일반적으로 GET과 POST매핑을 사용할때, 뷰의 form태그의 method에 따라서 요청 방식이, action에 따라서 uri가 결정된다. 이때, form의 요청을 발생시켜주는 페이지의 uri와 form으로 요청이 들어오는 uri가 같다면 action uri는 ..
개요 HTTP 프로토콜은 stateless라는 특징을 갖는다. stateless(무상태)란 상태가 존재하지 않는다는 의미이다. stateless한 서버 입장에서는 동일한 클라이언트의 요청이라도 각 요청을 독립적으로 관리한다. 즉, 동일한 클라이언트가 다시 요청을 하더라도 서버는 이전의 요청을 기억하지 못하며, 이는 인증(Authentication)이 필요한 요청에 문제가 될 수 있다. 이러한 단점을 쿠키 없이 해결하기 위해서는 모든 요청에 사용자 정보를 포함하여 전송하면 된다. 하지만 모든 요청에 사용자 정보를 포함한다면 개발의 불편함과 보안상의 문제가 존재하기 때문에, 쿠키와 세션을 사용하여 이러한 문제를 해결한다. 쿠키 쿠키란 HTTP의 stateless라는 특징에서 벗어나 상태를 유지하기 위한..
변경 감지와 병합 영속성 컨텍스트가 더 이상 관리하지 않는 엔티티, 즉 식별자(id)를 기준으로 영속상태가 되어 DB에 저장되었던 적이 있지만 현재는 아닌 객체를 준영속 상태라고 한다. JPA가 관리하고 있는, 영속성 상태 객체의 변경감지는 transaction이 commit될때 작동한다. 하지만 준영속 상태의 엔티티는 JPA가 관리하지 않아서 변경 감지가 일어나지 않는다. 그래서 단순히 java 객체의 상태를 업데이트 하는 것만으로는 갱신이 일어나지 않는다. 이러한 준영속 상태의 엔티티를 변경하기 위해서는 변경 감지(Dirty Checking) 기능을 사용하거나, 병합(merge)를 사용할 수도 있다. 변경 감지 @Transactionalpublic void updateItem(Item item..
Application LayerTCP/IP 네트워크 프로토콜 스택에서 가장 상위 레이어를 담당하고 있는 부분이 Application Layer이다. 이 계층에서는 이름에서 알 수 있듯이 host(=end system)들에게 직접적으로 여러가지 서비스를 제공하거나 받는 역할을 한다.우리가 사용하는 수많은 네트워크 어플리케이션들(이메일, 웹, 원격로그인, 디스코드....etc)에서 제공되는 기능들은 모두 가장 먼저 이 계층을 거친다. Application ArchitecturesㆍClient-Server클라이언트-서버 구조에서 서버는 host가 되어 항상 서버를 항상 제공해야 하고, 고정된 IP주소를 갖는다. 클라이언트는 필요할 떄 서버와 통신하여 필요한 정보를 주고받는다. 또한 클라이언트끼리 통신하는 것..
Layering 실무에서 다루는 복잡한 프로그램들은 우리가 개념을 배울 때 사용하는 예시 프로그램과 같은 간단한 구조로 이루어져있지 않다. 이러한 복잡한 프로그램을 다루는 가장 일반적인 방법은 layer를 분리하는 것이다. 이렇게 Layering을 하는 목적은 추상화에 그 목적이 있다. JSP와 같이 하나의 파일로 여러가지 역할을 처리하면, 너무 많은 역할을 하게 된다. 비즈니스 로직을 호출하는 부분에 변경이 발생해도, UI를 변경할 일이 있어도 모든 경우에 하나의 파일에 접근하여 코드를 수정해야 하는 것이다. 그래서 적절한 Layering은 추상화를 성공시켜 각기 다른 layer끼리는 서로 변경에 영향을 받지 않게 되고, 이것은 유지보수에 큰 이점을 가져다준다. 개발자들은 다양한 프로젝트를 통해서 최선..
개요 "자바에서 객체의 동등성 비교를 위해서는 equals() 메서드가 사용되며, equals()메서드를 오버라이딩해줄 경우 hashCode()메서드도 오버라이딩해 주어야 한다. 단, 역은 성립하지 않는다" 자바를 처음 공부했을 때 equals와 hashCode라는 메서드에 대해서 나는 이정도로만 이해하고 있었다. 그런데 여러 프로젝트를 진행하면서도 equals를 오버라이딩 할 일이 없어서 한번 실습하면서 정리해보려고 한다. equals와 hashCode앞서 이야기했듯이 equals는 참조 변수의 동등성을 비교하는 함수이다. 최상위 클래스인 Object 클래스를 들어가보면 equals() 메서드를 확인할 수 있는데, 위와 같이 '=='연산을 통해 단순히 두 객체의 참조(주소)가 같은지를 비교하고 있다. ..
네트워크(Network) 컴퓨터와 같은 호스트(host) 간에 전송 매체들이 연결되어 데이터를 교환하는 시스템 자체를 이야기한다. 데이터의 교환 방식에는 다양한 방법들이 존재하는데, 시스템이 데이터를 교환할 때는 일련의 통신 규칙인 프로토콜(Protocol)에 의해 통신이 이루어진다.IP라는 프로토콜을 사용하는 네트워크인 인터넷이 대표적인 네트워크 통신망이다. 프로토콜(Protocol) 데이터 통신을 위해서 사용하는 통신 규약을 말한다. 대표적으로 인터넷에서 사용하는 프로토콜인 IP(Internet Protocol)이 있다. 인터넷을 사용할 때는 IP 패킷이라는 단위로 여러 정보들을 담아서 서버간 통신을 진행한다. 패킷(Packet)데이터 통신이 이루어질때 네트워크를 통해서 송수신되는 데이터 조각이..