전체 글 119

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="각자의 패스워드" 🌸해결과정 이 정보들을 암호화하는 방식은 알아보니 굉장히 많았다. 그래서 이것저것 시도하다보니 더 오래 걸렸다. 내가 선택한 방식은 복호화하는 코드가 직접적으로는 없는 방식으로 선..

[개발외]멘토링 진행 - 2023/07/10

🏕️상황 어제인 2023/07/10에 학교에서 멘토링을 진행하였다. 오늘 멘토링 내용/주제 : AWS 배포 교수님(멘토)의 지도하에 aws에서 이것저것 설정하고 여러 가지 값들을 선택하는데 모르는 단어들이 쏟아져 내렸다. 일반적인 개발 용어가 아니라 인터넷적인(?) 용어가 대부분인 느낌...!! 예비 개발자 인생 2년이 넘어가는데 처음 해보는 이 중요한 관경을 놓치고 싶지 않아서 열심히 참여했다. (한 대의 컴퓨터로 진행하니 나는 그냥 열심히 모니터 쳐다보기ㅎㅎ) 중간에 바쁜 와중에도 간단하게 메모를 하였다. (워낙 빠르게 지나가서 상세하게는 못하고 대강 했다. ) 🗝️메모한 내용들 사용자가 밤까지 계속해서 있는지, 낮동안에 잠깐 스다가 밤에는 이용자가 줄어주는지에 따라서 적당히 가격등을 따져서 선택한다..

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

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

[개발] 학교 전체 조회 - 데이터 필터링 + 조인하여 값 가지고 오기

🛤️상황 학교 테이블에는 15개의 컬럼이 존재하는데 프론트 측에서 요구한 반환 정보는 school_tb에서 3개, tag_tb에서 1개이다. 그런데 tag_tb에서 하나의 컬럼(name)을 반환하기 때문에 간단해 보일지 모르지만 schoolId가 같은 모든 name을 반환해야 하기 때문에 List의 형태로 반환해야한다. 개념적으로는 school_tb와 tag_tb가 조인된 관계를 맺고있지만 실제로 entity 클래스끼리 조인관계를 맺고있지 않기 때문에 sql을 작성하고, 그것을 하나의 객체에 담는 것이 굉장히 오래걸렸다.

[개발] spring boot - JPQL(@Query)를 사용하여 데이터 거르기

🛤️상황 tag 테이블에는 아래와 같이 4개의 칼럼이 있는데 프런트로 넘겨줄 때는 이 중 name, code만 필요. 기본으로 제공하는 JPA 메소드 안에서 해결하려고 했지만 따로 SQL문을 작성해야 했음. 🗝️과정/해결 아래의 코드 하나만으로 tag, dept의 정보를 모두 각각의 테이블에서 조회돼서 다른 school 테이블의 필드들과 함께 sch에 저장이 되었다. Optional sch = schoolRepository.findById(id); 하지만 저렇게 자동으로 조회가 되면 tag 테이블에 있는 모든 필드들을 가지고 오게 되니까 안됨. 아래의 필드들을 지워버리니 자동으로 조회되지 않고, 위에서 작성한 @Query을 통해서 원하는 값들만 DTO에 담아 반환할 수 있었다. (dept=학과도 동일한 ..

[개발] intellij - h2 DB에서 MySQL로 변경하기

🛤️상황 처음에 이 프로젝트(한이음)를 시작할 때 가볍게 h2 DB를 사용하다가 추후에 MySql로 변경하기로 했다. 지금 시점에서 곧 서버에 올려 배포를 해볼 예정이라 오늘 변경하기로 하였다. 이미 내 컴퓨터에는 mysql이 설치된 상태 프로젝트도 h2로 잘 구동되고 있는 상태 connector는 내가 따로 프로젝트에 import 한 기억은 없지만 프로젝트 생성 시에 다른 백엔드 팀원이 import 한 것으로 추정됨. (connector 없이 구동되지는 않을 테니까) 🌸과정/해결 application.properties 파일에 설정 정보를 확실하게 기입하기 build.gradle에 필요한 의존성 확실히 기입

[개발] 기능추가 - school 데이터의 추가(dept, tag 테이블)

🛤️상황 기존에 학교에 대한 정보에 해당 학교에 대한 학과나 태그에 대한 정보는 반환하지 않았다. 하지만 반드시 필요한 정보들이기 때문에 그 부분을 내가 개발하기로 하였다. 학과나 태그는 하나의 학교에 여러 가지 값들을 갖는 테이블이기 때문에 school 테이블의 입장에서 학과와 tag는 @OneToMany 관계이다. 🗝️과정/해결 @OneToMany(mappedBy = "schoolId", cascade = CascadeType.ALL) private List tag; tag는 여러 값들이 하나의 school에 존재하니 List 형태로 저장하기로 했다. school 테이블의 깔끔함(?)을 위해서 db에 직접 저장되는 방식이 아닌 것으로 선택했다. (학과(dept)도 동일한 방식으로 진행) @ManyTo..

[개발]🚨ERROR -java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row:

외래 키 제약 조건을 위반하여 자식 행을 추가하거나 업데이트할 수 없을 때 발생하는 예외로 데이터베이스에서 외래 키 관계를 갖는 테이블 간의 일관성을 유지하기 위해 발생합니다. 일반적인 해결방법 외래 키 또는 유니크 제약 조건을 확인하고, 데이터베이스 스키마를 수정하여 제약 조건을 준수하도록 조정 작업 전에 데이터베이스 상태를 검사하여 제약 조건을 위배하지 않는지 확인 참조하는 테이블에 레코드를 먼저 추가한 후, 참조받는 테이블에 레코드를 추가 내가 해결한 방법 참조하는 테이블의 레코드를 먼저 삽입한 뒤에 참조받는 테이블의 레코드를 삽입해봤지만 여전히 실패... 그래서.... DB에 있는 테이블을 한번에 동시에 삭제한다. 참조하는 테이블의 레코드를 먼저 insert 한다. 그 뒤에 참조받는 레코드를 in..

[개발]🚨ERROR - java.lang.IllegalArgumentException: rawPassword cannot be null

🛤️상황 회원가입/로그인이 기존에 GET방식이었어서 POST 방식으로 바꾸려 하는데 이러한 오류가 발생하였다. 🌸과정 401 Unauthorized는 클라이언트 요청이 필요한 인증 자격증명을 제공하지 않았거나 인증이 실패한 경우에 사용되는 HTTP 상태 코드입니다. 즉, 클라이언트는 요청한 리소스에 접근하기 위해 유효한 자격증명(사용자 이름과 비밀번호 또는 인증 토큰 등)을 제공해야 하지만, 제공하지 못하거나 인증에 실패한 상태입니다. 라는 이유로 BCryptPasswordEncoder도 수정해 보고, springSecurity 쪽도 이것저것 시도(코드추가, 클래스 추가) 하느라 3시간이 흘렀다... 🗝️해결 @RequestBody를 매개변수에 붙이니 바로 해결되었다.... 이러한 기초적인(?) 실수를 ..