본문 바로가기

전체 글

20231211- QueryDSL사용해보기 검색 기능을 구현해 보던 도중 QueryDSL을 이용해서 쿼리문을 작성해 보기로 했다. 아직 완벽하게 이해하고 사용하고 있는 것은 아니지만 몇 번 사용해보다 보니 느낀 게 훨씬 작성이 편하고 보기 좋다는 것이다. @Repository @RequiredArgsConstructor public class PostQueryRepository { private final EntityManager em; private final long limit = 10L; public List findAll(BooleanBuilder builder){ JPAQueryFactory query = new JPAQueryFactory(em); return query .select(QPost.post) .from(QPost.post.. 더보기
20231207 - Spring으로 MultipartFile 받기 게시글 CRUD 기능을 구현하면서 텍스트만 받는게 아니라 이미지파일도 같이 받을 수 있는 기능을 생각해야 했다. 일단 이미지파일을 저장할 DB는 팀원분이 S3를 이용한 방법으로 기능을 구현해 주셨다. 우선 컨트롤러를 살펴보자면 // PostController.java @PostMapping("") public ResponseEntity createPost( @ModelAttribute PostRequestDto postRequestDto, // @RequestBody -> @ModelAttribute @AuthenticationPrincipal UserDetailsImpl userDetails ){ ... } 원래는 @RequestBody 어노테이션으로 json형태로 데이터를 받았지만 MultipartF.. 더보기
20231206 - @CreatedDate, @LastModifiedDate 프로젝트에서 게시물 CRUD 기능 구현을 하면서 게시글의 작성 시간과 수정 시간을 DB에 저장하기 위해 Timestamp 클래스를 따로 만들어서 필요한 Entity에서 사용하기로 했다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class Timestamped { @CreatedDate @Column(updatable = false) @Temporal(TemporalType.TIMESTAMP) private LocalDateTime createdAt; @LastModifiedDate @Column @Temporal(TemporalType.TIMESTAMP) private LocalDateT.. 더보기
20231205 - 프로그래머스/42748 https://school.programmers.co.kr/learn/courses/30/lessons/42748 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때 k 번째 있는 수 구하기 제한 사항 array의 길이는 1이상 100이하 array의 각 원소는 1이상 100이하 commands의 길이는 1이상 50이하 commands의 각 원소는 길이가 3 예시 array : [1, 5, 2, 6, 3, 7, 4] commands : [[2, 5, 3], [4, 4, 1], [1.. 더보기
20231204 - 프로그래머스/12915 https://school.programmers.co.kr/learn/courses/30/lessons/12915 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 문자열로 구성된 리스트 Strings와 정수 n이 주어졌을 때, 각 문자열의 n번째 인덱스를 기준으로 오름차순 정렬하기 제한 사항 strings는 길이 1 이상, 50 이하인 배열 strings의 원소는 소문자 알파벳 원소는 길이 1 이상, 100이하인 문자열 모든 strings의 원소의 길이는 n보다 큼 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에.. 더보기
20231201 - Dto 테스트 프로젝트를 완성 후 진행하지 않았던 테스트 코드를 작성해 보았다. 우선 Dto 클래스들의 테스트 코드를 작성했는데 여기서 생각해야 할 점이 데이터가 Json형식으로 @RequestBody를 통해 들어온다는 점과 유효성 검사가 잘 이루어지고 있는지를 체크해야 했다. @Test @DisplayName("비밀번호 변경을 위한 Dto") void test2() throws Exception{ ObjectMapper objectMapper = new ObjectMapper(); //given String requestBody = "{\"originPassword\" : \"12345678\"," + "\"newPassword\" : \"123456789\"," + " \"newPasswordCheck\" : \".. 더보기
20231201 - 프로그래머스/12926 https://school.programmers.co.kr/learn/courses/30/lessons/12926 문제설명 주어진 문자열의 알파벳을 주어진 숫자만큼 밀어낸 결과를 출력하기 제한조건 공백은 밀어도 공백이다. 주어진 문자열은 대문자, 소문자, 공백으로 이루어져 있다. 문자열의 길이는 8000 이하 n은 1~25의 자연수 예시 알파벳 : "a B z" 숫자 : 4 결과 : "e F d" 풀이 과정 처음 문제를 보고 풀었을 때에는 for문을 통해 하나씩 가져온 알파벳들의 아스키코드를 단순히 n만큼 증가시키는 코드를 작성했다. 하지만 이렇게 풀 경우, ' Z ' 와 ' z '를 넘어가면서 알파벳이 아닌 값이 나오게 된다. 그래서 if문을 통해서 구간을 나눠주었다. 문자열은 알파벳 혹은 공백이고 n.. 더보기
20231129 - UserDetails, UserDetailsService 인증 처리를 구현하면서 로그인한 사용자의 정보를 쉽게 받아오기 위해 @AuthenticationPrincipal 어노테이션을 사용했고, UserDetailsImpl 클래스를 만들어 데이터를 담아보았다. 1.UserDetailsImpl.java //UserDetailsImpl.java public class UserDetailsImpl implements UserDetails { private final User user; public UserDetailsImpl(User user) { this.user = user; } public User getUser() { return user; } @Override public String getPassword() { return user.getPassword().. 더보기