분류 전체보기122 spring boot 3 Query Dsl적용 (네이티브 쿼리 작성으로 N+1문제 해결) 지금 까지 모든 포스트를 확인하면 위처럼 포스트의 개수만큼 쿼리를 조회하였다. (Fatch type을 LAZY로 하여서 포스트에 걸려있는 좋아요의 수를 나중에 불러와서 발생하는 문제였다) 계속 고쳐야지 하다가 이번에 고쳐버렸다. JPQL로 FetchType.LAZY와 Fetch join 하는 방법고 batch 사이즈를 조정하는 방법등 다양한 방법이 있는것 같았지만 나는 query dsl을 적용하여 해결해보고 싶어 진행하였다. 그래서 현재는 아래처럼 한 번의 쿼리로 해결되는 것으로 보인다. 어째서 인지는 모르겠는데 테스트 코드에서는 N+1문제가 발생하지 않았다..? 그래서 한 번 더 확인해 보는 걸로 Query dsl을 스프링 부트 3.0 버전에 적용하는 방법은 블로그와 강의를 참고해서 세팅하였다. [세팅.. JPA 2023. 3. 31. test 환경 분리하기, 폼 객체 mock mvc 테스트 방법 테스트 데이터 베이스와 서버 데이터 베이스 나누기 중복되는 필드가 있거나, 모든 포스트 확인 등을 테스트 하기 어려워서 분리하기로 했다. application.properties #테스트용 데이터 베이스와 분리 spring.profiles.default=local application-local.properties spring.config.activate.on-profile=local spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mar.. Spring,SpringBoot 2023. 3. 30. swagger에서 멀티파트 폼 데이터 올리는 법 프로필 이미지 올리기 어제 이미지 테이블하고 이미지 전송만 확인하고 자서 오늘은 회원가입 시에 이미지를 올리고 기존에 저장되어 있던 이미지가 있으면 삭제하고 재 업로드하도록 했다 근데, swagger 에서 테스트가 안 돼서 계속 그거 하다가 시간 순삭 🥲🥲🥲 단일 파일로 업로드 하는건 잘 되는데 로그인 객체 + 멀티파일을 업로드하려니까 로그인 객체가 인식이 안되거나, 미디어 타입이 수용할 수 없는 미디어 타입으로 나와서 그냥 리엑트 페이지로 확인했다. (나중에 다시 확인..) 하나씩 @requestPart나 @requestParam으로 하면 되는거 같긴 한데 기존에 구성되어 있던 코드에서 조금만 수정하고 싶어서 그냥 원래 있던 코드를 사용했다. +) 스웨거 에서 폼 객체나 멀티타입파일을 올려서 테스트해볼.. Spring,SpringBoot 2023. 3. 29. [백준, JAVA] boj 17135 캐슬디펜스 골드3 🔗 문제링크 🔗 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 🌟 생각 흐름 🌟 우선 궁수의 배치를 생각한다, 궁수는 DFS로 계산하여 3자리를 구하면 된다. DFS로 배치 후에 해당 환경에서 궁수가 죽일 수 있는 최대 적의 수를 구한다. 모든 적에 대해서 궁수와의 거리를 비교한다. 만약 거리가 D이하이고 현재 궁수의 최소 거리의 적보다 가깝다면 교체한다. 최소 값 선택 기준 만약 현재 최소 값보다 작으면 교체한다. 만약 최소 값과 같은면 더 왼쪽에 있는 걸 선택한다 값 비교가 끝난이후에는 한 칸 이동한다. ( 가로축 .. 알고리즘 2023. 3. 29. @CreationTimestamp, @PrePersist(JPA라이프 사이클 어노테이션) @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @CreationTimestamp private LocalDateTime createdDate1; //생성 시점 private LocalDateTime createdDate2; //생성 시점 @UpdateTimestamp private LocalDateTime updatedDate; //업데이트 시점 @PrePersist public void prePersist(User user) { // 저장 전에 필요한 작업 수행 createdDate2 = LocalDateTime.now(); } } .. JPA 2023. 3. 28. [TIL]0327 : ERD(식별관계),@PrePersist 1. 식별관계와 비식별관계 https://www.erdcloud.com/ 여기서 ERD를 그리는데 관계를 추가할때 Identifying Relationship, Non Identifying Relationship가 확실히 구분이 안 가서 찾아봤다. Non Identifying Relationship: 비식별관계 (점선으로 표시) - 자식테이블의 일반 속성을 부모가 외래키로 사용하는것이다. - 즉, 자식 entity는 부모의 존재여부와 상관없이 독립적으로 존재할 수 있다. ( 데이터를 자유롭게 수정할 수 있다) - 부모가 없어도 자식이 존재할 수 있어 데이터 무결성이 보장되지 않아서 별도의 로직이 필요하다. Identifying Relationship : 식별 관계 (실선으로 표시) - 부모테이블의 기본키.. 2023 2023. 3. 28. MVC, MVC1, MVC2 그리고 스프링의 MVC처리과정 MVC(Model-View-Controller) 패턴 소프트웨어 디자인 패턴 중 하나로, 사용자 인터페이스와 비즈니스 로직을 분리하여 구현하는 방법을 제공하는 패턴이다. MVC 패턴은 애플리케이션을 세 가지 역할로 분리된다. 모델(Model) 애플리케이션의 데이터와 비즈니스 로직을 담당한다. 모델은 데이터베이스, 파일, 메모리 등에서 데이터를 읽어오거나 저장하는 역할을 수행하며, 비즈니스 로직을 처리하여 데이터를 가공한다 뷰(View) 사용자 인터페이스를 담당한다. 뷰는 모델에서 처리된 데이터를 출력하거나 사용자의 입력을 받아 모델에 전달하는 역할을 수행한다 컨트롤러(Controller) 모델과 뷰 사이의 인터페이스 역할을 수행한다. 컨트롤러는 사용자의 요청을 받아 해당 요청을 처리할 모델을 선택하고, .. Spring,SpringBoot 2023. 3. 27. [TIL] stomp origin문제, socket에서의 JWT 처리 1. 리엑트 --force 명령어로 설치 (npm install react --force) 모르고 계속 --force로 다운로드하다가 기존 파일과의 버전 호환문제가 발생해서 npm start를 하니까 멈춰 버렸다. 그리고 친절하게 경고 문구를 날려준다. lock json파일과 이상하다고 하는 부분만 json부분에서 삭제한다. 그리고 npm-module폴더를 삭제하고 하고 다시 npm install을 하면 된다! (나는 부트스트랩 버전 문제였다) 2. origin 문제 계속 소켓을 실행시키니까 oringin 문제가 나와서 에픽으로 테스트 못했는데 알고 보니 스프링 시큐리티에서 설정했던 것이 문제였다. 소켓 테스트를 포스트 맨으로 계속 시도했는데 소켓이 처음에 연결되는 것만 확인하고 그냥 리엑트로 연결했다... 2023 2023. 3. 24. Stream 스트림 배경 이전까지는 많은 양의 데이터 처리를 위해 배열이나 컬렉션을 이용해서 처리하며 반복문을 사용해서 접근해야 했다. 해당 방법은 코드가 길어지고 가독성이 떨어진다. 이 문제점을 해결하기 위해 스트림 API를 도입했다. 즉, 스트림은 자바 컬렉션과 배열 등의 데이터를 다룰때 유용한 기능으로 기존 데이터를 변경하지 않고 다양한 연산을 하여 결과를 새로운 스트림으로 반환한다. 장점 스트림은 데이터 소스를 추상화 하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 둔 것이다. 이를 활용하여 코드의 재사용성을 높이고 간결하고 이해하기 쉽게한다. 또한, 병렬 처리를 쉽게 할 수 있다. 특징 데이터 소스를 변경하지 않고 한번 생성되면 소모하면서 내부에서 반복하기 때문에 다시 재사용이 불가능하다. 다양한 연산으로.. JAVA 2023. 3. 19. [백준 Java] 16397 탈출 BFS 골드 4 🔗 문제링크 🔗 16397번: 탈출 첫 번째 줄에 N (0 ≤ N ≤ 99,999), T (1 ≤ T ≤ 99,999), G (0 ≤ G ≤ 99,999)가 공백 하나를 사이에 두고 주어진다. 각각 N은 LED로 표현된 수, T는 버튼을 누를 수 있는 최대 횟수, G는 탈출을 위해 똑같이 www.acmicpc.net 🌟 생각 흐름 🌟 단순 bfs방법으로 풀이했다 기존의 숨바꼭질 하고 비슷하다 2022.09.28 - [알고리즘] - [백준]12851_숨바꼭질 2 [백준]12851_숨바꼭질 2 [문제 링크] boj 12851 숨바꼭질 2 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 1.. 알고리즘 2023. 3. 19. [백준 Java] 1946 신입사원 실버1 , 그리디 🔗 문제링크 🔗 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 🌟 생각 흐름 🌟 먼저 이 문제는 순위로 표기하므로 높은 점수가 아닌 낮은 점수가 우선순위가 높다. 문제는 내가 모든 지원자들보다 1,2차 점수중 하나의 순위라도 더 좋아야(낮아야) 한다는 것이다. 1 Try (시간 초과) : 단순 그리디 문제로 생각하고 접근했다. 1차 점수 기준으로 정렬을 한다. 즉 정렬된 후에 앞에 있는 사람들이 현재 자신보다 무조건 1차 점수는 높은 것(순위는 낮은 것)이다. 따라서 앞에 있는 모든 사.. 알고리즘 2023. 3. 9. 람다식(Lambda Expression) 람다식 메서드를 하나의 식으로 표현한 것 익명 함수의 한 종류이다. 람다식을 통해서 메서드를 변수처럼 다루는 것이 가능해졌다. 작성법 //기존 반환 타입 메서드이름(매개변수 선언){ 문장들 } //람다식 (매개변수 선언) -> { 문장들 } //람다식의 선언된 매개변수의 타입이 추론 가능한 경우 생략 가능하다(대부분 생략 가능하다) //매개변수의 타입을 선언해야 하면 (int a) -> a*a //와 같이 괄호 안에 타입 선언을 해야하지만 //타입을 선언하지 않아도 되는 경우라면 a -> a*a// 와 같이 생략 가능하다. 람다식의 장점 불필요한 코드를제거해서 코드가 간결해지고 가독성이 올라가는 장점이 있다. 또한 메서드를 전달가능하게 하면서 생산성이 높아진다. 람다식의 단점 디버깅이 어렵고, 비슷한 기.. JAVA 2023. 3. 8. 이전 1 ··· 3 4 5 6 7 8 9 ··· 11 다음