본문 바로가기

전체 글59

[Spring] queryDsl 사용시 group_concat 적용하기 컬럼 데이터를 합쳐서 결과값을 보여줘야할 때 쓰는 SQL함수로는 group_concat과 string_agg가 있다. JPA(queryDsl) 환경에서 어떻게 해당 기능을 쓰는 방법이다. 사실 쿼리는 간단하게 날리고 데이터 전처리는 어플리케이션 단에서 해줘야한다고하지만 당장 어떻게 짜야할지 생각이 안나니 group_concat으로 데이터를 배열 형식으로 받아줬다. 해당 쿼리를 select p.post_id, u.nickname,count(distinct (c.comment_id)) as commentCount ,count(distinct(p2.pick_id)) as likeCount, group_concat(distinct (h.hashtag_name)) as hashtags from post p joi.. 2023. 2. 14.
[Java] Optional 사용법 자바에서 없는 값(*아무것도 할당되지 않은)을 조회하려고하면 바로 NullPointerException가 발생하며 오류를 뱉곤합니다. 그런 값이 존재하는지 매번 검사해주기 힘든데 이를 위해 존재하는 것이 Optional입니다. 참조하더라도 에러가 발생하지 않도록 해당 값을 감싸는 Wrapper 클래스다. 1. 해당 값이 있는지 조회하는 로직 - 객체 단위로 optional로 받아주면 get으로 객체를 return할 수 있다 Optional existReference = referenceRepository.findByTitle(title); if(existReference.isPresent()){ return existReference.get(); } 2. 해당 값이 절대로 null이 아닌 경우 - 해당 .. 2023. 2. 8.
[Spring] 양방향 Entity 저장 시 save 한번만 하도록 수정 현재 게시글 엔티티의 경우 이렇게 되어있다. Post 객체에서 해시태그를 가지고 있는 셈이다. public class Post extends BaseTimeEntity { @Id @GeneratedValue @Column(name="POST_ID") private Long postId; ... private String title; @Column(name="CONTENT") @Lob private String content; @Fetch(FetchMode.SUBSELECT) @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List hashtags = new ArrayList(); @Fetch(FetchMode.SUBSELECT) @One.. 2023. 2. 4.
[WIL] 조회수 기능 개발 1 sns를 사이드 프로젝트로 개발하고 있는데 조회수 기능을 개발할 일이 생겼다. 사실 조회수를 어떻게 측정하느냐도 중요한데 추후 변경될 수도 있으나 현재 기획은 이렇다. 사용자가 웹피드(타임라인)을 조회했을때 조회되는 게시글들은 전부 조회수+1 특정 게시글 상세보기를 한다면 조회수+1 현재 Post(게시글) 테이블이 이렇게 되어있다고 할때 조회수 테이블을 어떻게 생성하는게 좋을까 생각해보았다. 첫번째는 POST 테이블에 VIEW_COUNT 컬럼을 추가하는 것이고 두번째는 VIEW라는 테이블을 따로 생성해 POST_ID를 FK이면서 동시에 PK로 놓는것이다. 사실 처음엔 SNS라는 도메인 특성상 POST테이블은 게시글 CURD외에도 여러가지 이벤트가 일어날텐데 조회수 추가라는 이벤트까지 추가해 특정 테이블에.. 2023. 2. 4.
주피터 랩 브라우저 세팅 주피터 노트북같은 경우엔 브라우저 바꾸는 법이 많이 나와있는데 주피터랩같은 경우엔 따로 없는 것 같아서 아카이빙 아나콘다 프롬프트에 이렇게 치면 주피터 랩이 실행된다 (참고로 커널에서 작업하는거라 그런건지 프롬프트를 관리자 권한으로 실행해야한다.) jupyter-lab jupyter notebook --generate-config 1. 해당 명령어로 config 파일을 생성해준다. 사용자 -> ~/.jupyter/jupyter_notebook_config.py 이런 경로로 따라가다보면 config파일이 존재하는데 2. 해당 파일을 메모장이나 편집기로 열여준뒤에 아래 프로퍼티를 c.NotebookApp.browser = 'google-chrome' 이렇게 바꿔준다. c.ServerApp.browser = .. 2022. 9. 19.
관계 데이터 모델 ✔ 릴레이션 - 릴레이션은 행과 열로 구성돤 2차원의 테이블 - 각 집합을 구성하는 원소들의 순서쌍에 대한 집합(ex. ('a',1),('b',2)같은) - 릴레이션 용어 정리 속성: 열 튜플: 행 도메인: 하나의 속성이 가질 수 있는 값들의 집합 관계 데이터 모델 관계 DBMS 파일 시스템 릴레이션 테이블 파일 튜플 행 레코드 속성 열 필드 - 릴레이션 구성 릴레이션 스키마 : 테이블의 컬럼들 릴레이션 인스턴스 : 테이블 내의 행 릴레이션의 내포: 릴레이션에 포함된 속성들의 집합 릴레이션의 외연: 릴레이션 인스턴스는 어느 한 시점의 릴레이션에 들어있는 내용 또는 상태, 즉 전체데이터 얘기임 릴레이션의 차수: 릴레이션 스키마에 정의된 속성의(컬럼) 갯수 릴레이션의 기수: 튜플(행) 개수 - 릴레이션 특성.. 2022. 4. 22.