Spring 61

🚨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페이지..

[3장] "더 추상화 되어 사용된다"의 의미는?

🏕️상황 영속성 컨텍스트에 대해 공부하다 보니 '.persist()' 메소드에 대해서 알게 되었고 이 메소드는 "엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다." 라고 했다. 그런데 [저장]이라는 말을 보니 '.save()' 메소드와의 차이점이 무엇인지 궁금해졌다. 그래서 알아보니 간단하게 설명하자면 '.save() 메소드는 JPA에서 사용되는 em.persist()와 비슷한 역할을 수행하지만, 더 추상화되어 사용함.' 위에서 말하는 "더 추상화되어 사용" 한다는 말이 무슨 말일지 궁금해졌다. 🗝️해결 "더 추상화되어 사용된다"는 말은 개발자가 직접 구체적인 구현을 다루지 않고, 더 간단하고 추상화된 방식으로 사용할 수 있다는 것을 의미한다.

[1장] 메서드 체인이란??

🏕️상황 책에서 member.getOrder().getOrderItem()라는 코드가 객체 그래프를 탐색하는 코드라고 쓰여있는데 이게 무슨 말인지 이해가 되지 않았다. member.getOrder().getOrderItem()이 자유롭게 객체 그래프를 탐색할 수 있는 코드인 이유는 자바에서 메서드 체인(Method Chaining)을 지원하기 때문이다. 메서드 체인은 한 객체의 메서드 호출 결과를 바로 다른 메서드의 호출 대상으로 사용하는 방식을 말합니다. 위의 코드에서 member.getOrder() 메서드는 member 객체에 속하는 Order 객체를 반환하고, 그 다음에 .getOrderItem() 메서드를 호출하여 해당 Order 객체에 속하는 OrderItem 객체를 반환한다. 이렇게 메서드 체..

[개발] Querydsl을 사용하여 학교 좋아요 리스트 반환하기

유저의 토큰을 header에 넣으면 해당 유저가 누른 좋아요 id (heart 테이블) 좋아요 한 학교의 schoolId (heart 테이블) 좋아요 누른 학교의 이름 (school 테이블) 좋아요 누른 학교의 학생수 (user 테이블) 🔜 우리 웹 사이트에 있는 해당 학교의 유저수를 의미함. 🔜 user정보에 재학 중인 schoolId가 있음. 좋아요 누른 학교의 태그 (tag 테이블) 🔜 지난번에 포스팅 했지만 tag테이블과 school 테이블은 조인 관계를 맺고 있지 않다. 매개변수로 userId가 들어온다, 그 heart 테이블에 있는 Id 값과 schoolId 값을 차례대로(쌍으로) 조회한다. 그 schoolId를 가지고 school 테이블에서 schoolName을 조회한다. 그 schoolId..

[개발] Querydsl를 사용하여 원하는 정보 조회/반환하기(Refactoring)

🏕️상황 https://grogrammer.tistory.com/53 [개발] Querydsl, DSL를 사용하여 원하는 정보 조회/반환하기(코드분석) 🏕️상황 //school 리스트를 반환하는 메소드 //school_tb : id와 schoolName, tag_tb : name(태그명), user_tb : schoolId를 counting. 총 3개의 테이블을 조인하여 반환 public List findSchoolInfoWithTagsAndUserCount() { JPAQueryFac grogrammer.tistory.com school의 list를 반환하는 메서드에 반환 값이 까다로워서 코드가 좀 복잡해지고, 기능이 정상적으로 작동하니 일단 깃랩에 업로드하였다. 하지만 for문 안에 sql문이 있었고..

[개발]🤦🏻‍♀️고민하기 - Querydsl 사용 시 클래스 구조(repository, service)

🌦️기존상황간단하게 구조도를 그려봤다.그리고 보니 querydsl을 사용한 메서드를 기준으로 보면 repository와 전혀 관계를 맺고 있지 않다. querydsl을 사용하니 JPA메소드도 사용하지 않기 때문이다.service에다가 querydsl을 적어놓은 이유는 service 단에 늘 함수들을 구성해 놓았기 때문이다!! ⛅과정같은 백엔드 팀원에게 해당 구조에 대해 문제점을 제기받았다. 처음에는 굳이..? 싶었다. 괜히 복잡하게 클래스만 늘어나는 거 같아서 의문스러웠다.그런데 알아보니 나처럼 service단에서 querydsl을 쓰는 경우는 거의 없는 거 같았다.^^ 더 나은 코드를 위해서라면 더 이상 고민할 이유가 없었다.☀️해결schoolRepository가 JPARepository, Schoo..

spring boot - Querydsl, DSL(Domain-Specific Language)이란??

🏕️상황 Querydsl을 사용하다보니 DSL이란 용어가 나왔고, 처음에는 이 둘이 같은 말인줄 알았다. 그런데 DSL이 더 넓은 개념이었고 확실하게 알고싶어서 정리하며 공부하기로 하였다. 💛DSL(Domain-Specific Language) 특정 도메인이나 문제 영역에 특화된 언어입니다. 이는 해당 도메인의 용어, 구문, 추상화 등을 통해 해당 도메인의 작업을 더 쉽게 표현하고 코드를 읽기 쉽게 만드는 것을 목표로 합니다. 일반적으로 DSL은 크게 두 가지로 분류됩니다. External DSL (외부 DSL): - 외부 DSL은 독립적인 언어로서 도메인 특화 언어를 말한다. - 예시로는 SQL, HTML, CSS 등이 있다. Internal DSL (내부 DSL): - 내부 DSL은 일반 프로그래밍 ..