전체 글 439

몽고DB 5강. insert

몽고디비의 도큐먼트 하나는 자바스크립트 오브젝트이고 자바스크립트 오브젝트는 제이슨 오브젝트이다. 자바스크립트 오브젝트 모양은 {id:1, username:"ssar"} 이지만 {"id":1, "username":"ssar"}도 지원한다. use("blog"); const user = { "id":1, "username":"ssar" } db.users.insertOne(user); use("blog"); const userList = [ {id:5, username:"hello"}, {id:6, username:"jojo"}, {id:7, password:"1234"} ] db.users.insertMany(userList); 검색도 제이슨으로 한다 use("blog"); db.users.find({us..

DB/MongoDB 2022.04.27

몽고DB 4강. 플러그인 설치 및 사용법

얘들은 데이터베이스를 생성하지 않아도 use를 사용하면 선택된다. 하지만 use 한다고해서 데이터베이스가 생성되는게 아니다. 컬렉션까지 만들었을 때 데이터베이스가 생성된다. 실행해보면 ok가 뜨고 users 컬렉션이 생성되었다. [출처] https://cafe.naver.com/metacoding 메타코딩 : 네이버 카페 코린이들의 궁금증 cafe.naver.com 메타 코딩 유튜브 https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9 메타코딩 문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강..

DB/MongoDB 2022.04.27

블로그-V3. 조회수 카운팅

게시글 상세보기 할 때랑, 게시글 목록을 볼 때 둘 다 방문자수를 올려줘야 한다. 1. 상세보기 /user/1/post 1번 user의 visit update 2. 목록 /post/1 포스트 아이디 1로 findById 해서, 그 오브젝트에 있는 user의 id로 visit update 게시글 목록을 볼 때마다 visit을 업데이트 해야하는데 이게 맞나? 아직 save 된 게 없는데 업데이트한다는 게 이상하다. 회원 가입할 때 visit을 무조건 INSERT 시켜버리면 된다. 디폴트 데이터로! 회원가입 로직에 추가해주면 되겠다. @Transactional public void 회원가입(User user) { // 1. save 한번 String rawPassword = user.getPassword();..

Spring/Tistory 2022.04.27

몽고DB 3강. 몽고디비 컨셉

RDB와 MongoDB의 구조는 조금 다르다. RDB는 데이터베이스 안에 테이블이 있고, 테이블에는 row들로 이루어져 있다. MongoDB는 데이터베이스안에 테이블이 아닌 document로 이루어져 있다. {"id":1, "name":"홍길동"} 과 같이 json과 모양이 똑같은 중괄호 하나가 하나의 document이다. 데이터베이스는 이 document가 모인 컬렉션인 것이다. 1. 비정형 데이터 기존에 우리가 사용하던 RDBMS는 통신을 할 때 json을 자바 오브젝트로 파싱하고, INSERT문을 작성하여 DB에 save DB에서 row를 반환하면 ResultSet에 담아 자바 오브젝트로 파싱 하고 json으로 변환했다. 몽고 디비를 사용하면 json을 파싱 하지 않고 바로 DB에 넣을 수 있다. ..

DB/MongoDB 2022.04.27

몽고DB 2강. 환경변수 설정 및 실행

설치가 잘 끝났다면 cmd 창을 열어 mongo를 입력해준다. 몽고 파일을 찾지 못한다면 환경변수를 잡아줘야 한다. 설치하면서 확인했던 경로를 찾아가 보자. C:\Program Files\MongoDB\Server\5.0\bin bin 폴더 아래 실행 파일이 있다. 이 경로를 환경 변수로 지정해주면 된다. 그리고 cmd 창을 닫았다가 다시 열어서 mongo를 입력해준다. 정상적으로 실행될 것이다. 몽고 디비는 자바스크립트를 해석할 수 있어서 자바스크립트 문법도 사용할 수 있다. [출처] https://cafe.naver.com/metacoding 메타코딩 : 네이버 카페 코린이들의 궁금증 cafe.naver.com 메타 코딩 유튜브 https://www.youtube.com/c/%EB%A9%94%ED%8..

DB/MongoDB 2022.04.27

블로그-V3. Jsoup 사용하여 html 파싱하기

model에 담은 값 화면에 뿌리기 @GetMapping({ "/" }) public String main(Model model) { // 서비스가 필요없어서(CRUD의 R만 하면됨) 레파지토리 바로 호출 List postsEntity = postRepository.mFindByPopular(); model.addAttribute("posts", postsEntity); return "main"; } 모델에 담은 데이터를 머스태치에 뿌리는데 content 내용을 뿌릴때는 html을 인식하기 위해 중괄호 3개를 써줘야 한다. content에 담을 때 p태그까지 담기게 담아줬기 때문이다. 게시글 내용에는 글 뿐만 아니라 사진과 같은 다른 타입들이 들어가 있는데 메인에 모든 게시글 목록을 뿌릴 때는 글만 뿌려..

Spring/Tistory 2022.04.27

블로그-V3. css-grid 사용

블로그의 메인 페이지에는 유저 상관없이 모든 글이 뿌려져야 한다. {{>/layout/main-header}} 제목입니다 내용입니다 2022-04-27 12:48 by 유저네임 {{/posts}} {{>/layout/footer}} 전체 박스의 css부터 만들어보자 처음 써보는 display: grid;를 사용할 것이다. .my_main_list { display: grid; grid-template-columns: 1fr 1fr 1fr; } 여러 개의 데이터를 더미로 넣어두고 구조를 파악할 건데 너무 따닥따닥 붙어있다. grid-gap 설정을 줄 건데 쓰지 말라고 줄이 쳐져있다. 인터넷 익스플로러에서 안 먹기 때문이다! 근데 grid 너무 좋아서 사용할 것이다. gap에 15px만 주자. .my_mai..

Spring/Tistory 2022.04.27

블로그-V3. 스칼라 서브 쿼리로 구현한 JPA Pageable

X정리X SELECT COUNT(*) FROM post WHERE userId = 1; Integer mTotalPages( ); size = 3; totalPages = 2; = ceil(전체개수 5라면 / 3) SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1; 사이즈 = 3 (상수) 현재 페이지 = 사용자입력 (변수) 전체 페이지 = (사이즈), (전체 게시글 수) 스칼라 서브쿼리 (결과가 한건) SELECT 3 size, 0 currentPage, (SELECT COUNT(*) FROM post WHERE userId = 1) totalCount, (SELECT ceil(COUNT(*)/3) FROM post WHERE userId = 1) totalPag..

Spring/Tistory 2022.04.27

블로그-V3. 카테고리별 글 목록 보기(페이징 적용)

처리방법 1. 게시글목록보기( ) - 카테고리가 있으면 - 카테고리가 없으면 장점 : 컨트롤러에서 심플하게 호출 가능 2. 게시글목록보기( ) 카테고리별게시글보기( ) 장점 : 카테고리별게시글보기 재사용 가능 어떤 방법으로 만들든 동작을 하지만 분리시켜서 서비스를 만드는 게 좋다. 해당 유저의 블로그를 들어갔을 때 전체 글 목록이 나온다. -- 그 페이지 주인 userId = 1의 모든 게시글!! -- 카테고리 선택하면 SELECT * FROM post WHERE userId = 1 AND categoryId = 클릭한번호; 카테고리가 쿼리 스트링으로 날아가기 때문에 카테고리가 null일 때는 전체 글 목록, 카테고리를 선택하면 해당 카테고리 아이디로 SELECT 하며 뿌려주자. @Query(value ..

Spring/Tistory 2022.04.27

블로그-V3. 썸네일 지정 안했을 때 FakeImg 설정

썸네일 사진 업로드를 하지 않았을 때 데이터베이스에 어떻게 들어가는지 확인해보자. null이 들어가야 하는데 UUID만 붙어서 들어가 있다. 썸네일에 nullable=true를 설정해주지 않았기 때문이다. 파일을 넣지 않으면 FakeImg가 나오도록 설정해주자. Post 오브젝트에 thumnail을 nullable=false로 지정해주고, PostWriteReqDto에서 thumnail에 붙은 @NotNull을 지워준다. 그다음 UUID가 달리지 않게 하기 위해 PostService의 게시글쓰기 메서드를 수정해준다. // 1. 이미지 파일 저장 (UUID 변경) 후 경로 리턴 받기 String thumnail = null; if (!postWriteReqDto.getThumnailFile().isEmpt..

Spring/Tistory 2022.04.27