Spring 61

🤦🏻‍♀️고민하기 - [개발환경] 포크 앤드 풀(Fork and Pull) 워크플로우

🫧 나의 상황이전에 다른 프로젝트를 진행할 때는 항상 원격 저장소에서 git clone만 해서 프로젝트를 진행했었다.clone 한 후에 각자의 개발 브랜치를 생성하여 해당 브랜치 안에서만 개발과 merge 등을 했었는데, 이번에는 처음 해보는 방식으로 github를 활용하게 되었다.💡포크 앤 풀(Fork and Pull) 워크플로우란?소프트웨어 개발에서 협업은 필수적이다.특히, 팀 프로젝트에서는 여러 개발자가 함께 작업하는 것이 일반적이고이때, 각자의 작업을 안전하고 효율적으로 관리하기 위해 사용하는 대표적인 협업 방식이 바로 포크 앤드 풀(Fork and Pull) 워크플로우라고 할 수 있다.  1. 팀 깃허브 페이지 생성하기포크 앤드 풀 워크플로우를 시작하기 위해서는 우선 팀 깃허브 페이지를 설정..

[개발환경] H2 DB 선택과 연결하기

🤷🏻‍♀️고민하기 - 어떤 DB를 사용할 것인가이전 프로젝트에서는 mysql를 사용하기도 했고, 가장 친숙한 느낌이라 mysql을 사용할까도 했지만 스프링 부트를 공부했을 때 test 코드 작성 시에 내장형 db를 사용하면 더 다양한 기능을 자동으로(?) 사용할 수 있었던 것으로 기억해서 이번에는 H2를 활용해 보기로 했다. (추후 mysql로 변경도 가능하기 때문에~)  1. 인메모리 모드데이터가 메모리에만 저장되며, 서버가 종료되면 데이터가 사라진다. 2. 디스크 기반 모드 ✔️데이터가 디스크에 저장되며, 서버를 종료하고 다시 시작해도 데이터는 유지된다.  ✔️ Mac에서 h2에 실행하기터미널에 접속한다.cd 명령어를 활용해 다운받아 놓았던 h2 폴더 ➡️ bin 폴더까지 들어간다.그 상태에서 아..

🚨ERROR - [spring boot] org.springframework.beans.factory.UnsatisfiedDependencyException:

🏕️상황테스트 코드를 작성하고 run을 했는데 위와 같은 오류가 발생했다. 거의 처음 보는 오류였는데 알아보니Spring Boot가 테스트를 실행할 때 내장형 데이터베이스를 사용하려고 시도하지만, 프로젝트의 클래스패스에 해당 데이터베이스에 필요한 라이브러리가 없어서 발생한 문제였다. mysql은 내장형 데이터베이스가 아니다. 이 사실을 모르고 mysql을 사용해서 개발하고 있었다.왜냐하면 이전 프로젝트에서도 mysql을 사용했기 때문에 mysql의 환경세팅이 나에게는 더 편했기 때문이다.그래서 내장형 db 라이브러리도 내 프로젝트에는 없었다 :) 💦과정mysql ➡️ H2로 교체했더니 오류 해결!! 원래대로라면 DB만 바꿔주면 바로 해결될 문제였지만 나는 2가지의 오류를 만나면서 거의 3시간을 소모했..

[10강] 페이스북 로그인 완료

🤍받은 인증 정보들을 코드에 기입해 주기 색깔에 맞춰서 각각 정보들을 기입해 주면 된다. 🤍oauth에서 제공하는 규격에 맞게 요청 url을 작성한다. OAuth2 클라이언트 애플리케이션에서 정의한 OAuth2 공급자(여기서는 Facebook)에 대한 인증을 시작하라는 요청을 나타내는 것이다!! ( OAuth2 클라이언트의 구성에 따라 "facebook" 부분이 다른 OAuth2 공급자 이름으로 대체될 수 있다.) 🤍1차 테스트(?)로 요청을 해본다...!! (성공) 로그인을 하고 나면 다음 사진에 있는 과정을 거치게 된다. (이 강의 이전에 작성해 놓은 코드가 작동을 하는 것이다 - oauth 로그인에 대한 처리를 다 해놓았기 때문에 바로 기본적인 정보가 따라온다.) 핑크색 박스의 내용을 보면 face..

[3강][4강] spring security 회원가입/로그인

[3강] @Autowired private UserRepository userRepository; @PostMapping({"/join"}) //securityConfig 파일 생성 후 작동안함. public String join(User user) { System.out.println(user); user.setRole("ROLE_USER"); String rowPassword = user.getPassword(); String encPassword = bCryptPasswordEncoder.encode(rowPassword); user.setPassword(encPassword); userRepository.save(user); return "redirect:/loginForm"; } 위의 과정은 로..

🚨ERROR - org.springframework.core.convert.ConverterNotFoundException

🏕️상황 ConverterNotFoundException: No converter found capable of converting from type [hanium.highwayspring.school.Curriculum.Curriculum] to type [java.lang.String]] with root cause org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [hanium.highwayspring.school.Curriculum.Curriculum] to type [java.lang.String] at org.springframework.core..

[spring boot] S3 게시판(이미지 처리) update 기능 완성

🏕️상황 꽤나 긴 시간 동안 굉장히 여러 상황을 마주해서 하나하나 기억은 안 나지만 그래도 기억나는 거라도 작성해보록 하겠음. public void updateImages(List newImageList, List existingImageList) { // 새로 추가된 이미지 찾기 List addedImages = new ArrayList(newImageList); addedImages.removeAll(existingImageList); // 삭제된 이미지 찾기 List deletedImages = new ArrayList(existingImageList); deletedImages.removeAll(newImageList); // 새 이미지 업로드 로직 for (String newImage : add..

[spring boot] S3 게시판(이미지 처리) delete 기능 완성

🏕️상황 처음에는 아래의 코드만 있으면 바로 삭제가 될 줄 알았다. public void deleteFile(String fileName) { DeleteObjectRequest request = new DeleteObjectRequest(bucket, fileName); amazonS3Client.deleteObject(request); } 그런데 나는 기존에 임시경로는 "temporary/"로 정식경로는 "final/"로 설정했기 때문에 이에 맞게 코드를 구성하려고 했다. 위의 코드는 루트 디렉터리 기준이고 나는 키(key) 구조를 활용해서 폴더 같은 형식으로 진행하고 싶었기 때문에 추가적인 코드 작업을 할 계획이었다. 하지만.... Amazon S3에서는 특정 폴더 내에 있는 파일을 삭제하기 위해 ..

[post men] 415 error - Content-Type

🏕️상황 post men에서 post 방식으로 테스트를 진행하고 있었는데 계속 저런 오류가 발생하였다. + 🗝️해결 클라이언트 요청 헤더에 Content-Type을 올바르게 설정했는지 확인해야 합니다. 보내는 데이터의 형식에 따라서 Content-Type을 적절히 설정해야 합니다. 예를 들어 JSON 데이터를 보낼 때는 Content-Type을 application/json으로 설정해야 합니다.