전체 글 119

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

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

[궁금증] NAT 게이트웨이 - 프라이빗 ip주소로 변환한 다음에는..? + 느낀점

❓nat 게이트웨이는 프라이빗 ip주소를 퍼블릭 ip 주소로 변환해서 인터넷과 통신할 수 있도록 해주는데, 그러면 변환을 잠깐 했다가 바로 다시 프라이빗 ip주소로 바꾸는 건가? 변환을 잠깐만 하고 다시 프라이빗 IP 주소로 되돌리는 것은 아니다. NAT 게이트웨이는 프라이빗 IP주소를 퍼블릭 IP주소로 변환하여 인터넷과 통신하게 하지만, 변환된 IP주소는 연결 상태 테이블에 기록되고 일정 시간 동안 유지된다. 이렇게 연결 상태에 따라 패킷의 변환 정보가 관리되므로, 다시 프라이빗 IP주소로 변환되는 것이 아니라 원래의 변환 정보를 활용하여 효율적으로 통신하도록 한다. 그렇다면 여기서 또 드는 의문!! ❓그러면 테이블에 적힌 변환된 IP주소가 유출될 가능성은 없는가? 있다... 연결 상태 테이블에 저장된..

[궁금증] S3에서 객체 업로드 시 비용이 발생하지 않도록 하려면 어떻게 해야하나?

각 버전은 별개의 객체로 보존되기 때문에 추가 요금이 발생한다. 객체 갱신 시(put)에는 기존 객체와 다른 새로운 버전 ID가 부여된다. 라고 책에 나와있었다. 그런데 의문이 들었다. ❓최대한 한 번에 객체를 업로드하려고 해도 계속해서 추가로 객체를 업로드할 일이 생길 텐데 그럴 때마다 비용이 발생한다는 것이 께름칙(?)해서 비용이 발생하지 않게 하도록 하는 방법이 없는지 의문이 들었다. 버전 관리 비활성화: 이미지를 업로드할 때 버전 관리를 비활성화합니다. 버전 관리를 비활성화하면 새로운 객체 업로드 시 이전 버전은 보존되지 않으므로 스토리지 요금을 최소화할 수 있습니다. Overwrite 사용: 이미지를 업로드할 때 동일한 객체 키(Object Key)를 사용하여 Overwrite(덮어쓰기) 옵션을..

[궁금증] EC2에서 왜 OS를 지정할까?

❓이미 사용자(클라이언트) 쪽에서도 OS는 window로 기본적으로 가지고 있을 거 같은데 왜 개발자가 OS를 지정하며, OS를 지정하는 것의 의미는 무엇일까 ? 일반적으로 개인용 컴퓨터나 노트북과 같은 클라이언트 장치는 사용자가 이미 OS를 선택하고 사용 중입니다. 하지만 클라우드 컴퓨팅에서는 상황이 조금 다릅니다. 클라우드 서비스 제공업체(예: AWS)는 사용자에게 가상서버 인스턴스를 제공하는데, 이러한 가상서버는 물리적인 서버에서 가상화된 형태로 운영체제를 실행하는 것입니다. 이런 가상서버를 생성할 때 사용자에게 OS 선택을 요구하는 이유는 다음과 같다. 다양성과 호환성: 클라우드 서비스를 사용하는 고객은 다양한 운영체제를 필요로 할 수 있습니다. 서로 다른 운영체제로 설정된 가상서버를 만들 수 있..

[개발] 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은 일반 프로그래밍 ..

그림과 작동 원리로 쉽게 이해하는 AWS 구조와 서비스

이번 한이음 프로젝트에서 서버 배포 과정을 거치면서 AWS/Cloud 세계를 접하게 되면서 추가적으로 이 부분에 대한 공부가 필수적이라는 생각이 들었다. 빨리 기초지식을 쌓아서 백엔드 팀원으로서 서버 쪽으로 팀에게 보탬이 제대로 되고 싶다!!! 그래서 가급적 최~~~ 대한 빨리 이 책을 끝낼 계획이다. 특별히 중요한 부분이 있다면 추가로 블로그에 정리를 할 수도 있지만 책의 내용이 대체로 다 중요할 거 같아 시간이 많이 요소 될 거 같으므로 나중에도 지속적으로 공부할 수 있고, 학습효과를 높이기 위해서 챕터마다 주요 질문들, 내용들을 다시금 상기시킬 수 있는 질문만 정리해서 올릴 예정이다. https://smartstore.naver.com/doggaebiboooks/products/8751961096?..

[개발] Querydsl, DSL를 사용하여 원하는 정보 조회/반환하기(코드분석)

🏕️상황 //school 리스트를 반환하는 메소드 //school_tb : id와 schoolName, tag_tb : name(태그명), user_tb : schoolId를 counting. 총 3개의 테이블을 조인하여 반환 public List findSchoolInfoWithTagsAndUserCount() { JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); QSchool school = QSchool.school; QTag tag = QTag.tag; QUser user = QUser.user; List schoolInfoList = queryFactory .select(Projections.constructor(SchoolI..