Sparta/What I Learned

23.1.19

코딩하는 또롱이 2023. 1. 19. 15:57
프로젝트 4일차

 

 

분명 이미지 구현이 쉬울 줄 알았는데 HTML 쓰지 않고, DB 거치지 않고 저장하려고 하니까 완전 맨 땅에 헤딩하는 기분이다. 물론 뛰어난 대원들도 있어 도움을 받긴 했는데 내 걸로 소화하지 못해서 코드를 짜지 못하는 범인의 이 괴로움을 천재들은 알랑가몰라~!!!!! 😭😭😭

 

암튼 천재만재 대원님의 도움을 받아 이미지 구현을 어찌저찌 도움을 받았는데 문제는 이게 뭐가 뭔지 모르겠어서 그냥 손 놓고 넋도 놓고 다 놓고 있었는데 우리의 머찐 조장님이 구현을 뙇! 해놨다. 근데 진짜 괴로운건,,,, 설명을 들었는데 이게 대체 무슨 말이지,,,???

 

그냥 멘붕,,,,

 

그러던 중 우리 조장님이 구현한 코드를 가져와봤다! 이제 정리하면서 뜯어보고 씹어보고 소화시켜야지😱

 

 

[UserService]

MultipartFile은 용량이 큰 파일을 쪼개서 효율적으로 업로드 해 줄수 있게 스프링에서 제공하는 interface이다. 

[관련 설명]

더보기

 

@Transactional
public String createProfile(MultipartFile file, ProfileRequestDto requestDto, User user){
    String saveLocal = "C:/Users/mind/sparta_java/team_1_hyogeunchild/src/main/resources/static/image/";
    String saveImageName = user.getUsername();
    String updateImageData= saveLocal+saveImageName;
    user.changeProfile(requestDto.getNickName(), updateImageData);
    fileService.upload(file, saveImageName);
    userRepository.save(user);
    return "생성이 완료되었습니다.";
}

 

[FileService]

윈도우는 location이 지금 코드처럼 좀 더럽고 길게 나온다. 맥북은 주석처리된 부분처럼 깔꼼쓰하다던데,,, 맥북으로 갈아타야하나,,,흑흑

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;

@Slf4j
@Service
public class FileService {

//    @Value("${upload.image.location}")
//    private String location;
    private String location = "C:/Users/mind/sparta_java/team_1_hyogeunchild/src/main/resources/static/image/";
    @PostConstruct
    void postConstruct(){
        File dir = new File(location);
        if(!dir.exists()){
            dir.mkdirs();
        }
    }
    public void upload(MultipartFile file, String fineName){
        try{
            file.transferTo(new File(location+fineName));
        }catch(IOException e){
            log.error(e.getMessage());
        }
    }
    public void delete(String filename){
        new File(location + filename).delete();
    }

}

 

 

 

@Scheduled

주기적인 작업이 필요  특정시간 혹은 몇 분 혹은 몇 시간마다 원하는 날짜오ㅏ 시간도 가능!!!! 알람처럼 동작시킬 수 있음 그리고 적용시킬 class에 @Component 써줘야

🤔 cron은 어떻게 쓰는걸까??

크론 표현식 : cron = "* * * * * *"

왼쪽부터 작은 단위이며 [     요일 (생략가능)] 순서이다.

 -초 0-59 , - * / 

 -분 0-59 , - * / 

 -시 0-23 , - * / 

 -일 1-31 , - * ? / L W

 -월 1-12 or JAN-DEC , - * / 

 -요일 1-7 or SUN-SAT , - * ? / L # (1:일, 2:월, 3:화, 4:수, 5:목, 6:금, 7:토)

 -년(옵션) 1970-2099 , - * /

 

* : 모든 값

? : 특정 값 없음

- : 범위 지정에 사용

, : 여러 값 지정 구분에 사용

/ : 초기값과 증가치 설정에 사용

