next step 웹 프로그래밍
3강 실습 - 1. 실습 코드 clone + aws에 배포 + index.html 응답까지 공부하면서 몰랐던 내용 정리(with. Mac)
archiveloper
2024. 5. 20. 22:07
1. 실습 코드 clone
이건 어렵지 않았다.
교재에 나와있는 사이트에 들어가서 fork 하면 끝
2. AWS EC2로 원격 서버에 배포(ubuntu 환경)
더보기
AWS EC2 인스턴스 생성 후 단계를 작성했습니다. 만약 인스턴스 생성부터 보셔야 한다면 다른 블로그를 참고해 주세요!
1. 인스턴스 생성하면서 저장한 pem 파일이 있는 디렉토리에서 터미널을 실행.
2. ssh로 aws원격 서버에 접속.
더보기
명령어 : ssh -i {발급받은 pem 파일 경로} ubuntu@{접속 ip}
ubuntu란에 root라 입력하면 터미널에서 친절하게 ubuntu계정으로 접속하라고 알려준다.
3. UTF-8 Encoding 설정
- sudo locale-gen ko_KR.EUC-KR ko_KR.UTF-8
- sudo dpkg-reconfigure locales
4. .bash_profile 파일 생성 후 설정 추가
5. jdk, maven, git 설치
교재에서는 wget으로 알려줬는데 잘 안 돼서 apt-get으로 설치함.
6. git clone 후 빌드 & 실행
- public repository일 경우 → git clone {git 주소}
- private repository일 경우 → git clone git@github.com ~ #ssh로 clone 진행(이 과정은 추가 작업 필요)
- mvn clean package
- java -cp {실행할 JAR 파일 패키지 경로.파일} {PORT 번호} &
- 실행 종료 방법: ps -ef | grep {패키지명}로 PID 확인 → kill -9 {확인한 PID 번호}
7. 외부에서 EC2에 접근할 수 있도록 설정
설정 후 http://서버 IP:PORT로 접속
3. index.html 응답
ServerSocket
서버 프로그램을 구현할 때 사용하는 객체
- ServerSocket이 IP 주소:port에 생성
- ServerSocket은 사용자의 요청이 있을 때까지 대기하다, 요청이 발생하면 연결
- 클라이언트는 서버에게 InputStream을 통해서 요청 데이터를 전달함.
- 서버는 요청에 대한 응답 데이터를 OutputStream으로 전달함.
- 서버와 클라이언트의 연결을 해제 후 서버 종료
Content-Type
서버의 클라이언트에게 보내는 자원 유형을 명시하기 위한 정보로, MIME 타입(Multipurpose Internet Mail Extensions) 형식으로 지정
유형
- text/html: HTML 문서임을 명시함.
- text/css: CSS 스타일시트임을 명시함.
- text/plain: 평문 텍스트임을 명시함.
- application/json: JSON 데이터임을 명시함.
- application/xml: XML 데이터임을 명시함.
- image/jpeg: JPEG 이미지임을 명시함.
- image/png: PNG 이미지임을 명시함.
- application/pdf: PDF 문서임을 명시함.
1단계 - HTTP 요청 정보 전문 출력하기
- InputStream을 한 줄 단위로 읽기 위해서 BufferedReader 생성 후 readLine()으로 읽어 들임.
private final BufferedReader br;
public RequestHandlerUtils(InputStream in) {
br = new BufferedReader(new InputStreamReader(in));
}
- 전달받은 BufferedReader 객체를 종료하면, 웹에 화면이 출력되지 않음
2단계 - HTTP 요청 URL 추출
21:47:50.105 [INFO ] [Thread-21] [webserver.RequestHandler] - path = /index.html
21:47:50.128 [INFO ] [Thread-22] [webserver.RequestHandler] - path = /css/bootstrap.min.css
21:47:50.130 [INFO ] [Thread-23] [webserver.RequestHandler] - path = /css/styles.css
21:47:50.130 [INFO ] [Thread-24] [webserver.RequestHandler] - path = /js/jquery-2.2.0.min.js
21:47:50.130 [INFO ] [Thread-25] [webserver.RequestHandler] - path = /js/bootstrap.min.js
21:47:50.131 [INFO ] [Thread-26] [webserver.RequestHandler] - path = /js/scripts.js
21:47:50.145 [INFO ] [Thread-27] [webserver.RequestHandler] - path = /fonts/glyphicons-halflings-regular.woff
http://localhost:8000/index.html을 입력했는 데 다른 요청이 같이 오는 이유
index.html에 작성되어 있는, <link>, <script>, <img>을 확인하고 서버에 추가로 요청을 보냄.
3단계 - 추출한 요청 URL에 맞는 응답 데이터 전송
- 각 요청 URL에 맞게 Content-Type을 설정해주어야 CSS까지 잘 표시되어 나옴
private String setContentType(String path) {
if(path.endsWith("css")) {
return "text/css";
} else {
return "text/html";
}
}
- 요청에 대한 응답의 본문은 Byte[]로 전송해야 함.
bytes = Files.readAllBytes(new File("./webapp" + path).toPath());
4. 공부하면서 생긴 의문점
- InputStream와 InputStreamReader의 역할은 무엇인가?
혹시라도 잘못된 점이 있으면 알려주시면 감사하겠습니다!
참고
박재성, 「자바 웹 프로그래밍 Next Step: 하나씩 벗겨가는 양파껍질 학습법, 로드북, 2016, 480p
[Web] 자바 웹 프로그래밍 Next Step 알게 된 사실들, “nextstep 웹 프로그래밍”, https://bryceyangs.github.io/various/2021/09/16/Book-%EC%9E%90%EB%B0%94-%EC%9B%B9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-Next-Step/, 2024. 5. 20
300x250