DB

Jung·2021년 3월 11일
0

수업

목록 보기
4/20

lecture

log.debug 정도로 개발용으로 쓰자. 루카스 logger 사용하기

redirect, return, forward의 차이?

return: 컨트롤러가 모델을 담아 뷰를 요청하는 것이다.
return "user" 하면 user에 모델을 담아 리턴하는 것이다.

redirect: http 302 개념이다. 브라우저가 요청후 처리하고 이동.
301은 permanent. 다음부터는 거기로 가라. (ex: 영구적인 변경으로 인한 경우)
302는 temporary. 잠깐 이유가 있어서 여기로 보냈으니 여기서 찾아봐.
redirect 301을 하면 캐싱이 될 확률이 높다. 처음부터 브라우저가 저기로 보내니까 다음부터는 바로 저기로 간다.
우리가 원하는 동작은 302이다. 일단 갔다가 거기로 가는 것이니까.

forward: java servlet개념이다. 안 쓰는 것을 권장한다!
forward "/user"하면 서블릿 서버가 user 콘트롤러를 직접 호출한다. 내 콘트럴러 끝난 후 user콘트럴러를 또 호출하는 것이다.
(서블릿이란? 아래로..)
코딩으로 한다면 userController.read();의 메소드 직접 호출과 유사하다. 한 콘트롤러 내부에서 다른 콘트롤러를 호출하면 안티패턴이기 때문에 하면 안된다. 콘트롤러가 서로 참조하면 무한 루프 걸릴 수도 있다.
이것보다는 복잡한 로직은 서비스 계층을 만들어서 해결하자.

Domain, Entity, VO, Service, Repository ?

DDD는 Domain driven ~~ .
각각의 책임과 역할을 분담하기 위해서 domain에 로직을 넣을 수도 있다. 나눌 필요가 있을 때 나누면 되고, 두 줄짜리 코드를 위해서 나눌 필요는 없다.
Domain:
Repository: user을 permanent한 객체로 만들기 위한 인프라 컨셉이다. DAO와 비슷한 역할이지만, 철학이 다르다.
(회원가입도 도메인의 일부일 수 있고..
도메인은 우리가 해결하고자 하는 문제의 범위를 도메인이라고 한다. 홈쇼핑이라고 하면 홈쇼핑이 도메인이다. 이것을 작게 쪼개 하위 도메인을 만들어, 결제, 회원가입, 배송, 포인트, 쿠폰 도메인이라고 부른다. 이것들이 도메인 폴더에 들어갈 것이다. )

DTO DAO: (data transfer ~)구닥다리지만, 자주 쓰인다.
DDD와 다른 계층의 이야기이고, 조금 오래된 컨셉이다.
DTO는 protocol에 가까운 개념이다.
dao 는 db에서 값을 읽어와서 dto에 넘겨준다.
User: DTO로부터 값을 읽어서 User에 넘겨준
View: User로부터 읽어서 DTO를 거쳐서 VIew를 넘겨준다.
DTO는 다른 계층의 서로 다른 데이터 포맷을 갭을 메꿔주는 것이다.
DAO가 PO가 없다. 왜냐면 DTO로 읽어서 User로 전달해주는 거

index.html은 왜 index.html일까?

주소를 생략하고 local:8080으로 하면 index.html이 뜬다. 일종의 웰컴페이지라고 할 수 있는데 왜 index.html일까?

팀 버너스리 가 이렇게 만들었다. http 1.0을 문서로 관리하던 시절이라 루트 경로로 가면 목차가 나와야하기 때문이다. 목차 이름이 index이다. (지금이랑은 내용이 맞지 않기 떄문에 지금으로서는 좋지 않을 수도 있다..)

getter와 setter

getter가 없으면 해당 값이 뷰에 안보인다.
setter가 없으면 request에서 읽어올수가 없어 컨트롤러에 못 가져온다.
Lombok 쓰면 getter setter 알아서 만들어주니까 이 사실을 모른다.

ModelAndView

ModelAndView가 한꺼번에 있는 건데 model선언 후 view 리턴하는 것과 동일한 구닥다리 코드이다.

servlet

내장형 탐캣 웹서버가 서블릿을 돌린다. 톰캣이 서블릿 컨테이너이면서 웹서버이다.
서블릿 컨테이너 안에 스프링이 담겨있고, 스프링 안에 여러 콘트롤러들이 담겨있다. http request가 살짝씩 변형, 처리되어 request덩어리가 위에서 아래로 전달된다. 그럼 맨 아래 컨트롤러부터 슾링, 서블릿, 탐캣 등으로 response를 던져준다.
서블릿의 실체는?

JSP

html안에 자바를 집어넣는게 jsp이다.
가독성이 안좋다.
이것을 개선해서 다른 것을 생각해냈다.

