개발 48

[프로젝트] 순수 자바로 웹 애플리케이션 서버(WAS) 구현하기

1. 개요 프로젝트 진행 동기 저는 여느 때와 다름없이 스프링을 학습하고 있었습니다. 그런데 문득 의문이 들었습니다. 어째서 아무 설정을 건드리지 않고도 프로젝트가 기본적으로 TCP/IP 계층의 8080 port를 사용하고 있는 것인지 Application 계층의 HTTP 메시지를 스펙을 따라 직접 파싱 하지 않고도 개발을 편리하게 할 수 있는지 위 궁금증을 해결하기 위해 구글링을 하던 중 Servlet 이라는 기술을 알게 되었습니다. 서블릿은 HTTP 요청 메시지를 읽어 들여 스펙에 맞게 파싱 하고, 응답을 내려줄 때도 스펙에 맞게 알아서 HTTP 응답 메시지를 작성해 준다는 것이었습니다. 그래서 서블릿 없이 순수한 자바로 WAS를 구현해보려 합니다. 프로젝트 달성 목표 개발한 웹 어플리케이션 서버(W..

개발/프로젝트 2024.02.20

[이슈 해결] Exception in thread "main" java.net.BindException: Address already in use: bind

1. 발생 이슈 자바 프로그램을 개발하다 실행하려 했더니 갑자기 java.net.BindException이 발생했다. 2. 문제 원인 예외 발생의 원인은 바로 이미 java 프로세스가 실행 중이었는데 추가로 실행하려 했기 때문이었다. 작업관리자에서 OpenJDK Platform binary 프로세스를 종료 후 다시 실행하니 제대로 동작했다.

백준 2164 카드2 - Java 자바 문제 풀이

문제 해설 맨 위의 카드를 제거하고, 새로운 맨 위의 카드를 맨 아래로 삽입하면 됩니다. 카드의 제거가 위쪽, 카드의 삽입이 아래쪽에서 이뤄지므로 큐 자료구조를 활용할 수 있습니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 q Queue 큐 N int 카드 갯수 해결 로직 N을 입력 받는다. queue에 차례대로 1부터 N까지 삽입한다. queue 사이즈가 1이 될 때 까지 다음을 반복한다. 맨 위의 카드를 제거한다. 맨 위의 카드를 제거하고 다시 맨 아래에 삽입한다. 마지막으로 남은 숫자를 출력한다. 풀이 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja..

백준 10845 큐 - Java 자바 문제 풀이

문제 해설 큐 자료구조를 직접 구현하면 되는 문제입니다. 자바 기본 제공 큐를 사용해도 됩니다. 이 글에서는 배열로 직접 큐를 구현하였습니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 N int 명령어 수 command String 명령어 queue int[] 큐 배열 front int 0 큐의 머리를 가리키는 포인터 back int 0 큐의 끝을 가리키는 포인터 해결 로직 N을 입력받는다. N번 동안 명령어를 입력받는다. 명령어에 따라 기능을 분기처리 한다. 풀이 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; im..

백준 2493 탑 - Java 자바 문제 풀이

문제 해설 n개의 탑이 일직선으로 세워져 있습니다. 이 탑들의 꼭대기에서는 무조건 왼쪽 방향으로 레이저 빔이 나가는데, 그 신호를 수신하는 건 가장 먼저 레이저를 맞는 단 하나의 탑입니다. 각 탑에서 쏘는 레이저를 몇 번째 탑이 맞는지 구하는 문제입니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 N int 탑의 개수 stack Stack Tower 객체를 저장하는 스택 X Tower { int height; int index; } Tower 클래스, 각 탑의 높이와 인덱스(순서)를 갖는다. 해결 로직 주어진 탑의 개수 N의 범위가 1 이상 500000 이하인데 1.5초 시간제한을 가지므로, O(n) 시간 안으로 해결해야 합니다. (1억 번 연산 ≒ 1초) 따라서 각 탑의 높이를 배열에 저장하고..

백준 1874 스택 수열 - Java 자바 문제 풀이

문제 해설 1부터 n까지의 수를 차례로 스택에 넣었다가 뺌으로써 문제에서 주는 임의의 수열을 만들 수 있다면, 스택에 숫자를 넣고 빼는 순서를, 아니라면 NO를 출력하는 문제입니다. 수를 오름차순으로 차례로 넣고 있기 때문에 스택의 가장 윗부분 숫자 보다 크거나 같은 숫자는 뺄 수 있지만, 작은 숫자는 빼낼 수 없습니다. 따라서 NO를 출력해야 합니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 n int 첫째 줄에 주어지는 정수 num int n번에 걸쳐 입력 받을 숫자(수열의 숫자) cur int 1 1부터 스택에 들어갈 오름차순 숫자 arr int[] 부른 숫자를 저장할 배열 pos int 0 배열(스택)의 마지막 인덱스를 가리키는 변수 해결 로직 n을 입력 받는다. 수열의 숫자 num을 ..

백준 10773 제로 - Java 자바 문제풀이

문제 해설 문제에서 주어지는 정수들을 모두 더한 합을 구하는 문제입니다. 단, 0이 입력 될 때 마다 가장 마지막에 불렀던 숫자를 합계에서 빼야 합니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 K int 첫째 줄에 주어지는 정수 sum int 0 부른 숫자를 모두 더한 합 (문제에서 수의 합이 2^31-1 보다 작다고 했으므로 int 형을 사용해도 된다.) arr int[] 부른 숫자를 저장할 배열 pos int 0 배열의 마지막 인덱스를 가리키는 변수 해결 로직 K를 입력 받는다. K 번 만큼 숫자를 입력 받는다. 0이라면 arr[--pos] (배열의 가장 마지막 인덱스 원소)를 sum에서 뺀다. 0이 아니라면 arr[pos]에 숫자를 삽입하고 sum에 더한다. sum을 출력한다. 풀이 코..

백준 10828 스택 - Java 자바 문제풀이

문제 해설 스택 자료구조를 직접 구현하는 문제입니다. 총 다섯가지의 명령에 따라 기능을 구현하면 됩니다. 문제 풀이 계획 필요 변수 변수명 타입 설명 N int 첫째 줄에 주어지는 명령의 수 arr int[] 숫자를 저장할 배열 top int 배열의 최종 인덱스를 가리킬 변수 해결 로직 명령 수 N을 입력 받는다. N 번에 걸쳐 명령어를 입력 받는다. 명령어 별로 분기 처리하여 각 로직을 처리한다. 풀이 코드 package com.newlecture.app.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import jav..

[Network] HTTP 상태코드

1. HTTP 상태코드란 HTTP 상태코드는 클라이언트가 보낸 요청에 대한 처리 상태를 응답으로 알려주는 기능이다. 1xx 부터 5xx 까지 5가지의 상위 상태코드로 분류할 수 있다. 1xx Informational은 요청이 수신되어 처리 중이라는 의미인데, 거의 사용하지 않으므로 넘어간다. 2. 2xx Successful 2.1 200 OK 요청이 정상 처리되었다는 의미이다. 2.2 201 Created 요청의 결과로 새로운 리소스가 생성되었다는 의미이다. 응답 HTTP 메시지 헤더에 Location 필드에 새롭게 생성된 리소스의 URI를 값으로 응답한다. 2.3 202 Accepted 요청은 접수되었으나 처리를 완료하지 않았다는 의미이다. 2.4 204 No Content 서버가 요청을 정상적으로 수..

개발/DevOps 2024.01.30

[Error] AWS CodeDeploy 이전 배포 파일 사라지는 현상 & 로그 위치

개요 현재 AWS 프리티어 계정의 한 대의 EC2에서 Client와 WAS 를 함께 배포하고 있다. 하지만 어째서인지 클라이언트를 배포하면 WAS 파일이 삭제되고 WAS를 배포하면 클라이언트가 삭제되는 현상이 발생했다. 결론적으로 그 원인은 바로 CodeDeploy의 동작 방식에 있었다. AWS CodeDeploy 공식 문서 EC2/온프레미스 배포 문제 해결 - AWS CodeDeploy Amazon Linux, RHEL 및 Ubuntu Server 인스턴스에서 정리 파일은 /opt/codedeploy-agent/deployment-root/deployment-instructions/에 있습니다. Windows Server 인스턴스에서의 위치는 C:\ProgramData\Amazon\CodeDeploy\..