본문 바로가기

분류 전체보기

(79)
[JAVA] 객체 직렬화 serialization, IOStream 1. 직렬화 serialization 직렬화 serialization 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다. 반대로 스트림에서 데이터를 읽어 객체로 변환하는 것을 역직렬화(deserialization)라 한다. 역직렬화, deserialize 역직렬화는 ObjectInputStream의 readObject()를 이용한다. 다만 한 가지 주의 사항이 있는데 하나 이상의 객체를 직렬화 했을 경우 반드시 같은 순서로 역직렬화 해야 한다는 것이다. package test.serialize; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea..
[JAVA] AtomicInteger (thread-safe) AtomicInteger AtomicInteger란 원자성을 보장하는 Interger를 의미한다. 멀티 쓰레드 환경에서 동기화 문제를 별도의 synchronized 키워드 없이 해결하기 위해서 고안된 방법이다. (일반적으로 동기화 문제는 synchronized, Atomic, volatile 세가지 키워드로 해결한다.) synchronized은 특정 Thread가 해당 블락 전체를 lock 하기 때문에 다른 Thread는 아무작업을 못하고 기다리는 상황이 되어 낭비가 심하다. 그래서 NonBlocking하면서 동기화 문제를 해결하기 위한 방법이 Atomic이다. AtomicInterger 동작의 핵심 원리는 바로 CAS알고리즘(Compare and Swap)에 있다. 현재 쓰레드에 저장된 값과 메인 메모..
[WEB개념] EAR, WAS 1. WAR (web archive) : 서블릿 클래스 파일, JSP 파일, 지원 파일, GIF 및 HTML 파일을 포함하는 웹 모듈은 확장자가 .war (웹 아카이브) 인 JAR 파일로 패키지됩니다. WAR구조 : 기본적인 구조를 만들기 위해 java project를 생성해 아파치에서 수행가능한 WAR구조로 변경했습니다. 아래와 같이 WEB-INF디렉토리에 web.xml, lib, classes가 필요합니다. (classes는 파일시스템에만 존재하는 상태) 또 루트를 잡기위해 위와 같은 경로설정을합니다. 2. EAR (enterprise archive) : 위의 모든 파일 (.jar 및 .war)은 확장자가 .ear (enterprise archive) 인 JAR 파일로 패키지되어 Application..
[WEB개발보조] Jenkins & SVN 형상관리는 소프트웨어 개발 및 다른 프로젝트에서 코드, 문서, 구성 요소 등의 변경을 관리하고 추적하는 과정을 말합니다. 이를 통해 개발자나 팀은 프로젝트의 이전 버전과 변경 사항을 관리하고, 협업하며, 문제를 해결할 수 있습니다. 젠킨스 젠킨스는 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다. CI(Continuous Integration) 툴 이라고 표현한다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해준다. 즉, 자동화 빌드 툴 jenkins linux 설치 1. 다운로드 https://www.jenkins.io/download/ Jenkins download a..
[WEB개발] TheadLocal & MDC & Log4j2 서버에서 로그를 확인할 경우 grep으로 로그를 캐치할 시 라인단위로 인식하기 때문에 모든 trace를 볼 수 없다. MDC와 log4j2를 사용하면 각 접속한 IP별로 로그를 확인 할 수 있다. ThreadLocal ThreadLocal 변수를 선언하면 멀티 스레드 환경에서 각 스레드마다 독립적인 변수를 가지고, get(), set() 메소드를 통해 값에 대해 접근할 수 있다. public class TestThread implements Runnable { private ThreadLocal threadLocal = new ThreadLocal() { @Override protected DataObj initialValue() { DataObj dataObj = new DataObj(); return..
[WEB개발] WEB.XML Config (context-param, init-param 차이) 1. 컨텍스트 초기화 파라미터() - context-param은 init-param 그 이상으로 전역 즉 모든 서블릿에서 사용할 수 있는 파라미터 값이다. - 항목내에 작성 - 예) DD상에 작성방법 paraname paravalue - 서블릿 상에서 호출시 : getServletContext().getInitParameter("paraname"); - 범위 : 웹 애플리케이션에 존재하는 어떤 서블릿이나 jsp모두 2. 서블릿 초기화 파라미터() -해당 파라미터 값은 지정해준 서블릿 내에서만 쓸 수 있는 값이다. - 항목 안에 작성 - 예) DD상에 작성방법 servletname servletclass paraname paravalue - 서블릿 상에서 호출시 getServletConfig().getIn..
[JAVA ] ClassPath, ClassLoad, JAVA COMPILE(컴파일) 클래스패스란(Class Path)란?? 클래스패스란 말 그대로 클래스를 찾기위한 경로이다. 자바에서 클래스패스의 의미도 똑같다. 즉, JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파일 경로를 말하는 것이다. 소스 코드(.java로 끝나는 파일)를 컴파일하면 소스 코드가 “바이트 코드”(바이너리 형태의 .class 파일)로 변환된다. java runtime(java 또는 jre)으로 이 .class 파일에 포함된 명령을 실행하려면, 먼저 이 파일을 찾을 수 있어야 한다. 이때 .class 파일을 찾을 때 classpath에 지정된 경로를 사용한다. 톰캣 5 클래스 로드 순서 Tomcat 5.x Class 를 찾는 순서 Bootstrap classes of your JVM : Java ..
[PATTERN]Adapter Pattern 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할수 있다. 이렇게 함으로써 클라이언트와 구현된 인터페이스를 분리시킬수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역 은 어댑터에 캡슐화 되기 때문에 클라이언트는 바뀔 필요가 없어진다. 예를 들어보면 기존 시스템의 서버간 통신은 EJB, Socket(TCP/IP)를 사용중이 었으나 추가된 시스템은 Http통신이 필요하다. public class HttpTransfer { public void doProcess() { System.out.println("doProcess call : " + this.getClass().getName()); } } Transfer transfer = new HttpTransferAdapter(new HttpTr..