SW과정 주말 보충 강의 0926(2)

JongseokLee·2021년 9월 25일
0
post-thumbnail

SW과정 주말 보충 강의 0926(2)

스프링 기본

스프링기초
스프링부트 작동원리


1. 지난주 복습

자바 메모리에서 가장 먼저 올라오는 것이 Static 그 후 main 메서드 실행
원하는 오브젝트를 메모리에 올리고 싶으면 heap이라는 공간을 사용함

stack은 메서드가 실행시에만 뜸(메서드가 종료되면 메모리에서 사라짐)
그래서 지역변수라고 부름(생명주기가 제일 짧음)

오버로딩의 한계 경우의수가 너무 많아졌을 때 오버로딩 해결이 안됨
오버로딩이 너무 많으면 추상화를 씀(Abstract) 추상화를 쓰면 함수 호출을 못함
그래서 오버라이드를 사용함 : 오버라이드(부모의 메서드를 무효화 시킨다)
오버라이딩 -> 자식이 부모의 메서드를 재정의함
Class => 가구
가구 => 오브젝트 될 수 없음(추상적인 개념이니까) 그래서 추상 class로 정의함(셀 수 없음), 오브젝트로 생성된 애들은 new할 수 있는 애들임
인스턴스 new해서 메모리에 올라온 애들을 인스턴스라고 함

class => 모든 것들이 class가 될 수 있음
오브젝트 => new해서 메모리에 올라오는게 가능한 애들
인스턴스 => 메모리에 실제로 떠있는 애들

행위 : Public
상태 : Private(메서드)
책임 : 오브젝트가 만들어 질 때 가져야할 메서드들, 한개의 오브젝트 한개의 책임(ex:커피머신이 콜라까지 만들면 안됨) 책임을 분리하는게 좋음

OOP => 상태, 행위, 책임 => 오브젝트(3가지를 가지는 것)

오브젝트와 오브젝트 끼리는 협력을 할 수 있는데 협력을 할 수 있는 매개체가 행위(책임)이다. 결과를 리턴해줌

Byte Stream과 Buffer

바이트 스트림 => 양방향 통신을 하기 위해서 바이트 단위로 전송하는 무선라인

보드레이트 설정해놓은 크기를 전송시키고 수신하는 쪽에서도 발신하는 크기에 해당하는 값을 다 받을 때까지 기다림
char -> 주민등록번호(고정 값)
varchar -> 집주소, 자기소개 등(가변길이 값)

버퍼특징(가변길이의 데이터 생성 가능)
A에 버퍼값에 해당하는 문자 입력=> 꽉차면 플러시(stream에 흘러보냄) => A->B로 저장 => 변수에 보낸 문자저장
현재 사용되는 대부분의 방식은 버퍼 방식

버퍼값 = 자바는 8192byte(프로그램마다 다름)


2. 스프링부트 기초

Maven

의존성(dependancy) 관리도구
다운받고 자동으로 빌드를 해주는 도구임


루시만 의존하면 루시가 의존하고 있는 것들을 자동으로 빌드해줌
배달의민족 거래처처럼 처음에는 Maven사에서 직접 다 레포지토리를 넣어야함
pom.xml에 다 넣어놓으면 자동으로 필요한 의존성들을 다운받아서 빌드해줌
구글에 mvnrepository

Frame+work(틀 + 일하다)

스프링부트 = 프레임워크

Gradle

Lucy

다운받고 자동으로 유효성 검사를 해주는 도구

Spring Boot Devtool
코드를 변경하고 저장하면 디플로이 자동으로 해줌

Srping Web
URL 패턴을 URI패턴으로 바꿔줌(컨트롤러가 있음)
이걸 사용해야지 MVC패턴으로 만들어짐

Mustache(템플릿 엔진)
HTML 파일에 JAVA코드를 집어넣는 것

없는 팔을 가져오는 것 => 다운로드
가져온 팔을 연결 하는 것 => 빌드

Oracle Listener

누가 연결하는지 지켜보고 있는 애들
Oracle Service
실제 오라클 작동

디스팻처서블릿