servlet

자바 안에 html을 집어넣는것이다. 이것이 서블릿이다.
역시 가독성이 안좋다.
서블릿을 대신 코딩해주는 것이 스프링 프레임워크다.
j2ee를 개선한 ~~를 개선한 스프링을 개선한 스프링부트가 우리가 현재 쓰는 것이다.

xml을 읽어주는 것이 톰캣.

Optional

get쓰지 말아라. userRepository.findByID().get();하면 안딘다.
orElseThrow...?

예외처리는 간단하게 처리하자

https://cheese10yun.github.io/spring-guide-exception/

코딩 컨벤션

https://naver.github.io/hackday-conventions-java/

자동 콬드 실행

https://crontab.guru/
매 ~ 초/시/분/일/월 등마다 해당 코드를 실행하고 싶을 때

클라우드 디자인 패턴

http://en.clouddesignpattern.org/index.php/Main_Page

AWS

https://cs-stu1.signin.aws.amazon.com/console
사용자이름, 비번치고
계정실습권한뿐이다.

iam 에서
users 들어감
사용자 추가
사용자 이름 입력후 aws management console 엑세스 선택,
콘솔 비밀번호는 자동생성이 편하니 체크.
비밀번호 재설정 필요는 체크해제.

그룹에 사용자 추가 하는데, students 그룹에 추가한다.
태그추가는 패스
사용자 생성하면 성공 뜬다.
csv다운로드 하면 된다.

iam이 사용자 관리하는 서비스이다. 이메일로 가입한 계정말고 iam을 사용해줘야 한다.

서버 만들기

다운받은 csv파일에서 비번 확인하고
만들어진 사용자, 비번으로 로그인

ec2 로 들어가서

  1. launch instance
    우분투로 만들어라

  2. 인스턴스생성
    두번째 4g 무료평가판 사용 .

  3. 인스턴스 세부 정보 구성
    t4g마이크로로 df

  4. Name jung-test-server
    (environment dev
    ~~이건 못함)

  5. 새보안그룹 생성
    보안 그룹 이름 적고..
    jung-web-server-sg
    ssh tcp 22 0000
    ssh 꼭 선택

  6. 새 키 페어 생성

키 페어이름을 중복되지 않게 생성
키 페어 다운로드. 이거 두번 다운 안되니까 삭제되면 다시는 그 서버에 접속 불가하다. 프라이버시 때문에 aws도 우리 서버에 접속 못하기 때문에 다신 못한다.
다운받은 키파일같은거 다운로드 폴더에 두지 말고 따로 관리해라

공부용이니까 우분투로 만들어라
실제 회사에선 아마존 리눅스 버전 2를 사용해라
(iam amazon linux2의 arm cpu를 선택)

작업-연결 하면 어떤 커맨드 사용되는지 알려준다.
연결

서버 터미네이트해라.


ssh

우리의 우분투 리눅스에는 패스워드가 없다.
패스워드를 만드는건 안티패턴이고.. 하지마라.
ssh들어올때 key파일로 들어오는데, 패스워드 만들면 ssh에서 id password로 들어올수 있는데, key파일을 외울 수 있는 사람은 없으므로...

블랙아웃: 요청은 가는데 응답이 없다가 타임아웃되는 것.
포트를 보안 그룹에 설정해야한다.
웹서버를 열 때 웹서버를 쓰려면 웹서버는 요청을 받는 상태이므로 인바운드를 열어줘야한다.

유저-> 트래픽 -> Ec2를 감싸는 Vpc망, 그 안쪽에 Ec2의 방화벽인 Security Group
(AWS 안에 VPC 안에 Subnet 안에 Security Group안에 E2c)

보안 그룹-
인바운드 규칙 편집:

HTTP 모두 다 0.0.0./0
아웃바운드 규칙: 모든 트래픽에 열려있고, 우리가 신경쓰지 않는다. 아웃바운드를 막아버리면 통신이 안나간다. 내 서버가 인터넷을 못한다. 기본적으로 아웃받운드를 열어줘야한다.
들어올 때 (패킷을) 검사하고, 나갈때는 검사하지 않고 bypass하도록 보안 규칙을 설계했다. 반대로 ping명령을 보낼 때는 안쪽에서 바깥으로 나가는데, 나갈 때 검사를 한다. example.com에서 안쪽으로 들어올때, 나갈 때 이미 검사를 했기 때문에 들어오는 것을 검사하지 않는다.

인바운드에서 열어주면 통신이 된다. 웹서버가 안돌아가면 인바운드를 열어주라.

서버에서 에디터로 쓸만한게 vi랑 비주얼 스튜디오. vi를 공부하면 좋다.

인스턴스에 연결

  • ec2인스턴스 연결

