![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/k5oil/btrKayrFfRn/9WBYddpKa4OrHZNiEfyc7K/img.png)
내가 받아보고 싶은 데이터는 회원 포인트 정보와 회원이 작성한 게시글 수였고 연관관계가 아니기 때문에 연관관계가 아닌 테이블을 join 하는 방법을 찾아야 했다. join 하는 방법은 매우 간단하다. join 결과를 받아올 클래스 생성 (Projection 클래스) join(테이블).on(조건) override fun findTopRankPoint(count: Long): List { return queryFactory.select(QPointRankingResponse( memberPoint2.id, memberPoint2.member.id, memberPoint2.point, board.member.id.count() )).from(memberPoint2) .leftJoin(board).on(memb..
Projection 게시글 전체 리스트를 조회할 때 게시글 제목, 내용, 작성자, 작성일 뿐만 아니라 집계 함수의 결과, join 한 결과를 바로 내가 만든 Response 객체로 매핑하고 싶을 수 있다. 그리고 엔티티의 속성 값이 너무 많거나 pw 같이 보안이 중요한 데이터가 담겨있는 경우 몇몇 속성을 제외한 Response 를 받고 싶을 수도 있다. 엔티티에 값을 추가하거나 개인정보가 담긴 속성을 전부 가지고 오는 것보다 내가 원하는 데이터만 가지고 올 수 있도록(SELECT 대상 지정) JPA 에서는 커스텀 객체로 바로 매핑할 수 있게 해주는 Projection 기능을 제공한다. Board Entity @Entity data class Board( var title: String, var cont..
에러가 발생한 쿼리 select point.id '포인트번호', point.point '포인트', point.member2_id '멤버아이디', count(board.id) '작성한 게시글 수' from member_point2 point, board where point.member2_id = board.member_id group by board.member_id, point.point, point order by point.point desc limit 5; 발생한 에러 [42000][1055] Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'jpa0807.p.id' which is no..
Double 연산의 문제점 @Test @DisplayName("double 연산 테스트") fun doubleCalcTest() { val a = 100.00000000005 val b = 10.00000000004 Assertions.assertThat(a-b).isEqualTo(90.00000000001) } 위의 코드를 단위 테스트 한 결과 다음과 같은 에러가 발생한다 expected: 90.00000000001 but was: 90.00000000000999 자바에서 double은 정확한 실수를 저장하지 않고 근사치 값을 저장한다. 정확한 값을 계산하기 위해서 double 이 아닌 BigDecimal 을 사용해야한다. BigDecimal 크고 정확한 실수 값을 저장하기 위해 BigDecimal 을..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/wawpq/btrI9lzBmz8/bTJY2Z0j0tyxGt0ykujDyK/img.png)
사용자 입력 값을 프론트에서도 검증할 수 있지만 백엔드에서도 검증 할 필요가 있는 것 같아서 @Valid 를 써봄. 초반에 적용이 안되서 여러가지를 찾아보고 별짓 다함 show kotlin bytecode 로 변환해서 보는데 적용이 안되는 이유가 부모 생성자가 가장 먼저 실행되야하는게 부모 생성자 호출 전 notBlank 설정 코드가 있어서 적용이 안됨,, ㅠ 근데 또 잘 작동하길래 정리해봄ㅋ @Valid 를 사용하기 위해 필요한 라이브러리 (build.gradle에 추가) implementation("org.springframework.boot:spring-boot-starter-validation") RequestDto data class BoardRequest( @field:NotBlank val ..
DefaultLoginPageGeneratingFilter GET /login 처리 별도의 로그인 페이지를 설정하지 않으면 제공되는 필터 기본 로그인 form 제공 OAuth2 / OpenID / Saml2 로그인과 같이 사용가능 UsernamePasswordAuthenticationFilter 폼 로그인을 처리하는 필터 POST /login(default) 처리 (processingUrl 변경시 로그인 주소 변경 가능) form 인증을 처리하는 필터 UsernamePasswordAuthenticationFilter 의 주요 설정 정보 filterProcessingUrl : 로그인을 처리해 줄 URL (POST) username parameter : POST에 username 에 대한 값을 넘겨줄 인자의..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/BZfCL/btrI3ujizsB/XqqNZwprHSpv370FQHvQEK/img.png)
인증 Username과 Password 인증 Session 관리 토큰 관리 (Session less) : 서버의 scale-out 을 통해 여러대의 서버로 서비스 하는 경우가 많기 때문에 서버끼리 서로 세션을 공유 및 동기화해야하기 때문에 토큰을 사용 권한 @Secured 을 활용한 권한체크 @PrePostAuthorize 을 활용한 권한체크 AOP 를 활용한 권한체크 서블릿 컨테이너 동작 request 가 threadlocal 로 실행되어 들어옴 필터를 거친 다음 DispatcherServlet은 request의 url에 따라 분기되고 실행될 메서드를 찾아 request, response 를 넘김 Spring Security 정책 적용 방식 상황에 따라 다른 Security Filter 가 실행될 수 ..
N+1 상황 (뇌피셜) 일반적인 게시판 (제목을 클릭하는,,) 은 게시글과 댓글을 한번에 가져올 필요가 없다 게시글 제목을 클릭을 하면 id 를 통해 해당 id에 해당하는 게시글과 그 게시글에 달린 댓글을 가져온다. 성능상의 문제는 없음. 게시글 한개에 댓글이 달려봤자.. 얼마나 달리겠어.. 내가 생각한 N+1 문제가 생길 수 있는 곳. .? 인스타그램처럼 무한스크롤 형식이 문제될 것 같음. 왜냐,, 한개의 인스타 글에는 사진, 글, 댓글 정보등 한번에 많은 정보를 가져와야함.. 그래서 하나의 피드에 많은 연관 엔티티가 있고 EAGER 로 한번에 가져오려고,, 할 수 있음,, 밑에처럼,, @Test fun OnePlusNTests() { val response = boardRepository.findAl..
- Total
- Today
- Yesterday
- 운영체제
- 네이버클라우드
- ORA-27125
- Travis CI
- 트랜잭션
- SpringSecurity
- TCP
- 프로그래머스
- EC2
- OS
- nginx
- ci/cd
- spring
- CodeDeploy
- JPA
- graphql
- ddl-auto
- 람다식
- Oracle
- 인덱스
- 파일업로드설정
- Til
- db
- 트랜잭션격리성
- level0
- AWS
- Java
- SpringGraphQL
- N+1
- 기술면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |