ImgBB API를 이용하여 이미지 업로드 기능을 만들어 보았다. 굳이 ImgBB를 선택한 이유는 무료라는 점과 간단하다는 점. 물론 추가적인 용량이나 다른 기능이 필요하다면 결제를 해야 하지만, 결제를 해도 저렴하다. 3년 이용 시 한 달에 3.99달러이며, 3년이면 143.64달러이다. 그래서 해당 서비스를 이용하기로 했다. 무료 이미지 호스팅 / 이미지 업로드 이미지를 업로드 하고공유해보세요. 원하는 곳 어디든 끌어놓기로 이미지를 바로 업로드해보세요.(이미지당 32 MB 가능) 다이렉트 링크, BBCode 및 HTML 미리보기등을 제공해드립니다. ko.imgbb.com 작동방식 확인 우선 API를 이용해 보자. Upload Image — Free Image Hosting Free image host..
프로젝트를 진행하는데, 이미지 저장을 해야 해서 찾아보았다. 스프링 공식 가이드 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..
환경 - MacOs (M2) brew를 이용하여 Mysql을 설치하고 사용 중인데, MariaDB를 설치하려고 하니 충돌이 일어나서 사용할 수 없다고 한다. 검색을 해보니 mysql 포트를 변경하거나 완전히 삭제하라고 한다. 1. 터미널을 열고 cd /etc 로 이동 2. sudo nano my.cnf 를 입력 후 [mysqld] 라고 입력된 부분을 찾는다. - (my.cnf가 없을 경우 생성), (mysqld도 마찬가지) 나는 없어서 만듦 3. 아래 사진과 같이 입력 (원하는 포트로 입력할 것) 4. brew services stop mysql, brew services start mysql 명령어를 사용하여 재시작 5. 정상적으로 포트가 변경된 것을 확인 (sudo lsof -i:3307)
이전글 보고 오려면 클릭 Google Custom Search API 사용해보기 프로젝트에서 이미지 크롤링을 이용한 서비스를 제공할 예정이다. Jsoup을 이용해서 이미지 크롤링 기능을 구현해 놨다. 하지만 해당 방식은 Google 이미지 검색 결과 페이지에서 값을 가져오는 방 e-room.tistory.com 구글 Custom Search API를 비용 때문에 포기하고 좀 더 찾아보니, 네이버 검색 API가 있었다. 정말 반갑게도 해당 API는 하루에 25000회까지 무료인듯하다. 네이버 검색 API 사용방법 네이버도 사용방법이 아주아주 간단하다. 우선 아래의 링크로 접속한다. 애플리케이션 - NAVER Developers developers.naver.com 접속하면 아래와 같은 화면이 나오는데, 애..
프로젝트에서 이미지 크롤링을 이용한 서비스를 제공할 예정이다. Jsoup을 이용해서 이미지 크롤링 기능을 구현해 놨다. 하지만 해당 방식은 Google 이미지 검색 결과 페이지에서 값을 가져오는 방식이다. 구글은 기본적으로 20개씩 띄워주게 되는데, 다음 인덱스 이미지를 가져오는 방법이 필요해서 알아보다 보니, Jsoup에서는 안되고 Selenium과 같은 자동화 도구를 사용해야 한다고 한다. 그래서 Selenium을 알아보다보니, Google의 정책에 위반될 수 있고, IP차단 등의 문제가 발생할 수 있다고 한다. 아무튼 실제 서비스를 할 생각인데, 합법적인 방법이 아니면 찝찝하기 때문에 넘기기로 했다. Google Custom Search API 그래서 좀 더 알아보니, Custom Search AP..
mockMvc = MockMvcBuilders .webAppContextSetup(webApplicationContext) // .apply(SecurityMockMvcConfigurers.springSecurity()) .build(); 컨트롤러 계층 테스트를 진행하던 중 유저 인증이 없어야 되는 경우를 테스트를 하려고 하니 SpringSecurity와 OAuth2에 의해 막히는 상황이 왔다. 뭐 대충 이런 상황인데.. @WebMvcTest(CommentController.class) @MockBean(JpaMetamodelMappingContext.class) class CommentControllerTest { @Autowired private MockMvc mockMvc; OAuth2 인증이 진행..
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..
이상형월드컵 게임을 위해 랜덤 정렬이 필요했다. 그래서 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..
지난 프로젝트에서 각종 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, "이미 존재하는 회원입니다..