본문 바로가기

분류 전체보기

(101)
유클리드호제법 유클리드호제법을 사용하여 최대공약수를 찾는 알고리즘은 다음과 같다. pubic int getCommon(int a, intb){ int n=0; while(b!=0){ n = a%b; a = b; b = n; } return a; } 이 알고리즘은 a>b일 때 둘을 나누면서 최대 공약수를 찾는 방식이다. 이렇게 직접 알고리즘을 구현해도 되고 BigInteger의 메소드를 사용하는 방법도 있으며 그 방식은 아래와 같다. public int getCommon(int a, int b){ BigInteger num1 = BigInteger.valueOf(a); BigInteger num2 = BigInteger.valueOf(b); BigInteger gcd = num1.gcd(num2); return gcd...
[통신] Http 프로그래밍, socket 프로그래밍 네트워크를 통해 서버로부터 데이터를 가져오기 위한 통신을 구현하기 위해서는 http 프로그래밍과 socket 프로그래밍을 하는 방법이 있다. 이 두가지 방식의 차이가 무엇인지에 대해 작성해 보겠다. 1. 소켓(Socket) 프로그래밍 서버- 클라이언트 간 연결이 유지되는 양방향 프로그래밍 방식이며 실시간 데이터를 주고 받는 경우에 사용된다. 소켓 프로그래밍은 Server, Client 간 특정 port를 통해 연결을 유지하고 실시간으로 양방향 통신을 할 수 있는 방식이다. Server도 Client에게 요청을 보낼 수 있고 계속 연결을 유지하는 연결 지향형 방식이기 때문에 실시간 통신이 필요한 경우에 자주 사용된다. 채팅과 같이 즉각적으로 정보를 주고 받는 경우에 사용한다. 2. Http 프로그래밍 클라..
[Golang] Go 시작하기 특징 컴파일언어이지만 컴파일러의 컴파일 속도가 매우 빨라 인터프리터 언어처럼 사용할 수 있다. 언어의 문법적 구조를 개선해서 달성할 수 있었는데, 컴파일러가 소스코드를 해석하는 pass수를 줄여 달성할 수 있었다. GO 에서는 GoRoutine 이라는 비동기 메커니즘을 제공하고 있다. 고루틴을 사용하면 이벤트 처리, 병렬 프로그래밍 등이 간단하게 작성할 수 있다. 단, 동기화를 유의하여 프로그래밍 해야한다. 고루튼은 멀티 스레드 메커니즘이지만 경량스레드로 CPU코어수와 무관하게 수백, 수천만 고루틴을 작성해도 성능에 문제가 생기지 않는다. Go에서 언더스코어(underscore) 사용하지 않을 변수를 의미한다. 사용하지 않은 변수, 패키지 등에 대해 _(underscore)를 사용하지 않는 경우 에러를 ..
Linux(Centos7) java version change 리눅스에서 자바 버전을 변경하는 방법을 작성해보겠습니다 저는 1.8 에서 1.11 로 업데이트가 필요했습니다 1. 설치 가능한 버전 확인 $ yum list java*jdk-devel 설치된 버전인 1.8 과 필요한 버전인 11 버전이 모두 보입니다. 2. 원하는 버전 설치 $ sudo yum install java-11-openjdk-devel.x86_64 3. 설치된 파일 확인 $ rpm -qa java*jdk-devel 4. 자바 버전 확인 후 설치된 자바파일 확인 지금 1.8버전이 설치돼있으며 이 파일은 링크로 /etc/alternatives/java 와 연결됨을 볼 수 있습니다. 5. 링크 해제후 원하는 버전에 매핑 $ unllink /etc/alternatives/java $ ln -s /us..
Dispatcher Servlet 두번째 저번 글에서는 DispatcherServlet이 어떤식으로 동작하는지 직접 코드를 보며 설명했습니다. 이번 글에서는 DispatcherServlet 이 사용하는 인터페이스에 대해 살펴보겠습니다. 각각 어떤 인터페이스가 있으며 어떤 역할을 수행하는지 보겠습니다. DispatcherServlet은 처음 구동시에 위의 인터페이스들을 초기화하는 과정을 겪습니다. 1. MultipartResolver 파일 업로드 요청을 처리하는데에 사용되는 인터페이스 입니다. 바이너리 데이터를 부분씩 처리하는 로직을 손쉽게 사용할 수 있도록 MultipartResovler가 처리해줍니다. 보다 구체적으로는 HttpServletRequest 를 MultipartHttpServletRequest로 변환해주는 작업을 담당합니다. 인터..
Java8 Java8 버전을 이용해 개발을 하면서도 정확하게 어떤 특징이 있는지 공부하지 못했단 생각이 듭니다. 이번 기회에 이에 대해 분석하고 글을 작성해보고자 합니다. 1. interface 의 변경 기존의 interface는 상수와 추상 메소드만을 정의할 수 있었지만, Java8 이후부터는 default method 를 구현하여 method body를 작성할 수 있습니다. 또한 static method 도 사용이 가능합니다. 이제 method body 도 작성할 수 있단 점에서 추상 클래스와 차이점이 없어 보이는데 다른점이 있습니다. 인터페이스는 상수만을 사용할 수 있기 때문에 멤버변수 사용에 제한적입니다. 또한, 생성자가 없어서 생성시 초기화 해주는 작업이 필요한 경우 적합하지 않습니다. 무엇보다 가장 큰 ..
DispatcherServlet dispatcher servlet 이 하는 일은 아래와 같은 순서로 일어납니다. 1) 요청을 분석합니다. 2) 요청을 처리할 핸들러를 핸들러매핑에게 위임하여 찾아옵니다. 3) 핸들러를 실행할 수 있는 "핸들러 어댑터"를 찾습니다 4) "핸들러 어댑터"를 사용해 핸들러의 응답을 처리합니다. - 뷰이름에 해당하는 뷰를 찾아 모델 데이터를 렌더링합니다. - @ResponseBody가 있으면 Converter를 사용해 응답 본문을 만들고 최종 응답을 보냅니다. - 예를 들어 @ResponseBody가 있으면 ModelAndView 는 null이고 응답 바디를 생성해 리턴합니다. 5) 예외 발생시 예외처리 핸들러에게 요청처리를 위임합니다. 6) 핸들러의 리턴값을 통해 어떻게 처리할지 판단합니다. request를 ..
Servlet Servlet container tomcat 등 servlet을 관리하는 역할입니다. 초기화, 실행, 사용 등의 라이프사이클을 제어합니다. 서블릿 컨테이너가 서블릿을 실행하는 방법은 서블릿 생명주기와 관련있습니다. 최초 서블릿을 호출할 때 init 메소드를 호출합니다. 그 뒤 http method 에 따라서 doGet, doPost 등의 메소드가 호출됩니다. destroy 의 경우는 서블릿 컨테이너의 재량에 따라 서블릿이 더 이상 메모리에 올려둘 필요가 없다고 판단되거나 서블릿 컨테이너가 종료될 때 destroy가 호출됩니다. Servlet listener 서블릿 컨테이너에서 발생하는 이벤트(라이프사이클, 애트리뷰트, 세션 등)로 특정 코드를 실행해야할 때 사용할 수 있는 개념입니다. 서블릿 컨테이너가 ..