-ssh클라이어언트
에서 시키는대로 하면 됨.
cd ./Downloads가면 key-pair 있음
chmod 400 jung-key-park.pem
그 후 퍼블릭 DNs를 사용하여 인스턴스 연결(aws에서 시키는것 복붙)
sudo apt update

apt명령어는 리눅스에서의 다운,압축풀고 등의 명령을 한번에 해준다.
sudo

웹서버는 웹 문서를 건네주는 역할을 하는 서버인데,
aws에 아파치를 깔았기 때문에 퍼블릭 dns로 접속시 아파치의 index.html이 띄워진다.
우리가 만든 프로그램을 실행시키려면.. 깃허브를 클론해와서 ~~


S3
버킷만들기
버킷에 대한 퍼블릭 엑세스 차단 설정 - 체크 모두 해제- 이해했어요 체크
기본옵션으로 버킷 생긴다.

s3버킷에 파일 업로드 가능한데, 호눅스는 이미지를 업로드했다.
업로드 됐다.
업로드된 파일에 url이 하나 있다. 보이지는 않는다.
파일 권한 - 객체작업- 퍼블릭으로 설정
하면 보인다. 인터넷으로 쓸수있는 이미지 저장소를 얻은 것이다.

아까의 index.html에 로 이미지 삽입할 수 있다.
새로고침하면 이미지가 된다.


Elastic Load Balancer에 서브넷 4개를 만든다.
위에 두개엔 web(ec2담당), 아래 두개엔 db(rds를 하거나 ec2 db로 설정 가능)를 넣는다.
미디어 서버가 필요한데 S3가 미디어 서버라서, web 2개에 각각 연결된다.
elasticache(redis)-> session db로 퍼주는 기술이 session clustering이다.
로그가 필요한데, db 로그가 쌓이는데 ....

그 외 다양한 aws 서비스를 붙여나감ㄴ 된다.
데이터 분석한다고 하면 아데나 쓰고,, 그 외 필요한 서비스들이 이미 aws에는 만들어져있기 때문에 그것을 활용해 쓰면 된다.


아파치랑 스프링을 연동
보안그룹 인바운드규칙
사용자 지정 tcp 80 - 000/0

was가 8080으로 서비스되는데, 그 앞단에 엔진x가 80으로 서비스되는데

gitclone해와서

8 sudo apt install apache2
9 ls
10 apt install apache2
11 sudo apt install apache2
12 ls
13 sudo service apache2 status
14 curl http://localhost
15 ping exmaple.com
16 cd /etc/apche2
17 cd /etc/apache2/
18 ls
19 cd /ecc/
20 ls
21 cd /ec/
22 cd /etc/
23 ls
24 cd /var/www/
25 ls
26 cd html/
27 ls
28 rm index.html
29 pwd
30 ls -l
31 sudo rm index.html
32 sudo vi index.html
33 history

38 cd
39 git
40 git clone https://github.com/spring-boot-qna
41 git clone https://github.com/honux77/spring-boot-qna
42 ls
43 cd spring-boot-qna/
44 ls
45 git switch honux77
46 ls
47 java
48 sudo apt install openjdk-8-jdk
49 sudo apt update
50 sudo apt install openjdk-8-jdk
51 java
52 javac
53 javac -version
54 ls
55 ./gradle build jar
56 ./gradlew build jar

57 ls
58 ls build/libs/
59 java -jar build/libs/qna-0.0.1-SNAPSHOT.jar
60 ls
61 ./gradlew bootrun
62 history


제3의방법

scp -i ~/temp-keys/honux-2103311.pen qna-spring-boot


톰캣은 자바 파일을 실행시켜주는 프로세스다.
아파치는 외부 통신을 받아서 html을 건네주는 것이다.

아파치는 정적인 것을 처리하고
톰캣은 둘다 처리 가능한데, 톰캣에서 둘다 처리하기 어려우니까,

아파치는 http요청에 대해 이를 해석하고 이에 해당하는 문서(html)을 보내주는 역할이다. http 통신이란, 네트워크 단에서 많은 일이 일어난다.
ssh 프로그램을 설치하지 않으면 ssh 접속이 불가능하다. 포트가 문제가 아니라

ec2는 컴퓨터이다.

ssh란 결과를 ls에 반환해준다.
이 관계가 아파치와 톰캣의 관계다.
ssh는 프로그램이고, 아파치도 통신을 하는게 메인인 프로글매이다. 톰캣의 역할으 ㄴ웹서버 어플리케이션을 돌려주기만 하는 역할이었고 통신은 ㅏ파치를 토ㅗㅇ해 했다. ssh를 하고ls로 결과를 받아오는 것처럼 htjml문서를 가져온ㄴ 것이다.

톰캣은 반드시 서블릿 엔진을 거쳐야한다.

0개의 댓글