Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7주차 & 8주차] 과제 제출_주연진 #47

Open
wants to merge 11 commits into
base: yeonjin
Choose a base branch
from
105 changes: 91 additions & 14 deletions Unit5/unit5.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,120 @@
## ❗️ 강의 수강 여부
수강한 강의에 체크표시 해주세요~

- [ ] 데이터베이스 실습
- [ ] 데이터베이스 실습 2
- [ ] SQL
- [x] 데이터베이스 실습
- [x] 데이터베이스 실습 2
- [x] SQL

<br>

## ❗️ notion에 키워드 정리 완료 여부
내가 notion에 키워드를 정리를 완료한 경우 체크표시 해주세요~

- [ ] 키워드 정리 완료
- [x] 키워드 정리 완료

<br>

## ❗️ 5주차 과제
1. ERD export해서 구축된 RDS에 반영하기
(완료된 내용 켬쳐본 올리기)
![스크린샷 2023-11-02 06 21 20](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/0391857d-fc16-40b1-b1f9-1bae2e6d177b)

어려움을 겪은 부분 1: CREATE database db_test;를 하려했으나 내가 로그인한 jooyj0529에는 그런 권한이 없다는 에러를 마주했다.

해결 과정 :
1. root의 모든 권한을 jooyj0529에게 주겠다고 query를 했으나 여전히 jooyj0529에게 database를 만들 권한이 없다고 뜸.
-> 그렇다면 root에서 database를 생성하고, 그 database에 대한 모든 권한을 jooyj0529에게 설정해 주면 어떨까?

2. root 사용자로 mysql 로그인하여 database db_test 생성 & 제대로 생성되었는지 확인

![스크린샷 2023-11-02 06 32 29](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/6f4cd2dc-7e00-42c1-b730-5e3dd272de70)

3. root 사용자에서 GRANT 이용해서 joyj0529에게 db_test에 대한 모든 권한을 부여하고, FLUSH 이용해 변경사항 저장 & 제대로 저장되었는지 확인

![스크린샷 2023-11-02 06 34 56](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/eeb42d28-c48b-418d-9dbc-71f7f347ac67)

4. 해결완료! 이제 jooyj0529로 로그인하여 db_test에 table을 생성하고 삭제할 수 있다.


참고 블로그
- https://velog.io/@leesomyoung/Datagrip을-사용하여-외부에서-MySQL에-접속하기


어려움을 겪은 부분 2: userId에 AUTO_INCREMENT 설정을 해 주었더니 ( 한 유저 생성될 때마다 자동으로 id 1씩 올라가면 좋기 때문 ), Table이 CREATE 되지 않았다. 에러메시지에 AUTO_INCREMENT 되는 것은 Primary key여야 하고, auto column은 한개여야 한다고 되어있었는데 둘 다 만족을 하는데도 생성이 되지 않았다.

해결 방법 :

![스크린샷 2023-11-02 06 44 31](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/0ec863a2-530a-4891-b6ad-1cd117e8bf71)

![스크린샷 2023-11-02 06 46 16](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/1fdf1a1b-71c1-46f2-8fd3-690f0efdeb56)


Export한 Query를 살펴보니, 위와같이 Table을 CREATE 한 뒤 밑에서 Primary key를 설정해주고 있었다.
-> CREATE 할 때 AUTO_INCREMENT 되는 것이 primary key가 아니라서 문제가 발생하므로, CREATE 내부에서 userId를 primary key로 지정해주자.

![스크린샷 2023-11-02 06 48 42](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/0b1ed476-2e30-447c-ae12-a7b74b31c5d8)

위와같이 primary key(userId)를 추가하여 해결하였다.



<br/>

2. 데이터그립을 통해서 RDS에 접근하기
(완료된 내용 켬쳐본 올리기)

![스크린샷 2023-11-02 03 48 51](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/47210491-4553-4830-9d11-cda350f54f35)

<br/>
어려움을 겪은 부분 : Host를 RDS의 endpoint로 설정하고, 보안그룹 인바인드 규칙도 추가하고, User와 password도 문제가 없었는데 계속 Communication failure이 일어났다 ( 혹시 몰라 password도 바꿔보았는데 효과 X ).

해결 방법 : Driver를 mysql에서 Amazon aurora mysql로 변경하였더니 해결할 수 있었다. ( mysql -> mysql 5.1 버젼으로 바꾸어도 해결된다 )

참고 블로그
- https://bba-jin.tistory.com/55
- https://7942yongdae.tistory.com/187

3. 접근된 RDS에 쿼리 작성하기
(완료된 내용 켬쳐본 올리기)

