개발/Java24 [Spring Security] 기본 id 및 password / 임의로 설정하는 법 spring security dependency를 추가해준 후 프로젝트를 실행하면, 아무 작업을 하지 않아도 첫 화면에 로그인 창이 뜬다. 이 창에서 기본 id 는 user, 기본 password는 콘솔 창에 출력된다. 이 때 임의로 설정하는 법은 아래와 같고, 이렇게 설정해주고 나면 콘솔 창에 출력되던 password는 사라진다. * application.properties의 경우 spring.security.user.name = user spring.security.user.password = 1234 * application.yml의 경우 spring: security: user: name: user password: 1234 개발/Java 2024. 2. 22. [R2DBC] Webflux에 JPA를 사용하려다가!? (1) R2DBC 공부 이유 무지한 초보 개발자1(본인)은 기술연습을 위해 Webflux에 JPA를 사용하려다가 JPA가 Reactive Programming에선 정상 작동이 어렵다는 걸 알게 되었다.... 머쓱. 그럼? Webflux엔 JDBC? 이것도 아닐 것 같은데... 해서 찾아보니 바로 나오는 내용. Webflux에는 보통 R2DBC를 쓴다... 그러면 그냥 MVC + JDBC or JPA와 성능 차이가 많을까? 도 궁금해서 찾아보니 동시성이 많은 서비스일수록 Webflux + R2DBC가 고성능을 내는 것 같았다. (유저가 적은 서비스는 그냥 JPA도 필요 없고 JDBC면 충분한 듯) R2DBC와 Webflux를 공부하며 눈여겨볼 점 실제로도 쓰이고 있는 기술인데, 아무래도 JPA 쪽에 비하면 완성도.. 개발/Java 2024. 1. 30. [JAVA] Queue 사용법 (add,offer / remove,poll / element, peek) 자바에서 큐를 사용하다가, 두 가지씩 존재하는 추가, 삭제, 검색 메소드의 차이가 궁금해져서 정리 먼저 Queue 선언 import java.util.LinkedList; import java.util.Queue; Queue queue = new LinkedList(); Queue queue = new LinkedList(); 1. add, offer queue.add(x); queue.offer(x); add와 offer 는 공통점 : 큐 맨 뒤에 값 삽입, 값 추가 성공 시 true 반환 차이점 : add는 큐가 꽉찬 경우 illegalStatieException 에러 반환 , offer는 값 추가 실패시 false 반환 2. remove, poll (+ clear) queue.remove(); qu.. 개발/Java 2023. 10. 21. [JPA] JPA 개념과 장단점은 어떤 것이 있을까? JPA 란 Java Persistence API 의 약자로 자바 ORM 기술의 표준이다. ORM 기술이란 Object Relational Mapping 객체와 관계형 데이터베이스를 Mapping하여 각각 고유의 방식으로 설계해도, 일치하는 결과를 가져다주는 기술이다. JPA는 반복적인 SQL문 사용과 데이터 전달 목적의 VO, DTO같은 객체들이 존재하는 문제들, 그리고 테이블 변경시 기존 코드의 SQL문 변경을 요구하는 상황들을 발전시키고자 나왔다고 한다. 즉, 생산성과 유지보수, SQL 종속성을 해결한 부분들은 장점이 될 것이며 직접 SQL호출하는 것보다 내부적인 동작이 많을 수 있기에 성능이 낮아질 수 있는 점 정도가 단점이 될 것 같다. JPA를 사용하는 것이 상당히 좋아보이므로 공부해보는 것이 .. 개발/Java 2023. 7. 29. [Java] Array.sort 1차원, 2차원 배열 정렬 1차원 배열 정렬은 import java.util.*; class Solution { public int solution(int[] targets) { Arrays.sort(targets, (i1, i2) -> i2 - i1); 이렇게 정렬이 가능. import java.util.*; class Solution { public int solution(int[][] targets) { int answer = 0; // 인덱스 1의 값이 작은 순으로 정렬하는 람다식 Arrays.sort(targets, (o1, o2) -> { return o1[1]-o2[1]; }); 2차원 배열 정렬은 위 방법을 사용하면 인덱스 1의 값이 작은 순으로 정렬할 수 있다. 만약 조건을 걸고 싶다면? Arrays.sort(ar.. 개발/Java 2023. 4. 16. [Springboot + JPA]Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] 이나 Failed to load ApplicationContext 또는 Error creating bean with name 'entityManagerFactory' 에러 해결법 제목에도 써놨듯, 스프링부트 jpa 프로젝트 도중 다음과 같은 에러가 출력되었다. 1. Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] 2. Failed to load ApplicationContext 3. Error creating bean with name 'entityManagerFactory' 구글링을 해보며 여러 방법을 시도해보았으나 실패. 1.javassist 추가 (gradle-groovy) implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA' (gradle-kotlin) implementation(.. 개발/Java 2023. 3. 8. [JAVA] Resource leak: 'scanner' is never closed 경고 해결법 Scanner scanner = new Scanner(System.in); 사용 시 스캐너가 열려있는 상태로 유지되므로 자원 낭비를 줄이기 위해 닫아주어야 한다. 닫아주는 방법은 scanner 사용이 끝난 후 scanner.close(); 를 이용해 닫아주면 됩니다. 예를 들면, package algorithm; import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //범위를 맞춰주기 위해 int 대신 BigInteger를 사용해주어야 한다. BigInteger A = sc.nextBig.. 개발/Java 2022. 8. 22. [Java] Set에 관련한 정리, Collection 선정 플로우 Set *데이터를 중복해서 저장할 수 없습니다. *입력 순서를 보장받지 못합니다. -> LinkedHashSet은 set임에도 입력 순서대로 저장됩니다. Set의 가장 큰 특이점은 데이터를 중복할 수 없다는 것입니다. 예를 들어 게임에서 닉네임 중복을 찾을 때, 순서는 전혀 상관없고 중복되었는지만 확인하면 되듯이 이런 상황에서 유용하게 사용할 수 있습니다. Hash에 의해 데이터의 위치를 특정하여, 삽입,삭제,수정이 매우 빠릅니다. 참고) https://st-lab.tistory.com/142 개발/Java 2022. 8. 12. [JAVA] 변수 타입 확인하는 방법 C언어나, C++에서는 typeof(변수) 로 알아볼 수 있고 Python에서는 type(변수)로 알아 볼 수 있듯 아주 간단하게 알아 볼 수 있다. import java.util.ArrayList; 로 임포트 해주고, 변수.getclass().getName() 해주면 된다. 정리----- - C,C++ : typeof(변수) - Python : type(변수) - JAVA : 변수.getclass().getName() ( java.util 임포트) 개발/Java 2022. 3. 28. [JSP] JSP에서 Include 사용방법 JSP에는 현재 JSP 파일에 다른 파일들(JSP 나 HTML)을 포함시켜 사용할 수 있다. 파라미터를 수정해서 간단히 붙일 수 있는 경우 jsp를 미리 만들어 놓고, 필요한 페이지에 뿌려주기만 하면 되기 때문에 편리하게 쓰게되는 기능이다. include에는 2가지 방식이 존재하는데, 1. include directive (지시어) 2. include action (액션) 으로 나뉜다. 공통점은 둘다 파일을 불러 온다는 것이지만 지시어는 해당 소스를 포함시킨 후 컴파일하고, 액션은 실행시점에서 해당 파일을 수행하여 결과를 포함시킨다. 지시어 사용법은 액션 사용법은 액션의 일부만 사용하려면 처럼 이용하면 된다. 개발/Java 2022. 3. 15. [intellij] java:warning:source release 11 requires target release 11 오류 해결 방법 필자의 경우 settings에서 gradle jvm 관련 설정을 했는데도 이런 오류가 떴는데, 이 경우는 sdk는 버전이 달라서 오류가 뜨는 것이었다. 1. [Files > Project Struecture] 에서 Project 탭에서 Project SDK를 본인 버전에 맞게 (필자의 경우 11버전) 설정 2. Platform Settings에서 SDKs를 클릭 후 마찬가지로 본인 버전에 맞게 설정 셋팅 후 정상 작동하는 것을 볼 수 있었다. 개발/Java 2022. 2. 21. [Intellij] 인텔리제이 실행 시 finished with non-zero exit value 1 오류 해결방법 인텔리제이, gradle 환경에서 프로젝트를 실행하면 Process 'command' 'jdk경로/bin/java.exe' finished with non-zero exit value 1 이라는 오류가 뜰 때가 있다. 이럴 때 해결 방법은 1. File > Settings에 들어가서 Build,Execution,Deployment > Build Tools > Gradle 로 들어간다. 2. 아래와 같이 설정한다. 3. Gradle JVM 부분은 본인의 JDK 버전에 맞게 경로를 잘 설정하면 된다. 필자의 경우 11버전이었고, 8버전 등 본인에 맞게 설정하면 해결. 개발/Java 2022. 2. 21. 이전 1 2 다음