1. MethodCall2 실습 https://github.com/castello/spring_basic/blob/main/ch2/MethodCall2.java에서 MethodCall2 가져오기. Class.forName을 사용해서 "com.fastcampus.ch2.YoilTellerMVC"의 객체를 생성한다. 생성한 객체의 main메서드 정보를 가져온다. 이름이 main인 메서드가 오버로드 되어있을 수 있으므로 변수를 모두 적어줘야 한다. 암튼 Model생성해야 한다. String viewName = (String)main.invoke(obj, new Object[] { 2021, 10, 1, model });는 invoke에서 obj라는 객체에 main 메서드를 호출한다. Object[] { 202..
1. MethodInfo 예제 Spring에 매개 변수만 적어주면 어떻게 페이지가 생성되는지 원리를 알아보자. https://github.com/castello/spring_basic/blob/main/ch2/MethodInfo.java에 있는 MethodInfo 코드를 가져온다. StringJoiner는 구분자 " , " // 접두사 " ( " // 접미사 " ) " 를 붙이고 add 메서드를 사용하면 console과 같이 깔끔하게 출력 가능하다. YoilTeller의 매개 변수는 request, response인데 console에 출력된 것의 매개 변수는 arg0, arg1이다. 컴파일러에게 매개 변수의 type은 중요하지만 이름은 중요하지 않다. 컴파일 된 상태에는 매개 변수의 이름은 저장하지 않는..
yoil이라는 view의 이름이 어떻게 "/WEB_INF/views/yoil.jsp"로 바뀌는지 알아보자. spring폴더의 servlet-contect.xml은 웹설정 파일이다. 위 부분이 view를 설정하는 부분이고, 접두사 prefix로 경로 "/WEB-INF/views/"를 붙이고 접미사 suffix로 ".jsp"를 붙이라는 코드이다. 이 설정은 수정할 수 있다. 만약 반환 타입이 void로 view의 이름을 반환하지 않으면 어떻게 될까? view의 이름이 mapping된 URL의 이름으로 결정된다. getYoilMVC.jsp파일을 만들고, 톰캣을 실행한다. 반환된는 view가 mapping된 주소의 이름과 같은 jsp파일이 실행된다. 보통 이런 식으로 사용하지는 않지만 URL이름과 view의 이..
YoilTeller 복사해서 YoilTellerMVC 만든다. 입력을 분리하면 HttpServletRequest request 매개변수를 String으로 year, month, day 각 각 받게 된다. 따라서 request 메서드인 request.getParmeter를 사용하지 않아도 된다. Spring은 문자를 숫자로 자동 형변환 하므로 매개 변수를 int형으로 바꿔주고, 작업의 parseInt 메서드를 쓰지 않아도 된다. 코드의 수가 줄어든다. 이 상태로 실행시키면 500 Error가 발생한다. 당황하지 말고 Error 메시지를 읽어보자. "Ambiguous mapping found."은 @Controller에서 @RequestMapping이 잘못되었을 때 발생하는 오류이다. YoilTeller의 ..
1. 관심사의 분리 Separation of Concerns YoilTeller 프로그램을 보면 으로 나눌 수 있다. "입력", "처리", "출력"을 Concern(관심사)라 한다. 관심사는 처리할 작업단위라 생각하자. YoilTeller의 main 메서드는 3개의 Concern이 있다. OOP의 5가지 설계원칙이 있고, 5가지의 앞 글자만 따서 SOLID라 한다. 한 가지가 단일책임의 원칙(SRP, Single Responsibility Principle)이다. 하나의 메서드는 하나의 책임만 가져야 한다는 뜻이다. 여기서 책임은 Concern이고 YoilTeller의 main 메서드는 3개의 Concern이 있어 분리하는 것이 맞다. 객체지향적으로 코딩을 잘하려면 코드 분리를 잘해야 한다. 분리의 종류..
텍스트와 바이너리, MIME, Base64 MIME(Multipurpose Internet Mail Expressions) Base64 7. 텍스트와 바이너리, MIME, Base64 data는 크게 문자, 숫자로 되어 있다. 위 그림은 image.jpg를 메모장으로 읽은 것이다. 메모장은 text editor이므로 image.jpg를 text로 인식해서 보여준다. 파일이 text 파일인지 binary 파일인지 구분하는 방법은 메모장으로 열었을 때 읽을 수 있으면 text 파일이고 못 읽으면 binary 파일이다. 위 그림에서 문자 외에 깨진 것은 숫자라 보면 된다. binary 파일은 문자는 문자, 숫자는 숫자로 쓰고 읽는다. text 파일은 문자는 문자, 숫자는 문자로 변환해서 쓴다. 읽을 때는 전부..
프로토콜(protocol)이란? HTTP(Hyper Text Transfer Protocol)란? HTTP 메시지 HTTP 메세지 - 응답 메시지 HTTP 메세지 - 요청 메시지 HTTP 메세지 - GET, POST 1. 프로토콜(protocol)이란? protocol은 서로 간의 통신을 위한 약속, 규칙이다. 컴퓨터에서만 쓰이는 용어는 아니다. 컴퓨터에서 말하는 protocol은 '주고받을 데이터에 대한 형식을 정의한 문서'이다. 데이터를 어떻게 주고받을지 약속하지 않으면 데이터가 어디서부터 어디까지인지 혹은 어떤 내용인지 해석할 수 없다. 따라서 데이터를 주고받을 때 필요한 서로 간의 약속이 쓰인 문서가 있어야 한다. protocol은 '주고받을 데이터에 대한 형식을 정의한 문서'이다. 이는 busi..
6. Tomcat의 설정 파일 - sever.xml, web.xml web.xml은 톰캣에 있는 web.xml과 STS prj에 있는 web.xml 2가지가 있다. 톰캣의 모든 web app의 공통 설정으로 먼저 실행 한 다음에 STS prj의 web.xml 개별 설정으로 넘어간다. 공통 설정 web.xml의 경로는 톰캣 설치 경로/config/web.xml에 있고(1개) 개별 설정 web.xml은 프로젝트, context마다 있다. ❓ XML(Extensible Markup Language)은 데이터를 정의하는 규칙을 제공하는 마크업 언어 Package Explorer의 Server 항목을 보면 Tomcat v9.0 하위 항목에 공통 설정 web.xml이 있다. 뒤에 나오겠지만 이 web.xml이 먼저..
Architecture Overview(클라이언트와 서버(1)에서 배웠던 용어 정리) 클라이언트와 서버 - 실습 클라이언트와 서버 - 정리 1. Architecture Overview(클라이언트와 서버(1)에서 배웠던 용어 정리) https://tomcat.apache.org/tomcat-9.0-doc/architecture/overview.html Apache Tomcat 9 Architecture (9.0.73) - Architecture Overview This page provides an overview of the Tomcat server architecture. Tomcat is designed to be a fast and efficient implementation of the Servl..
다운로드 받은 dice image는 webapp - resources - img 안에 넣는다. 코드를 복사해서 붙여넣고 실행하자. "http://localhost:8080/ch2/rollDice"를 입력하면 아무튼 잘 출력이 되었다??? 이미지가 깨진 것은 아닌지 확인하기 위해 "/img/dice1.jpg" 를 입력했는데 이미지가 나오지 않는다. 경로를 잘못쳐서 안나오는 경우가 많다. 경로에 resource를 추가한다. 아주 잘 나온다. 주사위 이미지를 random하게 출력하기 위해 Math.random 메서드를 사용한다. 새로고침을 누르면 주사위가 바뀐다. 서버가 제공하는 리소스가 2개가 있다. 1. 동적 리소스 - 실행할 때 마다 결과가 바뀐다. 프로그램이 생성해 내는 결과가 동적 리소스이다. str..