웹 개발 역량강화를 위해 내일배움카드로 수강할 수 있는 백엔드 교육과정을 찾아보았다. 남궁성&박매일 님의 '나도 할 수 있는 Java & Spring 웹 개발 종합반'이 교육일정이나 커리큘럼이 무난한 것 같아서 수강하게 되었다. 8주 총 65시간의 과정을 포스팅하고자 한다.
커리큘럼
주차 학습 내용 1주차 생각,표현,코딩하기란? 2주차 Java 기초 다지기1 3주차 Java 기초 다지기2 4주차 객체지향 프로그래밍 시작하기 추가1 객체지향 프로그래밍 설계하기 5주차 Spring 시작하기 6주차 Spring MVC part1 7주차 Spring MVC part2 8주차 Spring MVC part3 추가2 Spring DI 와 AOP 파이널 프로젝트
(1) Java.exe 인터프린터가 main() 메소드 실행
(2) main() 메소드는 static 이라서 객체 없이 바로 호출 가능
아무 프로그램이나 실행시키면 안되기 때문에 인련의 사전 작업이 필요
(1) 프로그램 등록 (@Controller 클래스 앞에 명시)
(2) URL과 프로그램을 연결 (@RequestMapping 호출하려는 메서드 앞에 쓰고 URL을 입력)
@Controller // 1. 프로그램 등록 public class Hello { @RequestMapping("/hello") // 2. URL과 main()을 연결 public void main() { System.out.println("Hello"); } }
(3) URL 구성은 'https://원격컴퓨터IP:포트번호/Context root/메서드경로'이다. 컨텍스트 루트는 프로젝트 루트라고 이해하면 쉽다.
(4) 브라우저에서 URL로 원격 컴퓨터 ip주소, 포트번호, 경로로 호출
(5) 톰캣이 그것을 받아서 실행
URL과 연결하는 메서드를 인스턴스 메서드로 선언하는 이유
-> static은 인스턴스 멤버를 할 수 없음, URL로 원격 프로그램 호출시 톰캣이 객체를 생성해서 인스턴스 호출 가능
URL과 연결한 메서드가 private임에도 호출이 가능한 이유
-> RequestMapping은 외부에서 스프링 프레임워크가 자바의 Refelction API를 이용해서 객체를 생성해 메소드를 호출하기 때문에 가능 (이 어노테이션을 붙은 것은 접근 제어자 상관없이 호출가능)
*Reflection API란? 클래스 정보를 얻고 다룰 수 있는 강력한 기능을 제공, java.lang.reflect패키지 제공
(1) 클래스 객체(클래스에 대한 정보 담긴 객체)를 얻어오기
(2) 가져온 클래스 정보로 객체 생성(설계도가 있으니 뭐든 할 수 있음)
(3) 밖에서 해당 클래스 접근 가능
(스프링 프레임워크가 이 방식을 사용)
(1) 프로젝트 war파일로 추출(압출파일 같은 것) : Build - Build artifacts
(2) AWS컴퓨터 - LocalDisk - tomcat - webapps에 .war파일 삽입
(3) tomcat - bin 폴더에서 startup하면 .war파일 압축해제하고 실행함
(4) 원격서버에 접근하기 : awsip:포트번호/경로
(1) URL입력으로 호출을 하면 톰캣이 HTTPServletRequest 객체를 만든다.
(2) 요청 정보를 HTTPServletRequest 객체에 담아서 main 메서드에 넘겨준다.
(3) main() 메소드 안에 HttpServletRequest request를 넣으면 알아서 매개변수가 들어간다.
(4) URL에서 ?뒤에 붙는 정보는 QueryString이라고 한다. (key&value 구조의 Json 형식)
(5) 쿼리스트링은 request.getParameter()라는 메소드로 정보를 얻는다
request.getQueryString() String str = request.getParameter("keyName"); String[] strArr = request.getParameterValues("keyName"); // 같은 키값이 여러개일 때 Iterater iter = request.getParameterNames(); Map paraMap = request.getParameterMap();
하나의 서버에 e-mail server, file server, web server 등 여러 서버가 있는 경우,
클라이언트가 IP주소 만으로 원하는 서버에 접근할 수 없다.
이때 포트번호를 적어주면 원하는 서버로 접속이 가능하다.
포트번호는 0~1023까지는 예약되어 있다. 최대 65535까지 지정가능
(웹서버는 디폴트가 80이다, 80은 생략가능)
WAS는 웹 애플리케이션을 서비스하는 서버
-> 서버에 애플리케이션(프로그램)을 설치해두고 웹으로 애플리케이션을 제공하는 것
(1) 브라우저가 URL을 통해 요청을 하고 port로 들어오면 Threadful이 기다리고 있다.
(2) Tomcat > Service > Connector > Protocol(HTTP, AJP 등)
(3) 요청이 들어온 Protocol에 따라서 처리할 Connector가 달라진다.
(4) Connector는 Engine(Catalina)에 보낸다. Engine안에는 n개의 Host가 있다.
(5) Host(www...co.kr) 안에는 또 여러개의 Context(WebApp, STS프로젝트)가 있다.
(6) Context안에는 또 서블릿(작은 서버 프로그램=컨트롤러)이 있다.
(7) 서블릿 실행 결과가 클라이언트에게 전달된다.
(1) 서블릿 등록 -> @Contoller로 바뀜
(2) URL 연결 -> @RequestMapping으로 바뀜
서로 간의 통신을 위한 약속, 규칙으로 주고 받을 데이터에 대한 형식을 정의한 것
응답코드
요청방식
바이너리 파일 : 문자와 숫자가 저장되어 있는 파일 (메모장으로 안읽어지는 파일)
쓸때 문자는 문자로 숫자는 숫자로 저장한다.
사람이 읽기 어렵다.
텍스트 파일 : 문자만 저장되어 있는 파일 (메모장으로 읽어지면 텍스트 파일)
텍스트 파일은 문자는 문자로 숫자는 문자로 바꿔서 저장한다.
(1 -> '1' 로 바꾼다는 느낌인듯)
사람이 읽기 쉽다.
Flask로 간단간단한 테스트용 서버를 만들고 작업할 때는 몰랐던 깊이있는
내용들을 알 수 있어서 좋았다. Spring을 한다는 것은 그냥 하나의 웹 프레임워크를 익히는 것이 아니라 웹과 관련된 기술 전반적인 내용을 공부하는 것이라는 생각이 들었다. 지금 돌이켜보면 당연한 것인데 너무 쉽게만 생각한 것 같아 반성해야겠다.