프로그래밍(29)
-
[Spring/Redis] spring에서 redisTemplate을 쓰는 것과 CRUDRepository를 상속받아 사용하는 것은 어떤 차이가 있을까?
Spring에서 redis에 데이터를 저장하는 방법 중 두가지와 두가지를 섞어쓰면서 내가 겪은 상황도 같이 설명하고자 한다. 일단 redisTemplate이란 뭘까? redisTemplate은 Spring에서 따로 관리하지 않고 직접 Redis명령어를 사용한다고 보면된다. 예를 들어 우리가 아는 Redis의 CRUD 명령어나 key값을 조회하는 명령어등을 Spring에서 제공하는 메소드를 통해 직접 요청을 날린다고 보면 된다. SQL로 따지면 mybatis로 쿼리를 직접 작성하는것과 비슷하다고 볼 수 있다. CRUDRepository를 사용하는 것은 Spring에서 제공하는 JPA를 활용해 우리가 아는 익숙한 JpaRepository를 활용하는 것과 비슷하다 다만 SQL, 테이블의 형식을 갖지 않은 DB..
2023.09.14 -
[프로그래밍 언어론]구문법
구문법 문맥 자유 문법(CFG) 1. 터미널 심볼의 집합 T -> 자체로 기초 심볼, 이후로 작성법 정의X, 문법 규칙의 왼쪽에는 위치 불가능 2. 넌터미널 심볼의 집합 N -> 스트링들의 작성법이 문법 규칙에 의해 정의, 문법 규칙의 왼쪽에 위치 가능 3. 시작 심볼 S 4. 생성 규칙의 집합 유도 - 입력된 문장이나 프로그램이 문법에 맞는지 검사하는 것 - 어떤 스트링이 문법으로부터 유도 가능하면 문법에 맞는 스트링 - 컴파일러가 하나의 문장을 해석하기 위해 특정 규칙을 가지고 있어야 함 유도 방법 - 시작 심볼 S부터 시작한다. - 넌터미널 심볼 X를 생성규칙을 적용하여 Y1~Yn으로 대치한다 - 넌터미널 심볼이 없을때까지 반복 - 터미널 심볼의 경우 대치할 규칙이 없으므로 일단 생성되면 끝이며, ..
2023.04.04 -
[Java] ArrayList안에 HashMap 저장
특정 데이터를 ArrayList안에 HashMap 저장하려고 한다. data: { categories: [ 0:{ "ko_name": "책", "code": "book" }, 1:{ "ko_name": "슬픔", "code": "sadness" } ] } 데이터를 이런식으로 뽑아줘야 하는 경우가 있다고 쳐보자. ArrayList안에 hash맵이 들어가는 데이터 형식을 선언하고 이를 ko_name따로, code 따로 분리해서 저장하려 했다. (이후 이를 categories라는 Dto에 매핑해준다.) public static final ArrayList categoryCodeResponse= new ArrayList(); @PostConstruct public static void categoryMap(){..
2023.03.25 -
[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.02.14 -
[Java] Optional 사용법
자바에서 없는 값(*아무것도 할당되지 않은)을 조회하려고하면 바로 NullPointerException가 발생하며 오류를 뱉곤합니다. 그런 값이 존재하는지 매번 검사해주기 힘든데 이를 위해 존재하는 것이 Optional입니다. 참조하더라도 에러가 발생하지 않도록 해당 값을 감싸는 Wrapper 클래스다. 1. 해당 값이 있는지 조회하는 로직 - 객체 단위로 optional로 받아주면 get으로 객체를 return할 수 있다 Optional existReference = referenceRepository.findByTitle(title); if(existReference.isPresent()){ return existReference.get(); } 2. 해당 값이 절대로 null이 아닌 경우 - 해당 ..
2023.02.08 -
[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.02.04