전체 글 318

입출력(I/O)

1.1 의미 : 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램 간의 데이터를 주고받는 것을 의미한다. 1.2 스트림 : 한쪽에서 다른 한쪽으로 데이터를 전달하려면 1. 두 대상을 연결하고, 2. 데이터를 전송할 수 있는 무언가가 필요한데 이를 스트림이라고 한다. 즉, 데이터를 운반하는 데 사용되는 연결 통로가 스트림인 것이다. 1.3 바이트기반 스트림 : 1) 입력 스트림 : FileInputStream(파일), ByteArrayInputStream(메모리), PipedInputStream(프로세스), AudioInputStream(오디오 장치) 2) 출력 스트림 : FileOutputStream, ByteArrayOutputStream, PipedOutputStream, AudioOutputStre..

WAS (Web Application Server) vs. Web Server

1. 톰캣(Web Application Server, 8080 port) : 1) 의미 : 웹 서버 + 웹 컨테이너의 결합으로 다양한 역할을 수행한다. 웹 컨테이너는 클라이언트의 요청이 있을 때 내부 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에게 돌려주는 역할을 한다. 예를 들어 JSP와 서블릿 처리, 서블릿의 수명 주기 관리, 요청 URL을 서블릿 코드로 매핑, HTTP 요청 수신 및 응답, 필터 체인 관리 등 2. 아파치( Web Server, 80 port) 클라이언트의 요청을 기다리고 요청에 대한 데이터를 만들어서 응답하는 역할을 한다. 이때 데이터는 정적인 데이터(html, css 이미지 등으로 ) 한정된다. Nginx도 웹 서버에 해당한다. 3. 아파치와 톰캣의 차이 (= 웹 서..

CS/Network 2021.06.07

private static final Logger LOGGER = LoggerFactory.getLogger(this.class);

"이렇게 써라!!" private final Logger logger = LoggerFactory.getLogger(this.getClass()); 1. 분석 1) static으로 선언한 이유 : static을 선언하면 클래스 변수로 객체 생성이 될 때마다 해당 객체를 매번 생성하지 않고 초기 클래스 로딩 시 한 번만 생성해서 사용하게 된다. 그러나, Spring에서는 객체를 굳이 싱글턴 형태로 디자인하지 않아도 객체를 싱글턴과 같이 한 번만 생성해서 사용하게 된다. 따라서 무조건적인 static을 선언해 Perm 영역의 공간을 소비하지는 말자. 또한, 직렬 화하는 것을 피할 수 있다. (Perm영역이란? Permanent Generation의 약자로 객체의 생명주기가 영구적일 것으로 생각되는 객체를 관..

MessageSource 메시지 국제화 처리

1. applicationContext.xml에 아래와 같은 설정을 해준다. //빈 각체에서 메시지 이용하기 위한 것 //ApplicationContextAware 인터페이스 구현 or //MessageSourceAware 인터페이스 구현해서 getMessage()메서드 이용해서 메시지 사용해도 된다. 2. LocaleMessage 클래스 구현 package com.legalcounsel.Common; import org.springframework.context.support.MessageSourceAccessor; import java.util.Locale; public class LocaleMessage { private static MessageSourceAccessor msAcc = null; ..

JVM(Java Virtual Machine)?

1. JVM이란? JVM이란 Java Byte Code를 OS에 맞게 해석해주는 역할을 한다.(가상 머신이란 프로그램을 실행하기 위해 물리적인 머신과 유사한 머신을 소프트 웨어로 구현한 것을 뜻한다.) jvm의 역할은 java와 os사이에 중개자 역할을 수행하여 java가 os에 구애받지 않고 재사용을 가능하게 해 준다. 그리고 메모리 관리를 수행한다. 또한, jvm은 스택 기반의 가상 머신이다. (ARM 아키텍처 같은 하드웨어는 레지스터 기반) 1. Java compiler(javac)는. java 파일을. class라는 Java byte code로 변환시켜준다. ByteCode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이를 위해 JVM은 OS가 ByteCode를 이해할 수 있도록 해석..

동적 쿼리 foreach문

1. 태그 1) collection : 전달받은 인자로 List or Array형태만 가능하다 2) item : 전달받은 인자 값을 alias 명으로 대체 3) open : 구문이 시작될 때 삽입할 문자열 4) close : 구문이 종료될 때 삽입할 문자열 5) index : 반복되는 구문 번호로 0부터 순차적으로 증가한다. 2. 사용 예시 -1 1) controller에서 불러올 때 인자 값 fileno Controller에서 String[] fileno = request.getParameterValues("fileno"); boardDetailsDao.insertBoard(boardInfo, filelist, fileno); 2) DaoImpl에서 hashmap으로 if (fileno != null)..

2-1 설계원칙/ DI와 서비스 로케이터

설계 원칙 : SOLID 1. 단일 책임원칙: 1) 단일 책임 원칙 (클래스는 단 한 개의 책임을 가져야 한다.) : 다른 말로 클래스를 변경하는 이유는 단 한 개여야 한다. 그러나 하나의 책임의 개념이 명확하지 않고, 하나의 책임을 도출하려면 많은 경험이 필요하기 때문에 어려운 원칙이다. 2) 단일 책임원칙 위반 시 불러오는 문제점 : 예를 들어 데이터를 읽는 책임과 데이터를 화면에 출력하는 책임 2가지를 동시에 하나의 클래스에서 관리하면, 책임의 개수가 많아질수록 책임의 기능 변화가 다른 책임에 주는 영향이 비례해서 증가해서 결국 코드를 절차 지향적으로 만든다. 이는 유지보수, 재사용의 어려움을 야기한다. 3) 책임이란 변화에 대한 것 : 단일 책임 원칙을 잘 지킬 수 있는 방법은 메서드를 실행하는 ..

QueryString, request.getParameter, request.getParameterValues

1. Query String : 입력 데이터를 전달하는 방법 중 하나로 URL 주소에 데이터를 파라미터를 통해 넘기는 것을 말한다. 형식은 앤드포인트 주소 이후에?를 쓰면서 쿼리 스트링의 시작하며 뒤에는 key=value형식으로 따라붙는다. 파라미터가 여러 개일 경우 & 붙여서 복수의 파라미터를 넘길 수 있다. 2.request.getParameter : ServletRequest 인터페이스 중 하나의 메소드로 공식 문서에 따르면 "For HTTP servlets, parameters are contained in the query string or posted form data." 파라미터를 꺼내 쓸 수 있는 경우는 Querystring, post방식으로 전해진 data 두 가지 경우이다. 만약 파라미..

함수의 호출 방법 : Call By Value와 Call By Reference

1. Call By Value : 인자로 받은 값을 복사하여 처리하는 방식 Call By Value에 의해 넘어온 값을 증가시켜도 원래의 값이 보존된다. 값을 복사하여 넘기기 때문에 메모리 사용량이 늘어난다. 2. Call By Reference 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 방식 값을 복사하지 않고 직접 참조하기 때문에 속도가 빠르다. 원래의 값에 영향을 주는 리스크가 존재한다. 3. Java 예제