<br/>

4. RDS에 더미데이터 반영하기
(완료된 내용 켬쳐본 올리기)

3. 접근된 RDS에 쿼리 작성하기 & 4. RDS에 더미데이터 반영하기 & 화면 최소 3개 이상 쿼리 작성하기

1. USER에 3명 추가하고 여러 방법으로 확인하기

![스크린샷 2023-11-02 05 34 13](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/1abddffb-641d-44bf-9251-c8ffa4b1e222)

![스크린샷 2023-11-02 05 34 25](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/b403b01b-6ea8-4b37-bb16-0ea7c1b5a9c1)

![스크린샷 2023-11-02 05 34 40](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/73b4c01f-4454-4bb4-99d2-8bd9bcf975ca)


2. FOLLWER에 follower, userId( 팔로워가 팔로우 하는 사람 ) 조합 2개 추가 뒤 확인

![스크린샷 2023-11-02 07 01 56](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/a36648a2-294d-43f8-8e31-caf929204fe2)

3. UserId = 1을 팔로우하는 사람들의 이름은 뭘까? 를 확인해보자
- USER table과 FOLLWER table을 JOIN 해보기

![스크린샷 2023-11-02 06 08 53](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/0ebe8f04-1038-425c-a8ea-cabe621fb4a8)

from USER as U라고 쓴 것은 줄임말을 생성한 것이다. USER의 userId 값을 지칭하고 싶으면 U.userId로 표현 가능하다. JOIN 해보니 userId = 1을 팔로우하는 사람들의 이름을 알기 위해선 F.userId = 1 이고 F.userId = U.userId로 조건을 걸어줘야겠다는 생각이 들었다.

- 이름을 가져오겠다고 선언하고, WHERE 사용해 조건 걸기

![스크린샷 2023-11-02 06 09 31](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/dcff10f9-1a38-41f6-945f-d9aff27d34c8)

select U.name으로 이름이 궁금하다고 선언하고, WHERE을 사용해 조건을 걸었더니 userId = 1 ( yeonjin ) 을 팔로우하는 사람들이 누구인지 확인할 수 있었다. ( inner join이라 WHERE이나 ON을 둘 중 아무거나 사용해도 상관 없었다 )


WHERE : join 후에 조건 필터링
ON : join 전에 조건 필터링

inner join을 사용할 때는 똑같이 작동하지만, outer join을 할 경우 ON으로 해야 원하는 결과를 얻을 수 있다.

관련 블로그
- https://velog.io/@crosstar1228/SQL-join할때-on-과-where의-차이
- https://codingdog.tistory.com/entry/mysql-on절-vs-where절-언제-어떻게-필터링-되는가 // 자세히 설명되어 있다.


<br/>

5. 화면 최소 3개 이상 쿼리 작성하기
(완료된 내용 켬쳐본 올리기)


<br/>
Expand Down
53 changes: 53 additions & 0 deletions Unit6/unit6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
### ⭐️ 6주차 과제 제출 ⭐️

## ❗️ 강의 수강 여부
수강한 강의에 체크표시 해주세요~

- [x] HTTP 통신
- [x] API
- [x] 데이터 포맷 - CSV, JSON, XML

<br>

## ❗️ 6주차 과제
1. 개발환경 구축하기 - nodejs 설치 및 사전에 올려둔 템플릿 적용하기

![스크린샷 2023-11-09 04 42 23](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/982000c0-6401-435c-820c-b772050be544)

갑작스럽게 ssh 접속이 connection time out이 일어났으나, vs-code에서 Remote-SSH: Kill VS Code Server on Host를 통해 갑작스럽게 해결되었다.
참고한 사이트 :
https://5bluewhale.tistory.com/25
<br/>

3. 자신이 설계한 DB와 연동해서 API설계 (CRUD)

![스크린샷 2023-11-09 05 29 31](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/7578e97c-9856-42db-9c54-47b91d374cc0)

고민되는 점 :
1. API 설계 할 때, user 2의 팔로워에 변동을 주고 싶으면 /user/2/follower 이렇게 작성해야 할지, /follower 로 작성하고 query로 userId = 2를 주는게 맞는지 헷갈린다.
2. 항상 /user/{userId}로 접근해야 하나? 아니면 /{userId} 이렇게 바로 접근 가능할까?
- 네이버웹툰, 인스타그램 api들을 확인해봤는데도 아직 감이 잘 안잡힌다.
- 인스타그램에서는 /유저이름/following 이런 식으로 following과 follower를 확인한다. 그에 반면, 네이버 블로그는 /AdminMain.naver로 설정하고 blogId = 유저이름 & Redirect = BuddyMe 이런식으로 설정해놓았다.
- 사이트마다 api 설계방식이 달라 아직 감이 잘 안잡힌다. 추가 공부가 필요할 것 같다.

