# 2022-07-28 # 계획 1. RDS MySQL 연결하여 배포하기 2. 김영한님 강의 마저 듣기 # 공부 ## 과제에 답변하기 ❓ **Why: 과제 제출시에는 아래 질문을 고민해보고 답변을 함께 제출해주세요.** 1. 수정, 삭제 API의 request를 어떤 방식으로 사용하셨나요? (param, query, body) - content 라는 글 내용의 크기가 URI 형식을 통해 보내기에는 제한될 수 밖에 없다고 판단되어 JSON 형식을 통하여 body 방식을 사용하여 보냈습니다. 2. 어떤 상황에 어떤 방식의 request를 써야하나요? - resource를 식별해야 하는 상황에서는 param 방식이 좋고, 정렬이나 필터링을 해야하는 상황에서는 query 방식이 좋다고 한다. body 방식을 사용할 때는 인수에 `id={userid}`처럼 키-값 구조가 없거나 직렬화된 이진 데이터와 같이 사람이 읽을 수 없거나 매우 많은 수의 인수로 인하여 URI길이의 제한이 걸릴때 사용한다. 3. RESTful한 API를 설계했나요? 어떤 부분이 그런가요? 어떤 부분이 그렇지 않나요? - URI를 표현할 때, 동사를 사용하지 않고 복수형 명사를 사용하고 소문자를 사용했습니다. HTTP 요청 메세지에서 Host를 명시하여 목적지를 설명해야 Self-descriptive를 만족한다고 읽은 것 같으나 이를 지키지 못한 것 같다. 4. 적절한 관심사 분리를 적용하였나요? (Controller, Repository, Service) - PostController, PostService, PostRepository로 나누어 관심사 분리를 적용하고 각각에 필요한 책임을 나누었습니다. 5. 작성한 코드에서 빈(Bean)을 모두 찾아보세요! - PostController, PostService, PostRepository, Post(Entity) 6. API 명세서 작성 가이드라인을 검색하여 직접 작성한 명세서와 비교해보세요! - ## 팀과제 정리하기 🔐 JPA 가 무엇인가요? JPA는 기술 명세입니다. Java Persistence API의 약자로, **자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스**를 말합니다. 기술 명세이므로 구현체는 없으며 이를 구현한 것 중 하나가 Hibernate입니다. 🔐 Controller, Service, Repository 가 무엇인가요? 💡 restAPI의 put 과 patch 는 어떤 차이점이 있을까요? 어떤 경우에 사용하면 좋을까요? 🔐 우리가 브라우저에서 구매한 도메인 주소를 입력하면 만들어 놓은 aws EC2 서버까지 전달이 되어서 해당 서버에게 요청을 보낼 수 있습니다. 이 과정이 상세하게 어떻게 진행되는지 그림으로 한번 그려볼까요? DNS(Domain Name System)란 인터넷 전화번호부이다. DNS는 범국제적 단위로 웹사이트의 IP주소와 도메인 주소를 이어주는 환경/시스템이다. 클라이언트 브라우저에서 웹사이트(google.com)를 호출하게 되면 실제 서버가 있는 IP주소는 모르기 때문에 DNS서버에 `google.com의 IP 주소는 무엇이니?`하고 물어보고 받아 브라우저에서 사용할 수 있게 되는 것이다. 보통 인터넷 사용자들이 사용하는 DNS서버는 ISP(통신사)에서 운영하는 DNS서버를 사용하며, 이 DNS 서버는 효율적인 전산처리를 위해 일정 기간 캐시에 검색 기록을 저장해둔다. ## Layered Architecture 그림 ![](https://i.imgur.com/DP2oap4.png) [DTO 사용범위](https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/) ## ec2 한방에 세팅하기 ``` https://s3.ap-northeast-2.amazonaws.com/materials.spartacodingclub.kr/webplus/week01/initial_ec2.sh ``` ``` # UTC to KST sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime # python3 -> python sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 # pip3 -> pip sudo apt-get update sudo apt-get install -y python3-pip pip3 --version sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 # port forwarding sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000 # MongoDB - install wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list sudo apt-get update sudo apt-get install -y mongodb-org sudo mkdir -p /data/db # MongoDB - run sudo service mongod start sleep 7 netstat -tnlp # MongoDB set user, set conf file mongo admin --eval 'db.createUser({user: "test", pwd: "test", roles:["root"]});' sudo sh -c 'echo "security:\n authorization: enabled" >> /etc/mongod.conf' sudo sed -i "s,\\(^[[:blank:]]*bindIp:\\) .*,\\1 0.0.0.0," /etc/mongod.conf sudo service mongod stop sudo service mongod start sleep 5 netstat -tnlp ``` ``` sudo apt-get update sudo apt-get install openjdk-11-jdk java -version ``` ## 우분투 포트 확실하게 죽이는법 조회 ``` netstat -nap|grep 8080 ``` 포트 pid 조회 후 바로 사용하여 죽이기 ``` sudo kill $(sudo lsof -t -i:8080) ``` ![](https://i.imgur.com/MWrwzm8.png) ## iptable 관리 ### 포트포워딩 확인 ``` sudo iptables -t nat -L --line-numbers ``` ### 포트포워딩 설정 ``` sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 ``` ### 포트포워딩 삭제 ``` $ sudo iptables -t nat -D PREROUTING num* ``` num : 포트포워딩 확인을 통해 나온 값의 num 값 # 회고