L : 지정할 수 있는 범위의 마지막 값

W : 월~금요일 또는 가장 가까운 월/금요일

# : 몇 번째 무슨 요일 2#1 => 첫 번째 월요일

 

ex)

매일 30분마다 : cron = "0 30 * * * *"

매주 금요일 오전 5시 30분 마다 :  cron = "0 30 05 * FRI ?"

매일 9시00분-9시55분, 18시00분-18시55분 사이에 5분 간격으로 실행 : cron = "0 0/5 9,18 * * *"

매일 9시00분-18시55분 사이에 5분 간격으로 실행 : cron = "0 0/5 9-18 * * *"

 

[트랜잭션 처리 에러]

 


 

오늘의 링크

 

[무료 placeholder 이미지 URL (API) 사이트 정리]

 

[Spring Boot 로 이미지 구현]

더보기
 

이미지 업로드, DB 저장

이미지 업로드 방식은 두가지로 정의할 수 있다. 첫번째. 파일 업로드 버튼을 사용해서 올리게 되는 방법이다. Multi part 프로토콜 방식이며, 이 때는 브라우저가 해당 프로토콜에 맞게 올려주게

5sangs.tistory.com

 

69일차. 상품관리(상품등록, 상품수정, 상품삭제), 상품정보(상품 목록, 상품 상세 정보, 구매)

다음 시간과  이후 계획 쇼핑몰(5월 첫째주) 간단히  -> 인터페이스 문서작성 -> 문서를 ...

blog.naver.com

 

👨‍💻 2편 React, Express, Spring으로 File과 JSON 동시에 주고 받기

1편에서는 파일과 JSON 데이터를 동시에 보낼 때 적합한 Content-Type이 무엇일지 알아보았습니다. 이번에는 React와 Express로 실제로 구현해보겠습니다.

velog.io

 

Postman을 이용한 File, Dto 동시 Post요청

보통 Controller에서 Dto를 받을 때는 @RequestBody를 주로 사용합니다. 그리고 File을 받을 때는 MultipartFile 객체를 사용하며, @RequestParam을 사용합니다. 하지만 File과 Dto를 같이 받기 위해서는 @RequestPart라

emoney96.tistory.com

 

[SpringBoot] RestApi 만들기 (6) File Upload / Download / List

Spring Boot File Upload / Download / Delete / List 1. File Upload file 관련 설정은 src/main/resources/application.yml ( 또는 application.properties ) 에 합니다. spring: servlet: multipart: max-file-size: 10MB max-request-size: 10MB location: d:\

hello-bryan.tistory.com

 

스프링부트 이미지 저장, 전송

예를 들어, 사용자의 프로필 사진을 저장해야 한다고 했을때 사진 자체를 DB에 저장하는 것은 용량도 크고 장점보다 단점이 많다. 그래서 이미지 정보를 DB에 저장하였다. 또한, 이미지는 사용자

velog.io

 

[Springboot] 게시판 이미지 업로드 (Postman 파일전송)

위와 같이 게시판을 작성하고 파일을 같이 저장하는 코드를 작성했는데 .. 기존에는 Param값이나 Body값을 주면서 테스트를 할 수 있었는데 파일전송은 어떻게 테스트 하는지 몰라 방법을 알아 보

velog.io

 

angular, react, vue 등의 최신프런트엔드로 풀스택 개발

백엔드는 spring boot, Node로 프런트엔드는 react, angular, vue 의 최신프런트엔드를 사용하여 풀스택사이트 개발!

eastflag.co.kr

 

이건 HTML을 이용한 블로그😭 우리가 하려는 내용과 좀 많이 다르지만 알아두면 좋을 거 같아서 추가!

 

스프링과 JPA 기반 웹 애플리케이션 개발 #31 프로필 이미지 변경 (+FileReader.readAsDataURL() +Base64 인코

