패스트캠퍼스 백엔드 부트캠프 3기

[패스트캠퍼스 백엔드 부트캠프 3기] 11주차

다름임 2025. 2. 24. 10:04

 

 

여러개 정리 

 

 

1. 컨트롤러 *

@Controller :  프로그램 등록 

@RequestMapping : URL 요청, 메서드 연결

 

RequestMapping은 여러개의 메서드를 연결할 수 있다. 매개변수로 작업에 필요한 입력값을 받는다. 

메서드는 요청에 대한 응답으로 HTML을 만들어서 준다. 

 

서블릿은 매개변수로 Response, Request를 꼭 가지고 있어야 하지만 , RequestMapping은 요청만 필요하면 요청만, 응답만 필요하면 응답만 매개변수로 받을 수 있다. 

 

@RequestMapping("/requesInfo")

     public void main(HttpServletRequest request){ }

라고 하면, 

매개변수로 request를 받았기 때문에 request 객체가 생성된다. 

여기에 정보를 추가할 수 있는데 (수정은 불가능) 

 

언제 가능하냐면 다른곳에 전달할때 가능하다

1. Forward

2. Redirect

요청 + a

 

정리하자면  요청은 Request객체를 전달하는 것이고, 응답은  HTML을 전달한다. 

 


 

왜 HTML을 전달할까 ? 답은 우리가 브라우저를 사용한 웹 프로그램을 만들기 때문이다. 

 

웹은 브라우저와 서버 간의 파일 요청과 파일 응답(제공)이다 . 이때 url은 파일 경로이며, 찾지 못하면 404 에러가 난다.

리소스는 파일을 제공하는 것이다. 

 

파일을 주고 받는것이 핵심이기 때문이다. 파일은 두가지로 나눌 수 있는데 

정적 리소스 :  html, css, js, img ..

동적 리소스 :  jsp ..

 

정적 리소스는 경로를 직접 지정해주면 되지만 (서버에 넣으면 알아서 가져감) 

동적 리소스는 제한적이다. 실제 프로젝트에서도 절대경로('파일위치')를 작성해도 에러가 생겨 파일을 가져오지 못한다. 

 

동적 리소스를 사용하기 위해서는 등록하고 연결하는 과정이 필요하다. 그래서 메서드를 호출 할 수 있고, 이 메서드가 html파일을 만들어서 넘겨준다.

 

궁금한점...jsp는 동적 파일이지만 등록 연결 없이 자동으로 넘겨줄수 있다 한다. 그런데 왜 항상 등록하고 연결해야만 출력된 것일까...?

 

그럼 우리가 만드는 웹 앱 프로그램은 무엇일까 ? 화면 연결 ==  HTML 과 관련 데이터를 넘기는 것이다.

데이터를 넘길때는 GET(Read) 방식과 POST(Write)방식이 있다.   ---> 이부분은 정확하게 알고있는게 아님// 

 

 

화면 넘기기 1. QueryString 2. <Form> 3. Forward 4. Redirect

 

 

* HTML 파일이 안보인다는것

1. 파일경로( URL)을 잘못 전달

2. 서버에 없다

 

Spring 은 경로를 직접 지정할 수 없다. 

이유-->  view를 사용하기 때문에 컨트롤러를 통한 접근이 필요  : WEB-INF 폴더를 직접 접근하지 못함 

 

 

보통 파일 경로는' ${pageContext.request.contextPath}/ 컨트롤러 경로 '   로  찾아가며

contextRoot는 webapp 폴더이다


 

 

 

 

 

 

String과 함수형 프로그래밍은 어떤 관계가 있을까?

 

함수형 프로그래밍은  iv를 사용하지 않는다. 그럼 어떤것을 사용 ? --> 상수 또는 lv를 사용한다. 

이유는 불변이기 때문이다. 여기서 불변 하면 생각나는 것이 String인데

 

String의 특징은 1. 바꿀수 없으며 2. 바꿀때마다 새로 생성된다 는 것이다. 

String의 장점은 공유에 강하다는 것이다. 새로 생성되기 때문에 메모리에 부담될것 같지만,

 

iv는 공유가 불가하기 때문에  iv를 사용하는것이 메모리부담이 더 크다.

 

함수형 프로그래밍은 멀티쓰레드를 사용한다. 따라서 공유에 강하다

 

빅데이터는 데이터의 크기가 엄청 크기 때문에 쓰레드 여러개가 큰 데이터를 쪼개서 사용한다. 그렇다면 멀티 쓰레드 환경이 유리한데 , 함수형 프로그래밍을 사용한다 

 

 

 

 

*** Spring DI 

DI(Dependency Injection / 의존성 주입) 

: 객체를 가지고 있다가, 객체 주소를 참조변수에 대입   ~~~

관련 디자인 패턴 -->flyweight

핵심 : new 를 사용하지 않고, GET으로 가져오기

 

구조

0. 요청이 오면

1. 설정파일 : (id, 클래스) 쌍이 여러개 있는 파일

2. Map(Spring이 가지고 있음) : (id,주소) 쌍으로 이루어져 있으며, 설정파일에서 가져온다(주소를?)

3. 참조변수에 Map의 주소값을 담아서 준다

 

정리 :  Map에 객체를 가지고 있다가 꺼내서 쓰기 

장점 : 코드를 고치거나 컴파일하지 않아도 된다. 설정파일만 변경하면 다른 객체를 가지고 올 수 있다. 

 

*설정파일 등록 : 수동(직접 작성) 자동(애너테이션 @Controller)

*주입 : 자동주입 / 수동주입

 

*요청의 종류

1. ByName

2. ByType (instanceOf 로 찾는다.)

 

* 사용하기 

ApplicationContext ac = new  ______(설정파일) 

ApplicationContext는 Map을 가지고 있다. 

1) Map 생성 

2) 설정정보 Read

 

 

 

____________________________________________________________________________________________

 

* WebDataBinder

 

1. 변환 

1) PropertyEditor : old. 양방향, iv O

2) Convertor : 단방향, iv X

3) Formatter : @만들기 . @NumberFormat, @DateTimeFormat

 

2. 검증

1) Validator 작성

2) WebDataBinder 등록  --

       1. @ InitBinder : 컨트롤러

       2. @WebbindingProvider? :global

 


 

 

String main (String year, int month, Mydate mydate) 

매개변수자리에 들어올수 있는 애너테이션 

1) @RequestParam : String

2) @ModelAttribute : 참조형(String  제외 ) --> 모델에 자동 저장