서블릿, JSP, MVC 패턴의 차이
2022. 1. 24. 12:01
Spring
순서대로 보자면, 발전 순서는 이렇다. 순수 자바로 모든 웹 처리 구현 → 서블릿 → JSP → MVC1 → MVC2 어떤 차이점이 있는지 알아보자. 서블릿 JSP, MVC도 모두 서블릿을 활용한 기술이다. 하지만 서블릿은 개발자가 웹 응답이냐 요청 처리에 관여를 해야하고 동적 HTML 생성도 불편하기 때문에 불편함을 느끼게 되었다. 어떤 것이 불편했을까 살펴 보자. 어떤 것이 불편 했을까 웹 서버 요청, 응답에 대한 처리를 직접 해야 함. 동적 HTML 생성이 아주 불편함. 등 여러가지 아래 코드는 서블릿으로 구현한 회원 가입 기능이다. 보는 바와 같이 브라우저에 응답할 Content-Typer과 같은 정보들을 직접 컨트롤 해야 하고 특히 HTML 처리가 엄청나다. 이런 징그러운 코드를 사용하지 않기 ..
서블릿과 톰캣의 관계
2022. 1. 24. 11:57
Spring
서블릿이란 HTTP 요청으로부터 웹 페이지를 동적으로 생성하는 서버 프로그램이다.(자바 클래스) 개발할 때 마다 이런 기능을 구현할 수 있겠지만 불편하기 때문에 서블릿이라는 것이 생겨났고, 성능 향상이 되었다. 서블릿은 JPA와 같이 인터페이스가 되며, 이를 지원하는 것이 아파치 톰캣(WAS)이다. JSP와 비슷하지만 서블릿은 자바 코드에서 HTML을 포함하고, JSP는 HTML에 자바 코드를 포함한다. 서블릿에서 동적으로 HTM 만들기 어려워서 JSP가 등장한 것이다. JSP는 결국 내부적으로 서블릿을 호출하게 된다. 이 JSP와 서블릿을 실행할 수 있는 것이 아파치 톰캣이다. 출처 : 위키백과 만약 서버를 바꾸고 싶다면 초록색 박스인 톰캣만 서블릿과 JSP(JSP를 사용한다면)를 지원하는 서버로 갈아..
서블릿과 동시 요청 처리(멀티 쓰레드)
2022. 1. 24. 11:53
Spring
서블릿은 웹 요청과 응답 처리를 해주는 자바 API이다. 즉, 웹 서버처리에 필요한 요청과 응답을 관리하는 것이다. 서블릿을 구현(서블릿은 인터페이스)하는 것들이 톰캣과 같은 WAS 서버인데 톰캣은 apache라는 웹 서버를 포함하고 있다. 즉, 우리가 HttpServlet 같은 것을 사용하여 요청 받고 응답받고 하는 코드들이 톰캣이 서블릿을 구현하여 웹 요청을 처리 해주기 때문인 것이다. 자세히 알아보도록 하자.https://dev-monkey-dugi.tistory.com/119 웹 서버에서는 정확히 무엇을 처리해야 할까? 웹 서버는 웹의 요청과 응답을 관리한다고 했다. 일단 요청이 오고 응답을 주어야 애플리케이션 로직이 당연히 의미가 있는 것이니까 **여기서 웹 서버가 처리한다고 하는 것은 정적 리..
Web Server와 WAS
2022. 1. 24. 11:43
Spring
Web Server 정적 리소스 파일 웹 서버도 프로그램 실행하는 기능을 포함하기도 한다고 함... Web Application Server 애플리케이션 로직이 들어간 것(프로그램을 실행하는 것) 애플리케이션 코드를 실행하는데 더 특화 됨. 자바는 서블릿 컨테이너 기능을 제공하면 WAS라고 볼 수도 있지만 서블릿 없이 자바 코드를 실행하는 프레임 워크도 있음. 실무에서 선정 방법 WEB Server와 WAS를 분리하는 이유 WAS도 정적 리소스를 제공할 수 있고, WEB도 동적 기능을 제공할 수 있음. 그런데 왜 분리하지? WAS는 로직을 처리하므로 하는 일이 많기 때문에 정적 리소스까지 처리하면, WAS가 너무 많은 역할을 담당하게 되므로 서버 과부하 우려가 있음 WAS 장애 시 WEB요청 자체가 불가..
InputStream과 BufferedReader
2022. 1. 18. 15:39
웹 프레임워크 만들며 알게된 것들
입출력에 관해서는 구현할 일이 없어서 한 번도 공부해 본적이 없는 부분인데 항상 궁금하긴 했었다. 문법 조차 몰랐던 부분이다. 이번에 HTTP 요청과 응답을 구현하기 위해 알아야 해서 가볍게 문법만 살펴 보았다. InputStream 1byte만 읽을 수 있다. 아스키 코드로 반환된다. 그래서 아주 불편하다. 파일 전송 시 사용하기는 좋다. public class Test { public static void main(String[] args) throws IOException { InputStream in = System.in; int a = in.read(); System.out.println(a); } } // a -> 입력 // 97 -> 출력 여러 바이트를 읽기 위해서도 마찬가지로 불편하다. p..
멀티 쓰레드란
2022. 1. 18. 15:39
웹 프레임워크 만들며 알게된 것들
프로세스와 쓰레드 프로세스 엑셀, 카카오톡, 멜론 등과 같은 하나의 프로그램이다. 프로세스 안에는 쓰레드가 존재한다. 쓰레드 프로세스 안에 쓰레드가 존재하는데 싱글 스레드, 멀티 스레드로 나뉜다. 싱글 스레드는 실행할 내용이 1가지이고, 멀티 스레드는 2가지 이상인 것을 의미한다. 쓰레드란 카카오톡이 프로세스라면 메시지 전송, 파일 다운로드, 선물 받기 등이 될 수 있다. 3가지는 모두 동시에 실행될 수 있지 않은가? 매시지를 전송한다고, 파일을 다운로드 못받는건 아니다. 이렇게 각자의 기능을 동시에 실행하는 것이 멀티 스레드이다. 메인 스레드가 종료되더라도 작업 스레드가 남아있다면 프로세스는 종료되지 않게 된다. 카카오톡을 종료한다고 해서 파일 전송이 실패하는 건 아니지 않은가? 메인 스레드와 작업 스..
소켓 통신이란
2022. 1. 18. 15:37
웹 프레임워크 만들며 알게된 것들
소켓 프로그래밍이란 소켓을 이용한 통신 프로그래밍이다. 전화기 처럼 통신할 대상들은 소켓이 각자 필요하다. 통신 프로토콜에는 TCP, UDP가 있다. 서버 소켓은 소켓간 통신할 수 있도록 연걸하는 역할이다.(ServerSocket) 이후 통신은 소켓간에 알아서 하게 된다. 마치 전화 교환기(서버 소켓)과 이후에는 전화기 끼리 통화는 하게 되는 것과 같다. ServerSocket : 전화 교환기의 역할이고, 요청(전화)가 올 때 까지 계속 기다린다. Socket : ServerSocket이 연결해준 전화기끼리 입출력(이야기)를 한다. ServerSocket 하나 당 하나의 소켓 통신만 가능하므로 여러 요청을 한 번에 받으려면 그만큼 ServerSocket을 생성하고 쓰레드도 각각 생성 해주어야 한다. 통신..
4단계 볼링 & 레거시 리팩토링과 회고
2022. 1. 17. 11:35
TDD 클린코드 java 10기 교육 과정
질문 답변 게시판 리팩토링 이 과정은 결국 실제 상황에서 리팩토링을 하기 위한 연습을 하는 과정이다. 그렇기에 순수 자바로 했던 미션들 보다 더욱 중요한 과정이 질문 답변 레거시 리팩토링 미션이다. 무진장 기대를하고 리팩토링을 시작했다. 그런데 ?? 생각보다 너무 간단하게 해결이 되었다. 너무나 당연하다는 듯이 해결이 되었다. 리팩토링을 해야하는 코드는 서비스 코드에 모든 로직이 있었다. 이를 리팩토링하는게 미션이었다. 도메인 레벨로 옮기는 것이다. 조금 막막할 줄 알았는데 의외로 해결이 잘 되어서 확실히 성장 했다고 느꼈다. 물론 설계가 잘 되어있어서 그랬을 수도 있겠지만.. ㅋ.ㅋ 예전 같으면 “이걸 뭘 어떻게 서비스에서 빼라는거야? 당연히 서비스에 있는거 아니야?" 라고 생각했을 것 같다. 실제로 ..