스프링과 JPA 기반 웹 애플리케이션 개발 #31 프로필 이미지 변경 > 해당 내용은 인프런, 스프링과 JPA 기반 웹 애플리케이션 개발의 강의 내용을 바탕으로 작성된 내용입니다. > 강의를 학습하며

velog.io

 

Spring boot image를 등록하고 이미지를 불러오는 방법

블로그 나 카페에서 이미지들이 있는 것을 볼 수 있다. 위와 같은 이미지를 클릭하면 URL이 바뀌는 것을 볼수가 있는데 다음과 같은 방법은 어떻게 하는 것일까? 1. 먼저 REST API 상에서 파일을 서

redbinalgorithm.tistory.com

 

angular, react, vue 등의 최신프런트엔드로 풀스택 개발

백엔드는 spring boot, Node로 프런트엔드는 react, angular, vue 의 최신프런트엔드를 사용하여 풀스택사이트 개발!

eastflag.co.kr

 

이건 뭔가 나랑 관련이 있어보이는 질답이어서 저장

 

spring boot 와 spring data JPA로 게시판을 만들던 중 모르는 부분이 생겨 여쭤보고자 올립니다..

대한민국 모임의 시작, 네이버 카페

cafe.naver.com

 

백엔드에서 이미지 저장을 이렇게 했는데

postman으로 이미지를 등록하면 정해진 경로 안에 이미지가 다음과 같이 저장되며, imageUrls를 get할 수 있고 이런식으로 DB에도 이미지가 저장됩니다....

cafe.naver.com

 

[이건 위의 내용을 찾다가 발견한 블로그 아기자기하니 귀염귀염하다 _ 그냥 넣고 싶었음 🐱]

 

hellonayeon (hellonayeon) - velog

 

velog.io

 

 

[nullable = false 랑 @NOTNULL 차이점을 명확하게 설명해 둔 블로그!]

@NotNull 은 유효성 검사를 해주기 때문에 비어 있는 값이 들어가서는 안 된다는 에러를 출력해주지만 데이터베이스의 제약조건과는 관계가 없다. 하지만 좀 더 찾아보니 이런 제약 조건을 해석하여 데이터 베이스에 자동으로 not null 제약 조건을 걸어준다고 한다.

nullable = false 는 데이터베이스에 명시적으로 not null 제약 조건을 걸어준다. 하지만 유효성 검사는 해주지 않는다.

@NotNull을 이용하는 것제약조건 설정유효성 검사를 같이 해주기때문에 조금 더 안전하게 사용할 수 있을것 같다.

 

 

[폼데이터]

이야기를 나누다가 폼데이터를 넘겨주면 되지 않느냔 말이 나왔는데 내가 아는 폼은 JSP로 <form> 태그를 걸어서 만들어 주는걸로 알고 있었는데 JPA에도 있나? 싶어서 찾아봄

 

 

 

[임베디드 클래스]

음.... 뭐가 다른거지,,,,,?

 

[Enum Converter로 entity mapping 하기]

솔직히 아직 제대로 이해는 안 간다 하지만 계속해서 보고 만지고 하다 보면 알겠지,,, 난 나를 미더,,,,

 

[gitbash 쓰다가 생긴 오류]

please commit your changes of stash them before you merge....

그냥,,,,, 내 로컬과 원격이 동일하지 않은데 커밋하려고 해서 생긴 오류!

이럴 때는 

git stash

를 쓰면 되는데 이건 stash라는 임시저장소를 이용해 내 로컬을 저장해두고 원격을 pull 받은 다음 

git stash pop

으로 merge 해주면 해결 완!

더 자세히 알고 싶으면 링크 누르기~

 

 

'Sparta > What I Learned' 카테고리의 다른 글

23.1.24  (2) 2023.01.25
23.1.20  (0) 2023.01.25
23.1.18  (0) 2023.01.18
23.1.17  (1) 2023.01.17
23.1.16  (0) 2023.01.17