java 86

[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주소가 유출될 가능성은 없는가? 있다... 연결 상태 테이블에 저장된..

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

[개발] 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..

spring boot - JPQL과 Querydsl의 개념과 차이점 파헤치기🕵🏻

JPQL과 Querydsl의 차이점은 무엇인가? 💚JPQL (Java Persistence Query Language) JPQL은 JPA에서 제공하는 객체 지향 쿼리 언어이다. 문자열 기반의 쿼리를 작성하며, 엔티티와 속성에 대한 문자열 경로를 사용하여 쿼리를 작성 JPQL은 JPA의 표준 인터페이스에 의해 정의되었기 때문에 JPQL 쿼리는 어떤 JPA 구현체를 사용하더라도 동일하게 작동. 즉, JPQL 쿼리를 작성한 후 Hibernate, EclipseLink, OpenJPA 등의 JPA 구현체를 사용하여 실행하면 결과는 동일하게 나온다. JPQL 쿼리를 특정 JPA 구현체에 종속되지 않고 이식성 있게 작성할 수 있다는 장점이 있다. JPQL은 애플리케이션의 엔티티 클래스와 관련하여 작동하며, 쿼리 실..

[개발] spring boot - db 접속 정보 암호화, application.properties 암호화

🛤️상황 application.properties에 있는 DB접속 정보가 아래의 코드처럼 그대로 담긴 코드가 깃랩에 올라가 있는 상태였다. 서버에 배포하기 시작하면 이것도 관리 대상이기 때문에 이 정보들을 암호화하는 작업이 필요했다. spring.datasource.url="접속 경로" spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username="각자의 유저네임" spring.datasource.password="각자의 패스워드" 🌸해결과정 이 정보들을 암호화하는 방식은 알아보니 굉장히 많았다. 그래서 이것저것 시도하다보니 더 오래 걸렸다. 내가 선택한 방식은 복호화하는 코드가 직접적으로는 없는 방식으로 선..

[개발]🚨ERROR - cannot find symbol method value()

🛤️상황 🌸과정 @Value 어노테이션은 스프링 프레임워크의 일부인 spring-context 모듈에 포함되어 있으므로, 해당 모듈의 의존성이 프로젝트에 제대로 추가되어야 한다길래 위의 사진처럼 실제로 그것까지 추가했다... 하지만 달라지는 것은 없었다. ㅠㅠ 🗝️해결 이 lombok.Value가 아니라 spring에서 제공하는 Value를 import 해야 하는 것이었다..!! (어이없는 실수,,ㅎㅎ)