1) 요청 2) 끝에 있는 주소 파싱 3) IoC컨트롤러에 '/'가 있는지 찾아내고 4) '/'가 있으면 그 함수를 호출함 => (컨트롤러로 만든 애들 찾아냄)
어떤 메서드로 요청했는지도 확인함 Get or Post
컨트롤러를 찾아서 보내는 일, Front Controller가 성안에 생성됨
디스팻처서블릿 하는 일: 컨트롤러로 등록된 아이들을 요청이 올 때 IoC테이너에서 찾음
디스패치(보내다) 디스팻처(컨트롤러를 찾아주는) -> 서블릿한테 보낸다.
localhost:8080에 있는 글자를(buffered) 브라우저로 보낸다. 브라우저가 화면에 그림
서버 실행시에 IoC컨테이너 만들어짐
생성 순서 1) 성, 2) DS, 3) IoC컨테이너, 4) 컴포넌트(:오브젝트(Class:com.cos.firstapp 이하만 스캔)) 스캔, 5)
Inversion of Controll(제어의 역전) 오브젝트를 담아두는 곳
@Component를 적으면 IoC컨테이너가 관리하게 됨, 개발자가 아니라 스프링이 new에서 띄우게 됨, new에 대한 제어권을 스프링이 가짐(new 없이 클래스 사용 가능)
@RestController또한 IoC컨테이너가 관리하게 만듦
@PostMapping을 쓰려면 pom태그로 양식을 만들어야함(네이버 로그인에 로그인 버튼 등)
DS가 관리하는 건 RestController Component는 관리안함
디폴트 생성자가 있는 애들을 먼저 스캔하고 의존하는 애들을 두번째로 스캔함
오류 발생 시 위에 문제점 파악해야함(밑에 내용들은 위에서 오류가 났기에 따라오는 오류들)


DispatcherServlet이 home이라는 path를 보고 파일을 찾아봤더니 없더라
ViewResolver 세팅을 확인해봐라
ViewResolver => prefix src/main/resource/templates
=> suffix .mustache
VR이 없으면 주소를 다 넣어야함 쉽게 사용하기 위해서 만들어놓음

Content-Type : application/json, text/html

MessageConverter 리턴시에 @RestController이면 동작함
MessageConverter => String => text/html
MessageConverter => 자바오브젝트 => application/json

Mime 타입 http 헤더 컨텐트타입에 mime타입을 꼭 넣어줘야함 안넣어주면 브라우저가 해석을 못함, Mime타입은 데이터를 줘야할 때 필요함 제대로 읽기 위해서

GET(SELECT) 데이터 받기(디폴트는 GET 요청임)
요청 헤더 : Content-Type(X)
응답 헤더 : Content-Type(O) http 바디 없음

POST(INSERT) 데이터 줄테니 저장해
요청 헤더 : Content-Type(O) 데이터를 줘야하니까(회원가입, 글쓰기)
응답 헤더 : Content-Type(X, O) 로그인페이지 등(웹은 다 준다 응답을) http 바디 있음

PUT(UPDATE) 수정해달라
요청 헤더 : Content-Type(O) 수정할 데이터를 줘야함, 이 데이터가 어떻게 생겼는지 알려줘야한다
응답 헤더 : Content-Type(X, O) http 바디 있음

DELETE 데이터 삭제
요청 헤더 : Content-Type (X)
http://localhost:8080/board/1
DELETE FROM board WHERE id = 1 (id는 primary key)
응답 헤더 : Content-Type(X, O) http 바디 없음

폼태그 전송시 데이터 타입은

아파치 데이터를 주는 애 / 톰켓 자바관련을 컴파일해서 주는 애

디스패처 서블릿 역할
1.주소를 파싱해줌
2.타입
3.데이터
4.IoC 스캔->@RC,@C->PostMapping에 주소가 같은것을 찾는다
5.메소드를 호출할려고 하는데 username,password를 넣어줘야되는데
바디데이터에 있는걸 파싱을 해서 넣어준다.
6.(@RC일때)응답을 해줘야되는데 void라서 아무것도 안해준다. 만약 String이면 return값을 MC가 낚아챈다
그리고 MC가 Context-type을 달아서 리턴해준다.
return이 자바 오브젝트이면 MC가 오브젝트 밑에 get이 적혀있는 값을 모두 보여준다.

자바오브젝트 응답 시 json 파일로 변환하는 이유

json이 중간 언어다. java가 파이썬이랑 통신 할 수도있고 어떤 프로그램이랑 통신할지 모르기때문에 중간언어로 전송한다. 제이슨이 다른 방식보다 경량임

Dto - Data transfer Object

디스패쳐 서블릿 마지막 정리

  • 주소 매핑 함수 호출
  • 함수의 (인수 체크)
  • 통신 바디 데이터가 있는지 확인함(없으면 인수에 넣어줄게 없다)
  • 바디 데이터가 있으면 파싱을 무조건 x-www-form-urlencoded
  • text 전송
  • json 데이터 전송

-> text나 json을 받으려면 @RequestBody를 붙인다.
버퍼로 그대로 읽는다(파싱없이)
@RequestBody는 오브젝트로 받으면 json 데이터도 파싱해준다.

profile
DataEngineer Lee.

0개의 댓글