---
# System prepended metadata

title: '2022-07-28'

---

# 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 값



# 회고