한이음 47

🤦🏻‍♀️고민하기 - entity 클래스_관련은 있지만 저장되지 않는 컬럼을 어떻게 처리해야 하나?

🏕️상황 Board entity의 image 컬럼 자료형이 list 형이면 DB에 저장되는 컬럼이 아니고, 다른 엔티티 클래스와의 관계를 정의하는 컬럼이다. 정석(?)의 방식이라면 Image 엔티티에서도 [private Board board] 으로 관계를 정의하는 것이 맞지만, 다른 부분에서 개발하면서 저렇게 양쪽에서 하는 방식을 해보니 굳이 Many쪽(Image) 엔티티에서는 board 컬럼이 있는 필요가 없다는 생각이 들었다. 왜냐?? 저렇게 Board 자료형을 사용하면 굳이 Image에서는 board 테이블을 조회할 필요가 없는데, Hibernate에서 board 관련 쿼리를 날리기 때문에 오히려 불필요한 쿼리를 발생시키는 느낌이 들었다. 그래서 그냥 다음과 같이 정의해버렸다. 이렇게 구성하고 im..

[spring boot] aws 백엔드 배포하기(1. jar파일로 빌드)

🏕️상황 원래는 7월에는 배포를 진행할 예정이었는데, 여차저차 미뤄지게 되었다. 그래서 한이음 팀장님이 더 이상 미뤄지면 안 될 거 같다고 얘기하기도 했고, 나의 경험 측면에서도 하루빨리 서버 배포를 해보는 것이 도움이 될 거 같다는 생각에 당장 배포를 제1의 목표로 가지게 되었다. 하지만 맨날 로컬 환경에서 기능 개발이나 해봤지.. 이쪽 aws, 서버 세계는 이번이 완전 처음이라 두려움이 앞섰다. 멘토분과 멘토링을 통해 서버 배포 진행 : - 장점 1. 내가 편하다. 2. 몰라서 헤매는 과정 없이 빠르게 배포를 할 수 있다. -단점 1. 내 실력 향상엔 내가 직접 하는 것보단 좋지 않다. 2. 그 과정을 내가 직접 하지 않았기 때문에 추후 유지/보수에 오히려 어려움이 생길 수 있다. 3. 멘토님과 진행..

list null(empty)체크하기

🏕️상황 list형인 변수 imageList에 아무런 값이 들어있지 않다면 해당 메서드가 실행되면 안 되는데 저렇게 조건을 2개나 걸었는데도 계~~ 속 메서드가 실행되는 것이다..? 그래서 다른 방법을 모색해 보았다. 🚋과정 list에서 null을 체크하는 방법으로는 대충 3가지가 있다고 한다. list.isEmpty() list.size() CollectionUtiles.isEmpty() 근데 모두 upload 메소드가 실행되었다.... 🗝️해결 자세히 알아보니 post men에서 아무런 값을 전달하지 않으면 null 값이 아니라 empty라고 한다. imageList 변수는 초기화 시점에 이미 빈 리스트로 생성되었기 때문에 null이 아닌 비어있는 리스트가 된다. 그래서 나의 경우에는 != null ..

[Spring boot] s3 이미지 업로드 구현(완성)

https://grogrammer.tistory.com/66 Spring boot_s3 이미지 업로드 구현(초안) 🏕️기존 상황 이미 S3 버킷은 만들어져 있는 상황이었고 모든 권한을 가진 iam 유저도 1명 있는 상태였다. 그 상황에서 더 추가적으로 필요한 것들을 추가해서 개발하였다. 🔺S3연동을 위해 해 grogrammer.tistory.com 🏕️상황 위에 있는 블로그에 쓰여있듯이 지난번에는 이미지가 S3 버킷에 잘 올라가는지 확인하는 용도였다. (아직 남은 개발 사항이 있는 상태) 현재 우리 프로젝트에서 이미지를 다루는 부분은 게시판 부분인데, 게시판 쪽 코드와 합쳐서 게시글과 이미지가 하나가 되도록 만들어야 했다. 🔜 현재 완료 이미지 1개만 업로드가 가능했는데 다중 이미지 업로드 기능을 구현해..

🤦🏻‍♀️고민하기 - 어떤 Join 메소드를 사용해야 할까?

