목록2024/03 (17)
쌓고 쌓다
잘 돌아가던 최신순 조회 테스트 코드가... 갑자기 실패하기 시작한다?? 반복문을 통해 게시글을 순서대로 DB에 잘 저장도 하고 있고 작성일을 출력해봐도 먼저 들어간 게시글이 더 빠른 시간으로 출력도 된다... 뭐가 문제일까? Service단의 반환으로 받은 정렬된 게시글의 정보도 한번 출력해보자. PageResponse pageResponse = posterService.getLocationPosters(newLocation.getId(), conditionRequest); PageInfo pageInfo = pageResponse.getPageInfo(); List posters = pageResponse.getResults(); //then ... for (int i = 0; i < posters...
이상하게 댓글과 같이 생성된 엔티티의 생성일이 한국 시간이 아닌 다른 시차로 적용되는 상황이 발생했다. 댓글 엔티티를 예로 들겠다. @Entity @Data public class Comment { @CreationTimestamp private LocalDateTime regDate; } 로컬에서는 @CreationTimesetamp의 시각이 현재 시각으로 잘 나왔지만 외부 서버인 AWS EC2에서 서버를 돌렸을때는 다른 시각으로 나왔다. MySQL의 타임 설정을 한국으로 맞춰 SELECT now()의 결과로 한국 시간이 잘 나왔고 우분투 환경 또한 설정하여 잘 나왔다. 그럼 @CreationTimestamp의 설명을 잘 읽어보자... 기본 타임 스탬프는 메모리를 통해 생성된다고 나와있다. source..
https://school.programmers.co.kr/learn/courses/30/lessons/42860#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 현재 문자를 위, 아래로 움직여 최소로 만드는 방법은 forward : A에서 B, B에서 C 방향으로 정방향으로 하나씩 이동하는 횟수 backward : A에서 Z, Z에서 Y 방향으로 하나씩 이동하는 횟수 중에서 최솟값을 사용하면 된다. 최소로 좌, 우로 이동하는 방법은 DFS를 통해 구현 했다. 이때 좌, 우로 이동할때 방향을 2번 이상 트는것은 효율적이지 않아 최솟값이 나..
로컬에서는 다른 로그를 남기고 실제 운영에서는 다른 로그를 남기길 원한다면 다음과 같이 설정하면 된다. application.properties spring.profiles.active=local 값에 자신만의 환경 이름을 적어주자. 로컬 환경이라 local로 작성해주었다. 매번 입력하기 귀찮다면 다음과 같이 실행 또는 빌드시에 설정값을 지정할 수 있다. 이제 우리가 입력한 spring.profiles의 값에 따라 logback.xml의 동작을 결정할 수 있다. [%d{yyyy-MM-dd HH:mm:ss}:%-3relative]%-5level - %msg%n springProfile name="값" : application.properties에 설정한 값으로 동작할 수 있다.
Slf4j는 라이브러리 인터페이스이고, 그 구현체로 LogBack이 있는것이다. resources 아래에 logback-spring.xml 파일을 생성하고 작성하여 로그 설정을 한다. LogBack은 Error > Warn > Info > Debug > Trace 순으로 로그 레벨이 나눠진다. logback-spring.xml 의 전체 코드를 이해하기전 부분부분 이해해보자. [%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{36} - %msg%n appender : 로그의 형태, 로그 메시지를 콘솔에 출력할지 파일로 출력할지 출력 대상을 정할 수 있다. name : STDOUT이라는 이름으로 변수를 저장했다고 생각하면 된다. class : ..
https://school.programmers.co.kr/learn/courses/30/lessons/160585# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 먼저 올바른 틱택토라고 가정하고 answer를 1로 초기화한다. 다음과 같은 올바른 틱택토가 될 수 없는 상황을 통해 answer를 0으로 초기화 하자. 판을 보니 승자가 한명이 아니다. 한번씩 번갈아 놓지 않은 상황이다. 누구 하나가 연속으로 둠 X는 후공이라 O의 개수보다 많을 수 없다. 선공이 이겼을땐 후공의 개수+1이 선공의 개수가 된다. 후공이 이겼을땐 선공의 개수와 동일하..
게시글, 게시글 좋아요, 회원 테이블이 관계를 맺고있는 상황이다. 이때 다음과 같이 임시 데이터를 생성하고 필요한 필드들만 관계 매핑을하고 QueryDSL로 쿼리를 날렸다. //given Member posterLiker = new Member(); memberRepository.save(posterLiker); Poster poster1 = new Poster(); Poster poster2 = new Poster(); posterRepository.save(poster1); posterRepository.save(poster2); PosterLike posterLike1 = new PosterLike(); posterLike1.setPoster(poster1); posterLike1.setMember..
댓글과 댓글 좋아요가 1:N으로 관계를 맺고 있는 상태이다. 즉, 댓글 좋아요에서 댓글PK를 외래키로 갖고 있다. Comment @Entity @Data public class Comment { ... @OneToMany(mappedBy = "comment", cascade = CascadeType.REMOVE) private List commentLikes = new ArrayList(); } CommentLike @Entity @Data public class CommentLike { ... @ManyToOne @JoinColumn(name = "comment_id") private Comment comment; } 실행한 테스트 코드는 다음과 같다. @Test @DisplayName("댓글 삭제")..