Java

개발일지/돌픽

Spring boot 쿼리파라미터 Dto 사용하기 (@ModelAttribute)

시행착오 과정이 궁금하지 않은 분들은 아래로 이동하세요 현재 검색 관련 쿼리파라미터를 다음과 같이 받고 있다. @GetMapping("/worldcups") public ResponseEntity getWorldCups(@RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "5") int size, @RequestParam(required = false, defaultValue = "playCount") String sort, @RequestParam(required = false, defaultValue = "DESC") Sort.Direction directio..

개발일지/돌픽

spring-boot Cache-Control 설정으로 부하 줄이기

얼마 전에 프론트엔드 개발자분이 서버에서 받은 데이터가 브라우저에 캐싱이 안된다고 했다. 서버 측에서 캐싱을 할 수 없도록 설정해놨다고 한다. 나는 처음에는 서버자체에서 캐싱을 이야기하는 줄 알았다.(ex: @Cacheable) 아직 캐싱관련 설정을 하지 않았기 때문에 아직 별도의 설정을 하지 않았기 때문에 해놓겠다고 했다. 우선 메인페이지를 구성하는 월드컵 검색 api에만 설정을 해놓고 되는지 확인해 보라고 했다. 그랬더니 똑같이 안된다고 한다. 서버로그를 확인해보니 정상적으로 캐싱이 되어 데이터베이스로 쿼리문이 날아가지 않는다. 응...???? 뭔가 이상함을 느꼈고, 다시 검색을 해보니 브라우저에서 캐싱을 하는 것과 서버에서 캐싱을 하는 것은 전혀 다른 것이었다. 프론트엔드개발자분이 요청한 것은 브라..

개발일지/돌픽

Spring-boot 파일 업로드 - 공식문서 따라하기 !

프로젝트를 진행하는데, 이미지 저장을 해야 해서 찾아보았다. 스프링 공식 가이드 Getting Started | Uploading Files To start a Spring Boot MVC application, you first need a starter. In this sample, spring-boot-starter-thymeleaf and spring-boot-starter-web are already added as dependencies. To upload files with Servlet containers, you need to register a MultipartConfigEl spring.io 스프링 공식 가이드 깃허브 소스코드 GitHub - spring-guides/gs-upload..

개발일지/돌픽

Querydsl .orderBy()

Querydsl의. orderBy() 메서드를 살펴보면 OrderSpecifier 매개변수로 받는다. 아주 간편하게 정렬을 하는 방법을 기록해 본다. private OrderSpecifier pageableToOrderSpecifier(Pageable pageable) { Sort.Order sortOrder = pageable.getSort().get().collect(Collectors.toList()).get(0); Order order = sortOrder.getDirection().isAscending() ? Order.ASC : Order.DESC; PathBuilder sort = new PathBuilder(WorldCup.class, "worldCup").get(sortOrder.getP..

개발일지/돌픽

MySql 랜덤 정렬

이상형월드컵 게임을 위해 랜덤 정렬이 필요했다. 그래서 querydsl에서 사용해 보려고 관련 자료들을 찾아보았다. .orderBy(NumberExpression.random().asc()) 해당 방법을 사용하면 SQLSyntaxErrorException이 발생하며, MySql 버전이 맞지 않는다고 한다. 그래서 우선은 @Query 어노테이션을 이용해서 직접 작성해 주었다. @Query("SELECT c FROM Candidate c WHERE c.worldCup.id = :worldCupId ORDER BY RAND() LIMIT :teamCount") 해당 방법으로 해서 개발을 진행하다 문득 querydsl에도 방법이 있지 않을까 싶어 좀 더 찾아보니 방법이 있었다. .orderBy(Expressio..

개발일지/돌픽

도메인 별로 enum 관리

지난 프로젝트에서 각종 ExcepCode를 하나의 enum에서 관리했다. 기존 public class BusinessLogicException extends RuntimeException { @Getter private ExceptionCode exceptionCode; public BusinessLogicException(ExceptionCode exceptionCode) { super(exceptionCode.getMessage()); this.exceptionCode = exceptionCode; } } public enum ExceptionCode { //member MEMBER_NOT_FOUND(404, "존재하지 않는 회원입니다"), MEMBER_EXISTS(409, "이미 존재하는 회원입니다..

개발일지/돌픽

이상형월드컵 프로젝트

시작하게 된 계기 이전에 진행했었던 프로젝트에서 다양한 부분에서 부족함을 많이 느꼈고, 백엔드의 모든 부분에 대해 직접 개발해보고자 하는 욕심도 있었다. 무엇보다 나만의 서비스를 운영해보고 싶다는 생각도 있었다. 그래서 백엔드 1인, 프런트엔드 1인으로 진행을 해보고자 한다. 이상형월드컵 선택 이유 ? 예전에 여자친구와 여러 가지 선택지 중에서 하나를 고르려다 어떤 걸 고를지 몰라 한참 고민했던 적이 있다. 그때 이상형월드컵 서비스에 접속해서 나만의 월드컵 만들기를 이용한 적이 있다. 그런데 그때 월드컵을 만들려면 각종 사진들을 미리 다운로드해서 준비해왔어야 했고, 이를 보자마자 귀찮아서 창을 닫았던 기억이 있다. 그래서 오로지 편리함에 초점을 맞추어 제작해 보고자 한다. 간략한 설계 현재 검색창에 이상..

개발일지/Spring

[회고] 스프링 핵심 원리 - 기본편

스프링 부트를 이용하여 2가지 프로젝트를 진행해보고 나서 문득 스프링에 대한 기초가 궁금해서 수강한 강의이다. 비전공자이다 보니 기초가 아무래도 부족하지 않나 싶은 생각도 들었고, 사실 워낙 유명한 분의 강의이다 보니 궁금한 게 컸다. 대부분 부트캠프에서 배웠던 내용들이라 새롭게 배웠다기보다는 복습을 한 기분이다. 그때 당시에는 IoC, DI 등 이러한 용어적인 부분들이 배우면서도 와닿지 않았었다. 프로젝트를 진행하면서, 이런 저런 기능도 추가하고 구현하면서 어렴풋이 알게 되었던 것 같다. 좋았던 점은 과거의 스프링이 없던 시절부터 점점 현대로 발전해 오는 과정에서 왜 이러한 기능들이 생겨났는지와, 왜 이러한 기능들이 필요한지에 대한 이유들에 대한 설명이다. 그러한 과정을 코드로 보여준다. 예를 들어, ..

개발일지/Spring

Spring 다양한 의존성 주입

Spring 관련해서 요즘 기초부터 다시 보고 있는데 생성자 주입에 관해서 보고 있던 중, 흥미로운 부분을 발견했다. 수정자 주입과 필드 주입이다. (옛날에는 수정자 주입, 필드 주입을 많이 사용했었다고 한다) 수정자 주입 선택, 변경의 가능성이 있는 의존관계에 사용한다 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다 set메서드를 public으로 열어둬야 한다 (누군가 변경가능성 있음) @Component public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPolicy discountPolicy; @Autowired public void..

E-room
'Java' 태그의 글 목록 (4 Page)