🏕️상황 Querydsl을 사용하다 보니 각종 Join이라고 적혀있는 메서드가 많아서 각자 정확히 어떤 기능을 하고, 어떤 상황에 무엇을 사용해야 하는지 궁금해졌다. 그리고 명확히 알아야 할 필요가 있다는 생각이 들었다. innerJoin() 메서드 innerJoin은 두 개의 테이블을 내부 조인하는 방식. 내부 조인은 두 테이블 간에 조인 조건을 만족하는 데이터만 결과에 포함시키는 방식입니다. 만약 조인 조건을 만족하지 않는 데이터는 결과에 포함되지 않는다. 예를 들어, qBoard와 qHeart 테이블을 innerJoin하여 qBoard의 id 컬럼과 qHeart의 board.id 컬럼이 매칭되는 데이터만 결과로 가져오게 된다. innerJoin은 두 테이블 간에 반드시 관계가 존재해야 하며, 매칭되..

@PathVariable, @RequestParam의 차이점

🏕️상황 @GetMapping("/list/{schId}") public ResponseDTO boardList(@PathVariable("schId") Long schId, @RequestParam(name = "cateNo") Long cateNo) 다음과 같은 코드가 있을 때, URL 경로에는 cateNo라는 값이 없는데 왜 매개변수에는 있는지 의아했다. 🗝️해결 @PathVariable("schId") Long schId: @PathVariable은 URL 경로에서 특정 변수를 추출하는데 사용된다. schId라는 변수명으로 URL 경로에서 값을 추출하여 Long 데이터 타입으로 매핑하게 된다. 예를 들어, URL 경로가 "/schedule/123"인 경우, schId 변수에는 123이 할당된다. ..

🚨ERROR - com.amazonaws.SdkClientException: Failed to connect to service endpoint:

🏕️상황 2023-07-25 10:31:09.949 WARN 156 --- [ main] com.amazonaws.util.EC2MetadataUtils : Unable to retrieve the requested metadata (/latest/meta-data/instance-id). Failed to connect to service endpoint: com.amazonaws.SdkClientException: Failed to connect to service endpoint: at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:100) ~[aws-java-sdk-core-1.11.792.jar:n..

[개발]🚨ERROR - com.amazonaws.services.s3.model.AmazonS3Exception: The bucket does not allow ACLs

🏕️상황 2023-07-25 13:19:52.009 ERROR 19808 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.amazonaws.services.s3.model.AmazonS3Exception: The bucket does not allow ACLs (Service: Amazon S3; Status Code: 400; Error Code: AccessControlListNotSupp..

[Spring boot] s3 이미지 업로드 구현(초안)

🏕️기존 상황 이미 S3 버킷은 만들어져 있는 상황이었고 모든 권한을 가진 iam 유저도 1명 있는 상태였다. 그 상황에서 더 추가적으로 필요한 것들을 추가해서 개발하였다. 🔺S3연동을 위해 해당 권한만 별도로 가진 유저를 생성 노란색 박스처럼 S3 권한을 가진 전용 iam 유저를 [highWay_S3_user]라는 이름으로 생성. 핑크색 박스의 권한을 부여하여 유저를 생성. (S3에 대한 전체 권한을 허용하는 것이기 때문에 추후 더 보안에 신경 쓸 수 있는 권한을 도입예정) 🔺build.gradle //aws implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' 🔺application.properties # S..

[개발] S3_accessKey, secretKey 발급받기기(문제/해결)

🏕️상황 S3에 이미지를 업로드하는 코드를 만들기 위해서 밑작업으로 application/properties에 accessKey, secretKey 값을 입력해야 하는데 그 값이 어디에 있는지 몰랐다. 그래서 검색해 보니 'aws access key 재발급'라고 검색해도 하나같이 새로운 유저를 생성하면서 그 과정 속에서 위의 값들을 얻는 구조였다. 하지만 우리 프로젝트 계정에는 이미 iam 유저가 1개 존재했다. aws 왕초보이다 보니 이것저것 막 건들이기가 무서웠고, 이미 유저가 1개 있는 상태에서 또 유저를 생성해도 되는지 고민이 되었다. 그래서 한이음 멘토님께 연락을 드려 여쭤보았다. ⛅과정 아래의 사진처럼 이 부분을 선택해서 iam 유저를 생성해야 하는데 이게 안 보이더라!! 이 페이지 (1페이지..