오늘 한일 '리블로그' 적용하지 못했습니다. MySQL 8버전 이상이거나, ORACLE을 사용했더라면 간단한 방법으로 구현할 수 있었겠지만, MySQL 5.7버전이라 순수하게 프로시저 또는 함수를 제작해 사용해야 하는 부분에서 많은 어려움이 존재했습니다. 논리적인 구조를 이해하고 있지만, 그것을 SQL로 옮기는 부분에서 막힘이 있었습니다. 결국 저녁 시간이 되어서야 리블로그 SQL 작성에 시간을 할애하여도 구현이 불가능할지도 모르기 때문에 현재까지 작성하지 않았던 테스트 코드 작성으로 선회하였습니다. API를 2개 추가하였습니다. SQL에서 RAND() 함수를 사용해 전체 유저 중에서 팔로우 되지 않은 유저를 출력해주는 A 것이었습니다. ORDER BY 절에서 정렬의 순서를 다양한 방식으로 나타낼 수 있..
== 트리거 SHOW TRIGGERS; - 현재 데이터베이스에 정의되어있는 트리거를 출력한다. drop trigger if exists TR_Posts; - TR_Posts 트리거가 존재할 경우 삭제한다. Sequelize.hook를 이용해 다른 TRIGGER를 실행할 수 있다. - TODO 다른 테이블을 Models폴더에서는 왜 참조가 안되는걸까? //postId는 변경되지 않는다. -- Posts 테이블 수정시 Images, Tags 데이터를 지우는 트리거 drop trigger if exists TR_Posts; DELIMITER $$ CREATE TRIGGER TR_Posts AFTER UPDATE ON Posts FOR EACH ROW BEGIN DELETE FROM Images WHERE po..
오늘 한일 클론코딩 백 엔드 코드의 병합을 종료하였습니다. API 문서에 작성한 모든 코드의 작성이 끝났지만, 추가적인 기능이 언제 생길지, 프론트 엔드와 조율을 통해 API가 언제 수정되어야 할지는 아직 확답을 내릴 수 없어서 언제든지 수정의 준비를 해야 할 것 같습니다. AWS EC2 서버에 코드를 올렸습니다. 이전에 작성한 미니프로젝트 서버와 클론코딩 서버를 동시에 사용할 수 있도록 pm2로 실행하였습니다. TRIGGER 작성을 완료하였습니다. Sequelize에서 테이블 Migration을 하면서 query를 작성할 수 있다는 것을 확인하고 테이블이 생성되면서 자동으로 TRIGGER를 생성하도록 설정하였습니다. 오늘 배운 것 클론코딩 백 엔드 코드 병합 AWS EC2 업로드 MySQL TRIGGE..
14. tag와 img의 기본키가 곱연산 되는 문제를 해결하자. SELECT u.userId, u.nickname, u.profileImg, p.postId, p.reBlog, p.title, i.img, p.content, t.tag, CASE WHEN p.postId IN (SELECT postId FROM Favorites WHERE userId=1) THEN "Y" ELSE "N" END AS favorite, (SELECT COALESCE(MIN('Y'), 'N') FROM Follows WHERE EXISTS (SELECT 1 FROM Follows WHERE followUserId = 1 and followerUserId=p.userId)) AS follow, (SELECT COUNT(*) ..
오늘 한일 6개의 테이블을 조회하는 SQL 문을 작성했습니다. 서브쿼리가 많이 사용돼 프로젝트가 거대해졌을 때 성능이 효율적이라고는 장담할 수 없다고 생각합니다. 우선은 단순히 SQL을 구현하는 것에도 벅차다 보니 코드 최적화에 대해서는 신경을 못 쓰고 있습니다. 코드리뷰를 하면서 어떤 식으로 개선할 수 있는지 확인해야 할 것 같습니다. 최종 프로젝트팀장에 지원했습니다. 항해를 진행하면서 남은 6주의 시간 동안 단순히 모듈만 가져와 프로젝트에 접목하는 의미 없는 기능추가로 보여주기만 좋은 기술보다는 코드를 확실히 이해하고 프로젝트의 구조를 견고하게 구성해 현업에서도 사용하는 기술 스택을 위주로 프로젝트에 녹여내고 싶었습니다. SQL 공부와 프로젝트 진행을 병행하면서 DB 통신을 최소화하는 것이 상당히 어..
오늘 한일 오랜만의 느긋한 일요일이 되었습니다. 클론코딩도 모든 구조를 정의했고 남은 것은 SQL 문을 작성하기만 하면 종료되는 문제들이기 때문에 마음 편하게 휴식을 할 수 있었습니다. SQL 공부를 하였습니다. 서브쿼리와 CRUD 기능에 대해 기존에 사용하던 것 이외의 다른 옵션들이 존재하는 것이 아닌지 찾아보았고, JOIN 부분을 다시 보았습니다. 프로젝트를 진행하면서 가장 많은 문제는 여러 테이블을 가지고 오면서 원하는 결괏값을 도출해내는 것인데 그런 관계를 정의하는 가장 중요한 것은 JOIN을 사용해 다른 테이블을 참조하는 것으로 생각하였습니다. AWS CCP 공부가 점점 밀리고 있습니다. 눈앞에 있는 공부해야 할 것들이 많아지다 보니 시간을 할애하는 것이 부족해진 것 같습니다. 평일이라도 조금씩..
서론 7/9 ~ 7/15의 미니프로젝트 기간이 종료되었습니다. 7/16 ~ 7/22의 클론코딩 기간이 시작되었습니다. 풀 스택 개발자 튜터님의 면담이 진행되었습니다. 일정 7/9 (금) ~ 7/15 (목) : 미니프로젝트 진행 7/13 (화) : 1회 협력사 발표 진행 7/16 (금) ~ 7/22 (목) : 클론코딩 진행 5주 차 미니프로젝트 7/9 ~ 7/15 미니프로젝트 주차가 종료되었습니다. 핀터레스트를 모티브로 한 클론코딩으로 진행되었습니다. 코드 최적화를 위주로 작성하였습니다. 총 17개의 API를 구현하였습니다. Sequelize와 mysql 모듈을 이용한 MySQL DB 통신을 진행하였습니다. AWS EC2에 미니프로젝트 서버를 업로드 하였습니다. Notion : https://www.not..
오늘 한일 클론코딩이 시작된 날 구조를 확실히 작성해놓았기 때문에 많은 수정 없이 프로그램 작성이 시작되었습니다. localStorage에서 사용하던 jwt Token 값을 Cookie로 변경해 프론트 엔드에서 불편하지 않도록 통신을 할 수 있게 만들었고, 변경된 방식에 맞게 Middleware를 수정하였습니다. 이메일, 비밀번호, 닉네임에 대한 정규표현 식을 작성하였습니다. 특수문자처리와 글자의 개수 등 고려해야 할 조건이 많았기 때문에 의외로 시간을 많이 잡아먹은 것 같습니다. MySQL에서 Follow를 추가하기 위해 "팔로우하려는 유저가 존재하는지", "이미 팔로우 되어 있는 것이 아닌지"를 확인하는 방법에서 SQL을 작성하는 부분에서 테이블을 2개 참조하며 결과가 1개가 나와야 한다는 것이 애매..
TODO - 만약 데이터가 없을 때 NULL을 넣는 방법 - 리블로그는 없을 경우 NULL로 삽입한다. - models를 npx로 가져왔을 때 지금 생성된 테이블을 기준으로 models가 만들어질 수 없는가? 이번프로젝트의 코드최적화 방법 - Router를 메인에서 줄이기 - Router에서 동일한 url에 .get과 .post를 route를 사용해 메소드별로 분류하는 것 - 비밀번호를 .env에 저장하는 것 이번 프로젝트의 목표 - 무슨 기술을 할지, 어떤 방향성을 가지고 갈 지 DB에서 외래키를 설정할 때 동일한 기본키를 설정해도 가능하다. 트리거 : 누군가 지정한 TABLE에 데이터를 넣을 경우 실행하도록 설정 (기능 중 하나) ex) 누군가 Favorites에 데이터를 추가할 경우 자동적으로 Al..