Programming/Spring 16

[MVC] HTML, HTTP API, CSR, SSR

* HTML - HTML 페이지 자체를 넘기는 것 * HTTP API - 데이터를 넘기는 것 - JSON * 백엔드 개발자가 서비스를 제공할 때 고민해야 할 사항 3 가지 - 정적 리소스를 어떻게 제공할 것인가 - 동적인 HTML 페이지를 어떻게 제공할 것인가 - HTTP API를 어떻게 제공할 것인가 * SSR ( Server Side Rendering ) - HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달 - 주로, 정적인 화면에 사용한다 - JSP, Thymeleaf * CSR ( Client Side Rendering ) - HTML 결과를 자바 스크립트를 사용하여 웹 브라우저에서 동적으로 생성해서 적용 - 주로 동적인 화면에 사용한다 - 구글 지도, 구글 캘린더

Programming/Spring 2022.06.20

[MVC] 동시요청 - 멀티쓰레드 (Multi-Thread)

* 배경 상황 : Http 요청 -> TCP/IP 연결 (Connection) -> 서블릿 객체 호출 이 때, 서블릿 객체를 호출하는 것은 무엇인가? 쓰레드다. * 쓰레드의 특징 - 애플리케이션 코드를 하나하나 순차적으로 실행하는 것이 쓰레드 - 예. 자바 main 메서드를 처음 실행하면 main 이라는 이름의 쓰레드가 실행 - 쓰레드는 한 번에 하나의 코드 라인만 실행 - 동시 처리가 필요하면 쓰레드를 추가로 생성 * 단일요청이라면? - 단일 요청이 왔다면 연결 시에 쓰레드를 하나 할당한 후, 서블릿을 호출해서 응답을 해주면 된다. * 근데 문제는 다중요청이라면? - 다중 요청(한 개 이상의 요청)시 한 개의 쓰레드를 점유하고 있기 때문에 다른 요청을 처리되지 못하고 대기하고 있게 되어 서비스 지연의 ..

Programming/Spring 2022.06.07

[Spring] BeanDefinition

[Spring] 스프링 빈 조회 스프링 빈을 조회하는 다양한 방법에 대해 코드로 살펴보자. * BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 메서드를 제 supreme-ys.tistory.com 이 전 포스팅에 대한 답에 대한 포스팅이다. 스프링은 xml이나 annotation을 통해 빈을 등록할 수 있다. 빈을 등록할 때 스프링은 어떤 구조로 되어있길래 종류에 상관없이 빈을 등록할 수 있는지가 질문이었다. 그에 대한 답은 BeanDefinition에서 찾을 수 있다. BeanDefinition은 추상화이다. 역할과 구현을 개념적으로 나눈 것인데, BeanDefinition은 Xml을 읽거나, 자바 코드를..

Programming/Spring 2022.02.07

[Spring] 스프링 빈 조회

스프링 빈을 조회하는 다양한 방법에 대해 코드로 살펴보자. * BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 메서드를 제공한다. * ApplicationContext BeanFactory의 기능을 모두 상속받아서 사용한다. ApplicationContext가 BeanFactory를 상속받아서 사용한다면 그 둘의 차이에 대해 알아보자. ApplicationContext는 BeanFactory에서 제공하는 빈 관리, 조회 기능 뿐만 아니라 어플리케이션 개발에 필요한 부가 기능들을 제공한다. -> 국제화 기능, 환경 변수, 이벤트, 리소스 조회 등등! 즉, ApplicationContext = BeanFacto..

Programming/Spring 2022.02.07

[Spring] ApplicationContext, 스프링 컨테이너, 스프링 빈(Bean)

프로젝트를 제작하면서, 기존에 인X런에서 배웠던 내용들을 다시 리마인드하는 작업을 하고 있다. 이거 굉장히 좋은 학습 방법인 것 같다. 아주 착착 감긴다. 어떤 느낌이냐면, 흩어진 지식들을 연결하는 느낌이다. 하드 코딩으로 필요한 기능을 추추추추추추추가 하며 무슨 내용인지도 모르고 '그냥 기능만 잘 동작하면 되지' 라는 마인드로 개발을 진행했었다. 이 어노테이션(@)이 왜 쓰이고, 무엇 때문에 쓰이고 어느 부분에선 왜 이런 어노테이션이 쓰이는지 그 이유를 알 수 있는 공부 방법이라고 생각한다. 그래서 뿔뿔이 흩어져있는 지식들을 연결하기 위한 정리들을 시작하는 중이다. 그 첫 번째는 ApplicationContext이다. 스프링을 한 번이라도 접해봤다면 ApplicatioContext를 들어는 봤을 것이다..

