본문 바로가기

전체 글376

[Java] HTTP 웹 서버 구현 / GET 방식으로 회원가입 GET 방식으로 회원가입 사용자가 입력한 값을 파싱(문자열을 원하는 형태로 분리하거나 조작하는 것을 의미)해 model.User 클래스에 저장한다. 사용자 아이디 비밀번호 이름 이메일 회원가입 HTTP Header GET /user/create?userId=tester1&password=test1&name=테스터 HTTP/1.1 HTTP 요청의 첫 번째 라인에서 요청 URI을 추출 요청 URI에서 접근 경로와 key=value 형식으로 전달되는 데이터를 추출해서 Model 클래스에 담는다. GET 방식의 회원가입 GET /user/create?userId=tester1&password=test1&name=테스터 HTTP/1.1 위의 코드는 GET 방식으로 회원가입을 했을 때의 요청 라인이다. 사용자가 입.. 2023. 3. 17.
[Java] HTTP 웹 서버 구현 / index.html 요청에 대한 응답 index.html로 응답 클라이언트가 http://localhost:8080/index.html로 접속했을 때 서버는 webapp 디렉토리의 index.html 파일을 읽어 클라이언트에 응답한다. HTTP Header GET /index.html HTTP/1.1 Host: localhost:8080 Connection: keep-alive Accept: */* BufferedReader.readLine() 메서드를 활용해 라인별로 HTTP 요청 정보를 읽는다. HTTP 요청 정보 전체를 출력한다. 헤더 마지막은 br.readLine().equals("") 로 확인한다. HTTP 요청 정보의 첫 번째 라인에서 요청URI를 출력한다. String[] tokens = line.split(" ");과 같이 s.. 2023. 3. 17.
[CS] URI과 URL의 차이 URI 특정 리소스를 식별하는 통합 자원 식별자((Uniform Resource Identifier)를 의미하며, 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다. URL 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다. 실제 네트워크상에서 URL와 URL을 예시는 아래와 같다. 두 주소는 모두 index.html을 가르키고 있다. 첫번째 주소는 웹 서버의 실제 파일 위치를 나타내는 주소이므로 URI이면서 URL이다. 두번째 주소는 index 라는 리소스가 웹 서버에 존재하지 않으므로 URL은 아니다. 하지먼 서버 내부에서 이를 처리하여 결국 index.html을 가르키기 때문에 URI라고 볼 수 있다... 2023. 3. 16.
[BaekJoon] 백준 알고리즘 11724번 / 연결 요소의 개수 / DFS / Python """ 1. 시나리오 - dfs를 돌면서 빠져나오면 +1을 해준다. 2. 시간 복잡도 - 정점: 1,000개 - 간선: (1,000 x 999) / 2 - 500,500 < 2억개 가능! 3. 자료구조 - [False] * N - adj[[]] """ import sys sys.setrecursionlimit(10**6) input = sys.stdin.readline def dfs(c): if v[c] == True: return v[c] = True for i in adj[c]: dfs(i) N,M = map(int, input().split()) adj = [[] for _ in range(N+1) ] for _ in range(M): s, e = map( int, input().split() ) .. 2023. 3. 11.
[CS] HTTP 웹 서버는 어떻게 동작할까? HTTP의 통신 규약 웹 클라이언트(대부분 웹 브라우저)는 웹 서버와 데이터를 주고 받기 위해 HTTP라는 서로 간에 약속된 규약을 따른다. 웹 클라이언트가 웹 서버에 요청을 보내기 위한 규약은 아래와 같다. 요청 데이터의 첫 번째 라인은 요청 라인(Request Line), 두 번째 라인부터 빈 공백 문자열 라인까지 요청 헤더(Request Header), 빈 공백 문자열 다음부터 본문(Request Body) 데이터가 전송된다. 모든 HTTP 요청에 대해 요청 라인, 요청 헤더, 빈 공백 문자열은 필수이고, 요청 본문은 필수가 아니다. 자, 이제 하나씩 뜯어보자. 요청 라인(Request Line) 요청 데이터의 첫 번째 라인은 요청 라인(Request Line)이라고 부른다. 요청 라인은 "HTTP.. 2023. 3. 10.
[Java] 디버깅을 위한 로깅(logging) System.out.println은 앞으로 사용하지 말자. 개발자는 애플리케이션이 정상적으로 동작하는지 확인하기 위한 목적, 애플리케이션에 문제가 발생했을 때 원인을 파악하기 위한 디버깅을 목적으로 수많은 메시지를 출력한다. 원인을 파악하기 위한 디버깅을 목적으로 수많은 메시지를 출력한다. 이때 사용하는 것이 System.out.println() 이다. 하지만, 이를 디버깅 메시지로 출력하면 파일로 메시지가 출력하게 되는데 파일에 메시지를 출력하는 작업은 상당한 비용이 발생하는 작업이다. 또한, 소스코드에 포함되어 있는 경우 구현한 코드는 삭제하거나 주석 처리하는 방법으로 해결하는 경우가 있다. 이 또한 모두 비용이며, 디버깅을 목적으로 메시지를 출력하고 싶으면 또 다시 원복해야 하는 문제점이 있다. 이.. 2023. 3. 10.
[BaekJoon] 백준 알고리즘 6603번 / 로또 / 백트래킹(DFS) / Python def dfs( depth, idx ): if len(q) == 6: print( " ".join(map(str,q))) return for i in range( idx, k ): q.append(S[i]) dfs(depth + 1, i + 1) q.pop() while True: global S array = list(map(int, input().split())) k = array[0] S = array[1:] q = [] dfs( 0, 0 ) if k == 0: exit() print() 2023. 3. 10.
[Linux] JDK 설치 / JAVA_HOME PATH 설정 / maven 설치 JDK 설치 / JAVA_HOME PATH 설정 1. 설치 $ sudo apt-get update $ sudo apt-get upgrade # JAVA11 설치 $ sudo apt-get install openjdk-11-jdk 2. 설치 확인 # 설치 확인 $ java -version openjdk version "11.0.11" 2021-04-20 OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04) OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing) # 설치 확인 $ javac -version javac 11.0.11 3. 환경설정.. 2023. 3. 8.
[BaekJoon] 백준 알고리즘 15686번 / 치킨 배달 / 백트래킹 / Python import sys from itertools import combinations sys.stdin = open( "input.txt", "r") n, m = map( int, input().split() ) city = list( list(map(int, input().split())) for _ in range( n )) result = 999999 house = [] chicken = [] for i in range(n): for j in range(n): if city[i][j] == 1: house.append( [i, j] ) # 집 좌표 저장 elif city[i][j] == 2: chicken.append( [i, j]) # 치킨집 좌표 저장 def solve( ): global resul.. 2023. 3. 8.