-- 요런 블로그 어때요? 1. 조회하는 유저 아이디를 입력받고, 제외한다. SELECT * FROM Users WHERE userId != 1 ; 2. Follows 테이블에서 followUserId를 지정하고, 등록한 followerUserId를 출력한다. SELECT followerUserId FROM Follows WHERE followUserId = 1 ; 3. 조회하는 유저와 팔로우 등록된 사람을 제외한다. SELECT userId, nickname, profileImg FROM Users WHERE userId NOT IN (SELECT followerUserId FROM Follows WHERE followUserId = 1) AND userId != 1 ; 4. RAND()와 LIMIT을..
오늘 한일 '리블로그' 적용하지 못했습니다. 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..