본문 바로가기

전체 게시글376

[Java] 다형성을 활용해 클라이언트 요청 URL에 대한 분기 처리를 제거 run() 메서드의 복잡도는 아직 상당히 높다. public void run() { log.debug("New Client Connect! Connected IP : {}, Port : {}", connection.getInetAddress(), connection.getPort()); try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream()) { HttpRequest request = new HttpRequest(in); String requestURL = request.getPath(); HttpResponse response = new HttpResponse(out); if( re.. 2023. 3. 20.
[Java] 응답 데이터를 처리하는 로직을 HttpResponse 클래스로 분리 및 리팩토링 응답 데이터를 처리하는 로직을 HttpResponse 클래스로 분리 아래 코드를 보면 응답 데이터 처리를 위한 많은 중복이 있다. 중복을 제거하자. private void response302LoginSuccessHeader(DataOutputStream dos) { try { dos.writeBytes("HTTP/1.1 302 Found \r\n"); dos.writeBytes("Content-Type: text/html;charset=utf-8 \r\n"); dos.writeBytes("Set-Cookie: logined=true \r\n"); dos.writeBytes("Location: /index.html \r\n" ); dos.writeBytes("\r\n"); } catch (IOExcept.. 2023. 3. 19.
[Java] 요청 데이터 처리 로직을 HttpRequest 클래스로 분리 및 리팩토링 클라이언트의 요청 데이터를 처리하는 로직을 별도의 클래스로 분리 클라이언트의 요청 데이터를 담고 있는 InputStream을 생성자로 받아 HTTP 메서드, URL, 헤더, 본문을 분리 Http Header는 Map에 저장해 관리하고, getHeader( String key ) 메서드를 통해 접근 가능 GET과 POST 메서드에 따라 전달되는 인자를 Map에 저장해 관리하고, getParameter( String key ) 메서드를 통해 접근 가능하도록 구현 public class HttpRequest { private static final Logger log = LoggerFactory.getLogger(HttpRequest.class); private Map httpHeader = new HashM.. 2023. 3. 19.
[BaekJoon] 백준 알고리즘 14502번 / 연구소 / dfs / Python import sys from collections import deque from itertools import combinations import copy input = sys.stdin.readline N,M = map(int,input().split()) board = [list(map(int,input().split())) for _ in range(N)] # 준비 1 safe_zone = [] virus = [] res = 0 dx = [-1,0,1,0] dy = [0,-1,0,1] # 감염 def BFS(): global res cnt = len(safe_zone)-3 ch_virus = deque([]) for x,y in virus: ch_virus.append((x,y)) while ch.. 2023. 3. 18.
[BaekJoon] 백준 알고리즘 1966번 / 프린터 큐 / 시뮬레이션 / Python import sys sys.stdin = open( "input.txt", "r") t=int(input()) for i in range(t): cnt=0 n,m=map(int, input().split()) #문서의 개수,몇번째에 놓여있는지 pr=list(map(int, input().split())) #중요도 m_pr = [0 for i in range(n)] m_pr[m]=1#중요도가 궁금한 문서(m번째 문서)의 인덱스를 임의로 1로 표시 while True:#큐의 첫번째 값이 내가 찾는 값(m)일때까지 반복 if pr[0]==max(pr): #중요도가 제일 큰 값이면 cnt에 1을 더해준다 cnt+=1 if m_pr[0]!=1: #원하는 문서가 아니라면 del pr[0] #중요도의 첫번째 값 삭제.. 2023. 3. 17.
[Java] HTTP 웹 서버 구현 / CSS 지원하기 응답을 받은 브라우저는 Content-Type를 확인한다. 서버는 클라이언트에게 요청을 받은 후 응답을 보낸다. 이때, 응답을 보내는 컨텐츠가 어떤 컨텐츠인지 알려주는 내용도 헤더에 포함 후 전송한다. 만약, 모든 응답이 text/html 이라면.. 브라우저는 CSS, JS, 이미지 등의 파일 모두 HTML로 인식하기 때문에 정상적으로 작동하지 않는다. 따라서 URI의 확장자가 css인 경우 헤더 값을 text/css로 응답을 보내도록 구현해야 한다. private void response200HeaderWithCss(DataOutputStream dos, int lengthOfBodyContent) { try { dos.writeBytes("HTTP/1.1 200 OK \r\n"); dos.writeB.. 2023. 3. 17.