전체 글

전체 글

    💎 Spring : 프론트 컨트롤러(FrontController) & 프로퍼티 에디터(PropertyEditor)

    📌 프론트 컨트롤러로부터 받을 수 있는 파라미터 PageController의 메서드를 호출하는데 DispatcherServlet이 메서드가 원하는 파라미터가 뭔지에 따라 꼽아준다. 메서드가 뭘 리턴하는지에 따라 적절하게 처리해준다. return 값에 따라서 그대로 클라이언트에 응답할 응답데이터로 할지 Jsp이름이라면 Jsp를 실행해서 응답한다. RequestHandler 요청을 다루는 자 // 프론트 컨트롤러(DispatcherServlet)로부터 받고 싶은 값이 있다면 // 요청 핸들러를 정의할 때 받고 싶은 타입의 파라미터를 선언하라! // 그러면 프론트 컨트롤러가 메서드를 호출할 때 해당 타입의 값을 넘겨줄 것이다. // ServletContext는 의존 객체로 주입 받아야 한다. // 요청 핸들러..

    🔦 자바의 강점 : Multi-Thread

    다중 클라이언트 접속과 멀티스레드 📌 Stateful vs Stateless 이번에는 다중 클라이언트 접속에 대해서 알아보자! 다중 클라이언트 접속은 크게 2가지로 나눌 수 있다. Stateful 방식 Stateless 방식 이 개념은 일상생활에 적용시켜보면 매우 쉬운 개념이다. 왜냐하면 이미 우리 모두가 경험한 일이기 때문이다. 첫 번째로 Stateful방식은 상담사화 전화연결을 하는 상황에 빗대어 볼 수 있다. 고객이 상담사에게 전화를 걸면 상담사는 고객이 문의하는 사항을 들어주고 그에 대한 답변을 해주며 추가 질문이 있을 시 서로 대화를 주고받으면서 문제를 해결한다. 문제가 해결되고 나면 연결이 끊어지게 된다. 이 방법은 클라이언트가 끊기 전까지 연결이 유지된다는 점이 특징이다. 하지만 클라이언트가..

    ☎️ Observer design pattern & Listener

    Observer design pattern & listener 옵저버 패턴이라는 것을 알 수 있는 키워드는 "listener"이다. 만약 자바 코드에서 listener를 발견한다면 아! 옵저버 패턴을 적용하였구나로 이해하면 쉽다. 지금부터 옵저버 패턴에 대해서 알아보자! 위의 그림은 옵저버 패턴에 대한 내용을 나타낸 것이다. 보호관찰사와 가석방죄수의 예를 들면 쉽게 이해할 수 있을 것이다. 보호관찰사의 역할은 가석방죄수를 감시하는 것이다. 가석방 죄수는 어떠한 행위를 할 때 보호관찰사에게 보고하도록 시스템화 되어 있다. 즉 보호관찰사가 24시간 감시하는 것이 아니라는 소리다. 이를 똑같이 자바코드에 적용하면 다음과 같다. 어떠한 객체는 Observer 객체의 주소를 가지고 있다. 그리고 해당 객체의 상태..

    📮 자바에서의 네트워크(Network)

    📌 네트워크의 흐름 LAN WAN Gateway Internet NIC ✔️ 비록 같은 컴퓨터일지라도 프로그램사이에 직접적으로 데이터를 전달할 수 없다. ✔️ NIC(Network Interface Card)을 통해서 데이터를 전달할 수 있다. ✔️ 외부의 다른 컴퓨터와 통신하기 위해서는 HUB를 통해 데이터 전달이 가능하며, 중앙 HUB를 지나 Gateway를 지나서 통신사를 거쳐 다른 컴퓨터와 통신할 수 있다. 📌 포트(Port)번호와 소켓(Socket) ✔️ 포트번호는 통신할 대상을 구분하기 위해 부여된 번호를 말한다. ✔️ Client와 Server 모두 포트번호를 가지고 있다. ✔️ 자바에서 내부적으로 네트워크 통신을 가능하게 해주는 것이 바로 소켓이다. ✔️ Client에서 소켓을 만들며, S..

    😆 Network의 필요성 DBMS의 등장?

    파일 시스템에서 DB로 변화하는 과정 📌 현재 사용하고 있는 애플리케이션의 문제점 현재 애플리케이션은 네트워크 통신이 가능하지 않다. 각각의 사람들이 앱에 저속해서 파일을 등록하고 읽어올 수 있는 구조이다. 현재의 구조에서 여러명의 사람들에게 파일을 공유할 수 있는 방법은 무엇일까? 3명의 사람이 1개의 컴퓨터를 공유한다. 한 명이 작업하면 다른 사람에게 파일을 공유한다. 1번, 2번 방식으로 어떻게든 돌릴 수 있겠지만 근본적인 해결책은 아니다. 지금 세상에 누가 1개의 컴퓨터로 작업을 하나? 그리고 일일이 1명 1명 체크하면서 파일을 공유하나? 해결책이 필요해보인다. 📌 데이터를 공유하는 고전적인 방법 : 파일서버 또는 네트워크 드라이브로 파일 공유 하나의 pc에 파일을 저장해놓고 각각의 사람들이 pc..

    🚿 Decorator design patter & stream 2

    decorator design pattern & file I/O 📌 상속의 한계와 데코레이터 패턴의 필요성 📌 기능을 확장하는 방법 : 상속과 포함 📌 데코레이터 패턴의 적용 : 바이트 스트림 클래스 vs 캐릭터 스트림 클래스

    🔋 버퍼(buffer)의 필요성을 느껴보자

    버퍼는 왜 사용하는 것인가? 버퍼(buffer) = 데이터 임시 저장 공간 📌 데이터 읽기 데이터 읽기 시간 = average seek time + data transfer time ex) 1000 바이트를 읽는다고 가정한다면? 1바이트씩 1000번 읽기 1000바이트씩 1번 읽기 1바이트를 여러 번 읽을 경우 매번 바이트의 위치를 찾아야 하기 때문에 평균 탐색시간이 누적되어 한 번에 1000 바이트를 읽는 것 보다 시간이 오래 걸린다. Q. 그러면 한 번에 다 읽으면 되지 않나요? 메모리를 읽을 때 왕창 읽지 왜 깨작깨작 여러번에 걸쳐 읽냐? 하필 8192바이트씩말이지.. 다쓰면 또 다시 읽고 A. PC 처럼 소수의 프로그램이 동시에 실행될 때는 상관없지만, 서버처럼 데이터를 읽는 코드가 동시에 수천개..

    ⛓️ 링킹(linking)과 라이브러리(library)

    링킹(linking)과 라이브러리(library) function이나 structure, class 등의 코드를 모아둔 파일을 라이브러리(library) 라고 한다. 📌 동적 연결 라이브러리(dynamic linking library) vs 정적 연결 라이브러리(static linking library) 링킹(linking)은 프로그램에서 호출하는 외부함수가 들어있는 라이브러리를 함께 묶어서 실행 파일을 만드는 것을 말한다. 여기서 중요한 특징이 있는데 .lib은 파일 전체가 실행파일에 포함되며, .dll 파일은 실행파일에 포함되지 않으며 파일정보만 포함된다. 프로그램에서 가리키는 .dll 파일을 메모리에 따로 로딩하며 다른 실행파일이 동일한 .dll을 필요로 하는경우 같이 가리켜서 사용 가능하다. 이를..