Programming/Spring 2022.02.06

[스프링의 정석] HTTP 요청과 응답

* 프로토콜이란? - 서로 간의 통신을 위한 약속, 규칙 - 주고 받을 데이터에 대한 형식을 정의한 것 * HTTP - Hyper Text Transfer Protocol - 단순하고 읽기 쉽다. 텍스트 기반의 프로토콜 - 상태를 유지하지 않는다. (Stateless), 클라이언트 정보를 저장하지 않는다. - 똑같은 사람이 두 번 요청을 보내도 똑같은 사람이 두 번 요청을 보냈는지 구분하지 못한다. 상태를 유지하지 않기 때문이다. - 이를 보완하기 위해 쿠키와 세션을 사용한다. - 확장 가능하다. 커스텀 헤더 추가 가능 - 헤더 / 바디로 구성이 되어있으며, 헤더는 대,소문자를 구분하지 않고 n개 생성가능하다. 헤더와 바디는 줄바꿈으로 구분한다. - 유저는 URL만 입력하지만 브라우저가 http 요청 메..

Programming/Spring 2021.10.28

[스프링의 정석] 클라이언트와 서버

1. HttpServletRequest - 웹 사이트 상에서 URL을 입력하고 요청을 하면, 톰캣이 이를 받아서 객체를 생성한 후 받은 정보를 나눠서 담는다. 이후 HttpServletRequest의 매개변수로 제공하며, 사용 가능하다. 말이 조금 어려운데, 웹 주소창에 어떤 정보를 요청하면 톰캣이라는 중계서버가 알아서 만들고 그 정보의 특징에 맞게 정리정돈도 해준다는 뜻이다. 잘 정리정돈 되어있으니 적절한 메서드를 활용하면 사용하기도 수월하다. 2. HttpServletRequest 메서드 - getScheme(), getServerName(), getServerPort()..등등 - 이러한 메서드는 정리정돈된 칸이라고 보면 된다. - 그 중에 쿼리 스트링 부분은 getParameter 메서드를 사용하..

Programming/Spring 2021.10.27

[스프링의 정석] HTTP 요청과 응답

1. 로컬에서의 요청과 실행 아래의 코드는 간단하게 연,월,일을 입력하면 요일을 알려주는 프로그램이다. package com.fastcampus.ch2; import java.util.Calendar; // 연, 월, 일을 입력하면 요일을 알려주는 프로그램 public class YoilTeller { public static void main(String[] args) { // 1. 입력 String year = args[0]; String month = args[1]; String day = args[2]; int yyyy = Integer.parseInt(year); int mm = Integer.parseInt(month); int dd = Integer.parseInt(day); // 2. 작업..

Programming/Spring 2021.10.27

[스프링의 정석] AWS에 배포하기

지금까진 localhost로만 접근해서 로컬 환경에서 원격 서버를 띄우고 진행했다. 본격적으로 AWS 상에서 배포를 위한 과정을 진행하자. 먼저, 만든 프로그램을 Export하는 과정이 필요하다. 1. 로컬에서 만든 프로그램을 Export 한다. - STS3에서 Export -> War 파일로 Export 한다. 2. AWS EC2에 접속하기 - 원격 접속 이후, war 파일을 톰캣이 저장된 위치 -> webapps 디렉토리를 찾아서 복사, 붙여넣기 해준다. 3. 톰캣을 실행한다. - 톰캣을 실행하면 war 파일이 webapps내의 디렉토리에 압축이 풀리고 설칙가 된다. 4. 현재 상태 - AWS 원격 서버에 내가 만든 프로그램을 설치한 상태 5. AWS EC2의 퍼블릭 IP 주소를 기반으로 연결 - P..

Programming/Spring 2021.10.26

[스프링의 정석] Spring MVC - 원격 프로그램의 실행

* 프로그램을 어떻게 실행시킬까? // 로컬 프로그램의 실행 public class Main { public static void main(String[] args) { System.out.println("Hello"); } } - CLI창에서 java Main 명령어를 통해 자바 인터프리터를 실행시켜 Main 클래스를 실행시킵니다. * 자바 인터프리터는 어떻게 main메서드를 호출할 수 있을까? - main메서드가 static이기 때문에 호출이 가능합니다. static이 아니면 객체를 생성해야 합니다. * 그렇다면 원격 프로그램은 어떻게 실행시킬 수 있을까? - 브라우저, WAS(톰캣)을 통해 실행시킬 수 있습니다. - 하지만 WAS가 실행되려면 먼저 프로그램을 등록하고 프로그램이 특정 호출로 인해 실..

Programming/Spring 2021.10.26