diff --git a/Unit5/unit5.md b/Unit5/unit5.md index 9533b55..c47d610 100644 --- a/Unit5/unit5.md +++ b/Unit5/unit5.md @@ -3,43 +3,120 @@ ## ❗️ 강의 수강 여부 수강한 강의에 체크표시 해주세요~ -- [ ] 데이터베이스 실습 -- [ ] 데이터베이스 실습 2 -- [ ] SQL +- [x] 데이터베이스 실습 +- [x] 데이터베이스 실습 2 +- [x] SQL
## ❗️ notion에 키워드 정리 완료 여부 내가 notion에 키워드를 정리를 완료한 경우 체크표시 해주세요~ -- [ ] 키워드 정리 완료 +- [x] 키워드 정리 완료
## ❗️ 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)를 추가하여 해결하였다. + +
2. 데이터그립을 통해서 RDS에 접근하기 - (완료된 내용 켬쳐본 올리기) + + ![스크린샷 2023-11-02 03 48 51](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/47210491-4553-4830-9d11-cda350f54f35) -
+ 어려움을 겪은 부분 : 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에 쿼리 작성하기 - (완료된 내용 켬쳐본 올리기)
-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절-언제-어떻게-필터링-되는가 // 자세히 설명되어 있다. + -
-5. 화면 최소 3개 이상 쿼리 작성하기 - (완료된 내용 켬쳐본 올리기)
diff --git a/Unit6/unit6.md b/Unit6/unit6.md new file mode 100644 index 0000000..c011345 --- /dev/null +++ b/Unit6/unit6.md @@ -0,0 +1,53 @@ +### ⭐️ 6주차 과제 제출 ⭐️ + +## ❗️ 강의 수강 여부 +수강한 강의에 체크표시 해주세요~ + +- [x] HTTP 통신 +- [x] API +- [x] 데이터 포맷 - CSV, JSON, XML + +
+ +## ❗️ 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 +
+ +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 설계방식이 달라 아직 감이 잘 안잡힌다. 추가 공부가 필요할 것 같다. + +
+ +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) + + +
+ +4. API Sheet 작성 + (완료된 내용 켬쳐본 올리기) + + ![스크린샷 2023-11-09 04 41 41](https://github.com/yeonjinJoo/2023-Server-Study/assets/102257328/543eb813-8551-48be-a8bd-478c161dad4c) + + +
+ + + diff --git a/Unit7/unit7.md b/Unit7/unit7.md new file mode 100644 index 0000000..1ac94bb --- /dev/null +++ b/Unit7/unit7.md @@ -0,0 +1,74 @@ +### ⭐️ 7주차 과제 제출 ⭐️ + +## ❗️ 강의 수강 여부 +수강한 강의에 체크표시 해주세요~ + +- [x] Restful API +- [x] Path Variable, Query Parameter + +
+ +## ❗️ notion에 키워드 정리 완료 여부 +내가 notion에 키워드를 정리를 완료한 경우 체크표시 해주세요~ + +- [x] 키워드 정리 완료 + +
+ +## ❗️ 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) + + +
+ +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) + + +
+ +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 + + + +