본문 바로가기

전체 글

(106)
[WEB개념] web was 분리이유 WEB서버와 WAS의 차이 WEB서버는 정적인 컨텐츠를 제공하는 서버이고 WAS는 동적인 컨텐츠를 제공하는 서버이다. 예전의 WAS에서는 정적인 웹서버 기능을 제공하지 않았지만 오랜 기간 WAS가 발전을 거듭하여 최근 WAS들은 동적인 컨텐츠 뿐만 아니라 정적인 컨텐츠도 제공해주고 있다. 그렇기 때문에, WEB서버 없이 WAS만 존재하는 것도 가능하다. 그런데도 왜 WEB서버와 WAS를 분리하는 걸까? 위에서 말했듯이 WAS만 있어도 서비스를 제공하는 데에는 문제가 없다. 그러나 주로 서버 구성 시에 WEB서버와 WAS를 분리하여 구성한다. 그 이유는 여러 가지가 있는데 그 중 몇 가지를 알아보자. 1. 기능을 분리하여 서버 부하를 방지한다. WAS가 혼자서 모든 요청을 처리할 수 있다고는 하지만 그만큼..
[PATTERN] Producer - Consumer 여러 개의 producer는 각각 동일한 작업을 해서 queue에 집어넣고, consumer에서는 queue에 있는 작업을 가져가서 각자 동일한 작업으로 수행합니다.  여기서 여러 개의 producer와 consumer들이 각각 동일한 작업을 수행하는 여러개의 쓰레드 혹은 프로세스로 구성이 되므로 병렬처리가 되는 것입니다.  실무에서 사용하는 예시로 에러기록을 쌓는 경우 사용됩니다. 만약 어플리케이션 서버에 수 많은 이용자가 에러를 발생시킨다면 이 에러를 처리하는 서버는 과부가하 걸리고 다른 요청을 처리 못하게  됩니다.  이때 프로바이더 컨슈머 패턴을 사용하면 어플리케이션 서버에서 오류가 발생하면 오류를 담아두는 객체를 생성하고 해당내용을 큐에 넣어둡니다. 큐는 어플리케이션 서버에서 주기적으로 읽어 오..
[LINUX] 자주 사용하는 & VI 단축키 & 기타 tar.gzzcvf : 압축하기   > tar -cvf [tar파일명][압축할 파일]zxvf : 압축풀기tvfz : 내용보기   > | wc -l 파일 수uvf : 압축파일에 추가 압축  > tar -uvf [tar파일명][압축할 파일] 잘못만들어진 파일삭제find . -inum 4531 -exec rm -f {} ₩; ls -al |  wc -l: 디렉토리 내 파일 수 cw: clear word awk: 파일로부터 레코드(record)를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용ex)ll>>   -rw-r--r--  1 root root   30 Aug 25 23:28 test.txtll | awk '{print $9}'>>   test.txt free -m:  ..
[JAVA] 객체 직렬화 serialization, IOStream 1. 직렬화 serialization직렬화 serialization객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다. 반대로 스트림에서 데이터를 읽어 객체로 변환하는 것을 역직렬화(deserialization)라 한다. 역직렬화, deserialize역직렬화는 ObjectInputStream의 readObject()를 이용한다. 다만 한 가지 주의 사항이 있는데 하나 이상의 객체를 직렬화 했을 경우 반드시 같은 순서로 역직렬화 해야 한다는 것이다. package test.serialize;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;impo..
[JAVA] AtomicInteger (thread-safe) AtomicIntegerAtomicInteger란 원자성을 보장하는 Interger를 의미한다. 멀티 쓰레드 환경에서 동기화 문제를 별도의 synchronized 키워드 없이 해결하기 위해서 고안된 방법이다.(일반적으로 동기화 문제는 synchronized, Atomic, volatile 세가지 키워드로 해결한다.) synchronized은 특정 Thread가 해당 블락 전체를 lock 하기 때문에 다른 Thread는 아무작업을 못하고 기다리는 상황이 되어 낭비가 심하다. 그래서 NonBlocking하면서 동기화 문제를 해결하기 위한 방법이 Atomic이다. AtomicInterger 동작의 핵심 원리는 바로 CAS알고리즘(Compare and Swap)에 있다.  현재 쓰레드에 저장된 값과 메인 메모리..
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 ..
Jenkins & SVN or Git & Docker 형상관리는 소프트웨어 개발 및 다른 프로젝트에서 코드, 문서, 구성 요소 등의 변경을 관리하고 추적하는 과정을 말합니다. 이를 통해 개발자나 팀은 프로젝트의 이전 버전과 변경 사항을 관리하고, 협업하며, 문제를 해결할 수 있습니다. 1. CI (Continuous Integration) - 지속적 통합목적: 개발자가 작성한 코드를 정기적으로(종종 하루에도 여러 번) 중앙 저장소에 통합하여 코드 충돌을 최소화하고 빠르게 문제를 발견하는 것.주요 활동:코드 변경 사항을 중앙 저장소에 푸시하면 자동 빌드와 테스트가 실행됨.작은 단위로 자주 통합하여 충돌을 줄이고 코드 품질을 보장.필요한 도구: Jenkins, GitHub Actions, GitLab CI, CircleCI 등. CI의 주요 단계:코드 병합: ..
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(); ..