개발

    JSP 필터

    필터란? 필터는 이름에서도 알 수 있듯 정수기 필터, 에어컨 필터, 담배의 필터와 같이 무언가를 걸러내는 필터를 말합니다. JSP/Servlet 에서도 필터의 개념은 같지만 걸러내는 대상이 다릅니다. Jsp/Servlet에서의 필터는 서블릿 2.3 부터 추가된 기능으로 클라이언트(브라우저)가 서버로 요청을 보내올때 요청이 서블릿으로 전달되기 전, 후에 필터링하기 위한 기술을 의미합니다. Jsp/Servlet 스펙에서 필터는 사용하기 쉽도록 javax.servlet.Filter 인터페이스로 제공하고 있으며 이것을 구현하고 web.xml에 등록하기만 하면 간단하게 사용할 수 있습니다. 인터페이스의 구현 메서드는 서블릿의 service() 메서드나 doGet() doPost() 메서드와 유사하기때문에 매우 익..

    힙덤프

    Heap 동적으로 할당되어 사용할 수 있는 메모리 영역 주로 실행중에 생성되는 객체들이 저장되고, 실행 후 제거되는 영역 GC(Garbage Collection)의 대상의 되는 메모리 영역 가비지 컬렉터는 가비지 컬렉션을 통해 힙 영역에 있는 사용되지 않는(더이상 참조가 없는) 객체를 회수한다. 힙 덤프 : 힙 메모리의 내용을 그대로 파일로 떠놓은 것. 주의 : 서버에서 이 파일을 열면 안됨. 서버의 메모리를 사용하여 서버 다운될 수 있다. 메모리 누수 힙 영역에 있는 동적으로 할당된 객체가 더 이상 사용되지 않음에도 불구하고 가비지 컬렉터에 의해 회수되지 않고 메모리에 남아있어서 자리만 차지하는 현상 OOM 메모리 부족현상 어플리케이션이 동작하지 못하고 JVM이 종료되는 최악의 상황. 24시간 서비스하..

    스레드풀이란

    스레드풀이란 스레드를 미리 만들어 풀장에 풀어놓는 개념이라고 이해하면 쉬움 사용자로부터 들어온 요청을 작업큐에 넣고 스레드풀은 작업큐에 들어온 Task 일감을 미리 생성해놓은 스레드들에게 일감을 할당한다. 일을 다 처리한 스레드를 다시 어플리케이션에게 결과값을 리턴한다. 자바에서는 스레드풀을 생성하고 사용할 수 있도록 concurrent 패키지에서 ExecutorService인터페이스와 Executors 클래스를 제공하고 있다. Executors의 다양한 정적 메소드를 통해 ExecutorService 구현 객체를 만들어서 사용할 수 있으며, 이것이 바로 스레드 풀이다. 스레드풀의 목적 성능 저하를 방지하기 위해서 매번 발생되는 작업을 병렬처리 하기 위해 스레드를 생성/수거 하는 부담은 전체적인 퍼포먼스..

    쓰레드 덤프 분석하기

    장애가 발생했을 때나 기대보다 웹 애플리케이션이 느리게 동작할 때, 우리는 스레드 덤프를 분석해 봐야 한다. 웹서버에서 많은 수의 동시 사용자를 처리하기 위해서 수십 ~ 수백개 정도의 쓰레드를 사용함. 두 개 이상의 쓰레드가 같은 자원을 이용할 때에는 필욘적으로 쓰레드 간의 Contection(경합)이 발생하고 데드락이 발생할 수 도 있다. *경합 : 한 쓰레드가 다른 쓰레드를 획득하고 있는 락이 해제되기를 기다리는 상태 웹앱에서 여러 쓰레드가 공유자원에 접근하는 일은 매우 빈번한다. 대표적으로 로그를 기록하는는 쓰레드가 락을 획득하고 공유 자원에 접근하는 것이다. 데드락은 쓰레드 경합의 특별한 케이스이다. 두 개 이상의 쓰레드에서 작업을 완료하기 위해 상대의 작업이 끝나야 하는 상황. 쓰레드 경합 때문..

    데이터베이스

    DBMS : 데이터베이스를 관리해주는 시스템 (오라클, MySQL과 같은 데이터베이스 관리 프로그램) 데이터베이스 : 데이터를 저장할 공간 DBMS 클라이언트 : 데이터베이스를 사용하는 어플리케이션. DB 데이터를 저장하려면 데이터를 저장할 공간인 데이터베이스를 만들어줘야 한다. GRANT 쿼리 -> MySQL, DBMS 계정에 권한을 부여할 때 사용하는 명령어, all privilieges이면 모든 권한을 부여한다. SQL기초 Sturected Query Lanaguage 데이터베이스로부터 데이터를 조회하고 삭제하는 등의 작업을 수행할 때 사용하는 언어 CHAR 확정 길이의 문자열을 저장한다. 표준의 경우 255글자까지만 저장 VARCHAR 가변 길이의 문자열을 저장함. 표준의 경우 255글자까지만 저..

    자바 HashSet

    충돌 해결 어떻게 하는지 thread-safe 구현 방식 HashSet의 중복 해결 방법 public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable 중복된 원소를 허용하지 않고 순서 역시 고려되지 않음. 객체를 저장하기 전에 먼저 객체의 hashCode() 메서드를 호출하여 해시코드를 얻고 이미 저장되어 있는 객체들의 해시코드와 비교한다. 만약 동일한 해시코드가 있다면 다시 equals()로 두 객체를 비교해 참이면 저장 안함. 이미 키에 매핑된 값이 있으면 그전의 값을 덮어씌운다고 명시되어 있다. /** * Associates the specified value with the specified key ..

    TCP, UDP

    1. TCP(Transmission Control Protocol) 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜 [ TCP 특징 ] 연결형 서비스로 가상 회선 방식을 제공한다. 바이트 스트림을 통한 연결 (데이터의 경계를 구분하지 않음) 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다. 흐름 제어 Flow Control 및 혼잡 제어. Congestion Control 순서 보장 높은 신뢰성을 보장한다. UDP보다 속도가 느리다. 전이중(Full-Duplex), 점대점(Point to Point) 방식. 일대일 통신(유니캐스트) 흐름제어 : 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지 송수신 하..

    컨텍스트 스위칭이란

    멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다. 컨텍스트란? CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들. 이 Context는 프로세스의 PCB(Process Control Block)에 저장된다. 그래서 Context Switching때 PCB의 정보를 읽어(적재) CPU가 전에 프로스세가 일을 하던 것에 이어서 수행이 가능함 PCB의 저장정보..

    필터

    JSP/서블릿 등을 실행하기 이전에 요청이 올바른지 또는 자원에 접근할 수 있는 권한ㅇ르 가졌는지의 여부를 미리 처리할 수 있다. 생성한 응답 데이터를 변경하거나 취소할 수 있는 기능을 구현할 수도 있다. 필터란 : HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 클래스이다. 필터는 객체의 형태로 존재하고,중간에 존재하며, 최종 자원의 요청 결과를 알맞게 변경할 수도 있다. 여러 개의 필터가 모여 체인을 형성할 수도 있다. 필터는 정보 변경 뿐만 아니라 흐름도 변경 가능함. 클라이언트의 요청을 다음 단계로 보내는 것이 아니라, 다른 자원의 결과를 클라이언트에 전송할 수 있다. 이러한 기능은 인증이나 권한 검사와 같은 기능을 구현할 때 용이하게 사용할 수 있다. 필터 설정하기 web.xml 또는 어노..

    MVC 패턴 구현

    JSP 웹앱 구조는 크게 모델 1 구조와 모델 2 구조로 나뉜다. JSP에서 모든 로직과 출력을 처리하느냐 아니면 출력만 처리하느냐에 따라서 모델 1, 모델 2 구조로 나뉜다. 모델 2 구조 웹브라우저의 요청을 하나의 서블릿이 받는ㅇ다. 서블릿은 웹브라우저의 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP페이지로 포워딩하낟. 포워딩을 통해 요청 흐름을 받은 JSP페이지는 결과 화면을 클라이언트에 전송한다. 이 구조의 특징은 모든 요청을 단일 진입점 = 하나의 서블릿에서 처리한다는 점 하나의 서블릿이 웹 브라우저의 모든 요청을 받기 때문에 서블릿은 웹브라우저의 요청을 구분하는 방법이 필요하다. 웹브라우저의 요청을 처리한 후 웹브라우저에 보이게 될 응답 화면을 생성한 JSP를 선택한다. 모델 : 비지니스 ..