<br/>

3. Postman으로 API 테스트
4.
![스크린샷 2023-11-09 04 29 48](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/741c5285-cbbb-44d4-953e-10a80f0d771f)

![스크린샷 2023-11-09 03 57 27](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/50ede8e8-0fa1-400c-9728-98cfa1e24ccd)


<br/>

4. API Sheet 작성
(완료된 내용 켬쳐본 올리기)

![스크린샷 2023-11-09 04 41 41](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/543eb813-8551-48be-a8bd-478c161dad4c)


<br/>



74 changes: 74 additions & 0 deletions Unit7/unit7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
### ⭐️ 7주차 과제 제출 ⭐️

## ❗️ 강의 수강 여부
수강한 강의에 체크표시 해주세요~

- [x] Restful API
- [x] Path Variable, Query Parameter

<br>

## ❗️ notion에 키워드 정리 완료 여부
내가 notion에 키워드를 정리를 완료한 경우 체크표시 해주세요~

- [x] 키워드 정리 완료

<br>

## ❗️ 7주차 과제
1. GET 메소드 함수 작성 완료하기

- index.js : 호출 시 가장 먼저 실행됨
- userRoute.js : API 지정해두는 곳 / index.js -> userRoute.js
- userController.js : userRoute.js -> userController.js / 받은 값 형식 맞는지 등의 에러 체크 / Return = SUCCESS or ERROR
- userService.js : Create, Update, Delete 비즈니스 로직 처리 / DB connection 후 userDao에 connection 전달 / Return = SUCCESS or ERROR
- userProvider.js : 데이터베이스 다루는 애한테 이런거 너가해줘! 요청하기. GET 다룸 / DB connection 후 userDao에 connection 전달 / Return = DB 값
- userDao.js : 데이터베이스 직접 만지는 애 / Query 통해 DB 값 직접 변경 / Return = DB 값

- baseResponseStatus.js : isSuccess인지, code는 무엇인지, 같이 전달할 message는 무엇인지 지정하는 곳
- ex ) SIGNUP_DESCRIPTION_LENGTH : {"isSuccess": false, "code": 2019, "message":"소개는 최대 45자리를 입력해주세요."}

![스크린샷 2023-11-23 04 17 14](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/253b080c-2fc4-40a2-9126-1562e751c52f)


<br/>

2. GET 메소드 test 진행하기(postman 이용하기)

![스크린샷 2023-11-23 01 58 57](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/0a8957fb-17e1-4fd2-93ef-8b15bf21636a)

![스크린샷 2023-11-23 01 59 48](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/1fabeb7e-898b-45e5-88f2-d14a7e189dff)


<br/>

3. SIGN UP POST 메소드 함수 작성 완료하기

userController.js의 postUsers 함수에 name, password, description이 제대로 형식에 맞는지 체크하였다.

![스크린샷 2023-11-23 04 20 10](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/10018439-b830-44c7-860d-28745c90332b)


4. SIGN UP POST 메소드 test 진행하기(postman 이용하기)

![스크린샷 2023-11-23 03 22 33](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/6a306a96-5aaf-4c2f-aee9-2d73f7e0dc3a)

Post 실행 후, Datagrip을 통해 데이터가 제대로 add 되었는지, password가 hash처리가 잘 되었는지 확인하였다.

![스크린샷 2023-11-23 03 22 46](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/513be6fe-e099-49ae-afdd-28f81166da1f)

5. Amazon ec2 ssh 연결 timeout 뜨는 이유
- 다은 선배님이 알려주셔서 해결했던..!!! 기억해놓고 싶어서 적어놓게 되었습니당.

- 이유 : Cpu 사용률이 Max를 찍으면서 강제로 연결을 끊어버린 것. 재부팅 하면 잠깐 동안은 해결되지만, 곧 다시 끊김.
t2.micro는 RAM이 1GB으로 적음

- 해결 방법 : SWAP 메모리를 지정한다. SWAP 메모리란 RAM이 부족할 경우가 있으므로 HDD의 일정공간을 마치 RAM처럼 사용하는 것이다. 이를 통해 반 강제적으로 RAM을 증설한 듯한 효과를 얻을 수 있다.

- 참고 블로그
1. https://sundries-in-myidea.tistory.com/102
2. https://repost.aws/ko/knowledge-center/ec2-memory-swap-file



<br/>