목록전체 글 (163)
거누의 개발노트
현재 아래와 같이 작성되어있는 코드를 QueryDSL을 이용해서 분기처리를 최소화하고, MySQL Full Text Search를 적용해보려고 한다. @Transactional public PageBoardResponseDto getBoardList(FilterEnum filter, String keyword, Pageable pageable, String email, SubEnum sub) { Page boardPage; if(sub.equals(SubEnum.title)){ if(Objects.equals(filter, FilterEnum.challenge)) { log.info("title, challenge search"); boardPage = boardRepository.findByTitleC..
QueryDSL 강의를 듣는 중에 assertThat().extracting().containsExactly() 해당 코드를 작성하면 containsExactly에서 컴파일 에러가 발생한다. 실행 시켜보면 아래와 같은 에러 메시지를 확인 할 수 있다. java: cannot find symbol symbol: method containsExactly(java.lang.String,java.lang.String) location: class org.assertj.core.api.AbstractObjectAssert 원인을 찾아보자. 이렇게 써보니까 빨간불은 사라졌다. extracting 메소드가 단일 인자를 받지 못하는 것 같다. 강의에서는 되었었는데, 버전이 바뀌면서 단일개는 못받는 것일까? @Check..
원인 firstResult/maxResults specified with collection fetch; applying in memory! 라는 경고가 떴다. 동작에 문제는 없지만 메모리 낭비를 한다는 내용인 것 같다. 경고를 보아 아마 fetch join 시 offset limit 을 걸어둔 것과 연관이 있는 것 같다. 찾아보니 위 경고가 의미하는 것은 fetch join 과 pagination 을 같이 할 시 "모든 데이터"를 전부 가져와 메모리에서 걸러낸다는 것이다. @EntityGraph(attributePaths = {"user", "boardTodo"}, type = EntityGraph.EntityGraphType.LOAD) Page findByTitleContainingAndCategor..
문제 발생 배경 @ApiOperation(value = "전체 게시글 목록 조회") @ApiImplicitParams({ @ApiImplicitParam(name = "filter", value = "카테고리(daily/challenge/my)", required = false, dataType = "string", paramType = "query"), @ApiImplicitParam(name = "keyword", value = "검색 키워드", required = false, dataType = "string", paramType = "query"), @ApiImplicitParam(name = "pageable", value = "페이징 값(size, page, sort)", required = ..
프로젝트가 진행되고 일주일이 지나서야 블로그를 적을 시간이 났다. 내가 맡은 기능은 로그인/회원가입, 소셜 로그인/회원가입 기능을 맡았다. 많은 구글페이지를 찾아봤지만, 아래만한 곳이 없었다. https://deeplify.dev/back-end/spring/oauth2-social-login#%EC%A0%84%EC%B2%B4-%EC%8B%9C%ED%80%80%EC%8A%A4-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8 [Spring Boot] OAuth2 소셜 로그인 가이드 (구글, 페이스북, 네이버, 카카오) 스프링부트를 이용하여 구글, 페이스북, 네이버, 카카오 OAuth2 로그인 구현하는 방법에 대해서 소개합니다. deeplify.dev 해당 블로그를 클론 코..
Github Action을 이용해서 Spring Boot(Gradle) 웹 어플리케이션을 자동으로 빌드해주는 과적을 작성하려고 한다. 매번 build를 하고, 빌드된 jar파일을 EC2 서버에 접근해서 올리는 번거로운 작업이 사라지게 되어서 개발에만 집중할 수 있게 된다. [S3 버킷 만들기] 이름만 정하고 나머지는 기본 설정값으로 만들기 [AWS IAM 사용자 만들기] - 권한추가하기 AmazonS3FullAccess AWSCodeDeployFullAccess AWSCodeDeployRole 권한 위에 3개 추가 키 잘 저장해 놓기 [AWS IAM 역할 만들기] 1. CodeDeploy 용 역할 AWSCodeDeployRole 2. EC2 용 역할 AmazonS3FullAccess AWSCodeDepl..
텔넷 텔넷(telnet)이란 사용자의 컴퓨터에서 네트워크를 이용하여 원격지에 떨어져 있는 서버에 접속하여 자료를 교환할 수 있는 프로토콜을 말한다. 텔넷은 보안상 문제가 있기 때문에, 텔넷 대신 SSH를 많이 사용한다. 텔넷의 포트 번호는 23번이다. 클라이언트에서 입력한 비밀번호를 변형없이 전송하기 때문에, 데이터를 관찰하는 누구라도 데이터(비밀번호)를 볼 수 있다. SSH SSH는 Secure Shell의 줄임말로, 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜 양방향의 모든 트래픽을 암호한다. ( 출발지, 목적지 ) 안전하게 정보교환이 가능해 널리 사용된다. 22번 포트를 사용한다. SMTP 단순 메일 전송 프로토콜(Simple Mail Transfer Protocol) 25번 포트를 사용한다..
JPA에서는 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두 가지 방식이 있다. 이 두 가지 방식을 간단하게 설명하면 즉시 로딩은 데이터를 조회할 때 연관된 데이터까지 한 번에 불러오는 것이고, 지연 로딩은 필요한 시점에 연관된 데이터를 불러오는 것이라고 할 수 있다. 즉시로딩(EAGAL) @Entity public class Member { @Id @GeneratedValue private Long id; private String username; @ManyToOne(fetch = FetchType.EAGER) //Team, 즉시로딩 @JoinColumn(name = "team_id") Team team; } 여기서 Member 객체를 조회한다면, //멤버를 조회하는 쿼리 se..