목록2023/12 (21)
Skipalong's tistory
오늘은 팀과제를 하면서 막혔던 부분인 칸반보드의 카드 옮기기 에 대해 정리해보겠다. 이번 팀과제에서 할 일 목록으로 예시를 들 수 있는 카드에 대한 부분을 맡아서 진행하고 있다. 기본적인 CRUD API는 비교적 쉽게 완성을 했지만 나에겐 생소한 개념인 카드의 순번을 정하고 옮겼을 때 다른 카드들도 순번이 바뀌고 또 카드가 다른 컬럼으로 갔을 때 연관된 Entity인 컬럼을 바꿔주고 거기서도 순번을 재정의하는 부분을 어떻게 접근해야 할 지 잘 몰랐다. 그래서 인터넷을 찾아보고 컬럼을 옮기지 않고 같은 컬럼내에서 옮기는 부분은 카드를 앞 순번쪽으로 이동할 때는 원래 앞에있던 카드들의 순번을 하나씩 미루고 카드를 뒷 순번쪽으로 이동 할 때는 이동할 카드의 순번 뒤에 있던 카드들의 순번을 하나씩 줄여주는 방식..
오늘은 저번 개인과제 피드백을 받았다. 그중에 페이징에 관한 내용이 있어서 정리해보겠다. 내가 구현한 페이징은 일반적인 게시판 형식으로 페이지와 보여줄 게시글 수인 사이즈, 정렬방식으로 구성된 페이징이였다. 그리고 오늘 피드백에서 새로 알게된 커서기반 페이징이란 것이 있었다. 커서기반 페이징은 페이스북이나 인스타그램 같은 SNS 같이 페이지형식으로 되어있지 않고 화면에 표시된 마지막 게시글을 본 후 그 게시물을 기준으로 다음 게시물을 계속 해서 보여주는 형식이다. 일반적인(Offset-Limit 기반) 페이징 : 방식: 특정 페이지의 데이터를 가져오기 위해 OFFSET 및 LIMIT 절을 사용하여 쿼리를 수행한다. 장점 : 간단하고 직관적인 구현이 가능한다. 단점 : 대량의 데이터를 처리할 때 성능 저하..
오늘은 스탠다드반 수업에서 Docker에 대해 알아보았다. 이전 JPA강의에서 Docker를 통해 PostgreSQL을 사용해보긴 했지만 정확히 Docker가 뭘 하는 서비스인지는 잘 알지 못했다. 이번에 알게 된 Docker에 대해 정리해보겠다. 만약 지금 Window OS를 사용하는데 운영되는 서버는 Linux OS를 사용하게 되면 개발환경의 불일치가 일어나기 때문에 둘 중 하나를 바꿔야 할 것이다 하지만 Docker를 사용하면 서로 다른 환경에서도 같은 환경을 구축할 수 있게 해준다. 양쪽에 모두 Docker를 설치 후 Docker파일을 만들고 구현하고 싶은 환경을 설정한 후 양쪽에 Docker파일을 공유하면 되는 것이다. 이것을 담는 것이 가상 컨테이너인데 가상컨테이너는 각각 독립적으로 존재하고 ..
오늘은 플러스 주차 팀 프로젝트 발제가 있었다. 이번 프로젝트는 트렐로를 만드는 프로젝트이다. 트렐로란 일종의 투두앱인데 원하는 유저들을 초대해 할 일을 공유하며 협업에 대한 부분까지 챙긴 서비스 이다. 내가 맡은 부분은 카드 관리기능으로 투두 어플로 치면 할일 목록의 CRUD에 해당하는 부분이다. 그동안 CRUD는 많이 해보아서 익숙하지만 이번 프로젝트에서는 Entity끼리 엮여있는 부분이 많아 연관관계 설정에 대한 부분이 어려운 것 같다. 컬럼과 유저 댓글등과 연관이 되어있고 작업자 할당/변경, 카드 이동에 대한 부분도 어떤 기능을 의미하는지 아직 잘 모르겠다. 일단 대략적인 CRUD 를 구성하고 트렐로서비스를 직접 경험해 보면서 감을 잡아야 할 것 같다. 팀원들과도 소통을 많이 하며 최종프로젝트 전..
오늘은 JPQL 과 QueryDSL 에 대해 정리해보겠다. JPQL 1. EntityManager.createQuery() 쿼리 문자열과 Entity를 직접 넣어서 쿼리를 작성한다. @Test public void testEmCreateQuery() { String qlString = "select u from User u " + "where u.username = :username"; Member findUser = em.createQuery(qlString, User.class) .setParameter("username", "teasun") .getSingleResult(); assertThat(findUser.getUsername()).isEqualTo("teasun"); } 2. @Query 쿼..
오늘은 SpringData JPA강의에서 배운 DynamicInsert와 DynamicUpdate에 대해 정리해보려고 한다. DynamicInsert 를 사용하면 원하는 Entity에 Insert 쿼리를 날릴 때 null 인 값을 제외하고 Insert 쿼리문이 만들어진다. 마찬가지로 DynamicUpdate를 사용하면 원하는 Entity에 Update 쿼리를 날릴 때 null인 값을 제외하고 Update 쿼리문이 만들어진다. DynamicInsert와 DynamicUpdate를 사용하게 되면 쿼리문을 null인 값을 제외하고 쿼리를 날리기 때문에 속도에서 많은 차이가 나게 된다. 지금개발하는 프로젝트에서는 Entity의 필드가 많지 않고 null인 값이 많지 않기 때문에 속도차이가 많이 나진 않지만 나중..