java 86

🚨ERROR - Exception in thread "main" org.h2.jdbc.JdbcSQLException: Database may be already in use:

🏕️상황Exception in thread "main" org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-161]H2 데이터베이스에 접속하려고 시도하는데 위와 같은 오류가 발생했다. (오류 고칠 생각에 실제 화면은 캡처하지 못했다..) 원인은 크게 2가지이다.동시 접근: 동일한 H2 데이터베이스에 여러 프로세스나 스레드에서 동시에 접근하려고 할 때 발생할 수 있다. 데이터베이스가 한 번에 하나의 프로세스나 스레드만 접근할 수 있도록 설계되어 있기 때문에 ..

Test code - MockMvc란?

💟 MockMvc란?MockMvc는 Spring MVC의 웹 계층을 테스트하기 위해 사용되는 도구로, 웹의 컨트롤러를 실제 서버를 시작하지 않고도 테스트할 수 있게 해 준다. 이를 통해 웹 계층의 독립적인 테스트를 할 수 있다. MockMvc를  사용하면 spring mvc의 동작을 Mocking하여 http 응답과 요청을 시뮬레이션할 수 있다. 💟 Mocking이란?모킹은 소프트웨어 테스트에서 특정 객체나 동작을 가짜로 만들어 실제 객체나 동작을 대체하는 기술이다. 이를 통해 독립적이고 격리된 테스트 환경을 구축할 수 있다.  @SpringBootTest // 테스트용 애플리케이션 컨텍스트 생성@AutoConfigureMockMvc // MockMvc 생성 및 자동 구성class TestContro..

[11강] 네이버 로그인 완료

🤍[네이버 개발자 사이트]에 들어가서 다음과 같이 진행하여 id와 비밀번호를 발급받아 준다. 🤍앞서 진행한 것과 마찬가지로 해당 값을 각각 코드에 넣어준다. # naver OAuth2 설정 spring.security.oauth2.client.registration.naver.client-id=vFzQdx0GIL_gWvfx9i1k spring.security.oauth2.client.registration.naver.client-secret=[비밀번호 값] spring.security.oauth2.client.registration.naver.scope=email,profile spring.security.oauth2.client.registration.naver.client-name=Naver spri..

[10강] 페이스북 로그인 완료

🤍받은 인증 정보들을 코드에 기입해 주기 색깔에 맞춰서 각각 정보들을 기입해 주면 된다. 🤍oauth에서 제공하는 규격에 맞게 요청 url을 작성한다. OAuth2 클라이언트 애플리케이션에서 정의한 OAuth2 공급자(여기서는 Facebook)에 대한 인증을 시작하라는 요청을 나타내는 것이다!! ( OAuth2 클라이언트의 구성에 따라 "facebook" 부분이 다른 OAuth2 공급자 이름으로 대체될 수 있다.) 🤍1차 테스트(?)로 요청을 해본다...!! (성공) 로그인을 하고 나면 다음 사진에 있는 과정을 거치게 된다. (이 강의 이전에 작성해 놓은 코드가 작동을 하는 것이다 - oauth 로그인에 대한 처리를 다 해놓았기 때문에 바로 기본적인 정보가 따라온다.) 핑크색 박스의 내용을 보면 face..

[9강] 구글 로그인 및 자동 회원가입 진행 완료

@Data public class PrincipalDetails implements UserDetails, OAuth2User { private User user; //해당 user의 권한을 리턴하는 곳!! private Map attribute; //OAuth2 인증 시 사용자의 속성 정보를 저장하기 위해 선언된 필드 // 일반 로그인 때 사용하는 생성자 public PrincipalDetails(User user){ this.user = user; } //OAuth를 사용하여 로그인하는 생성자 public PrincipalDetails(User user, Map attribute){ this.user = user; this.attribute = attribute; } @Override public C..

🤦🏻‍♀️고민하기 - 중복되는 코드 리팩토링 - 피드백 게시판 CRUD

🏕️상황게시판의 형식으로 (개발 관련해서) 웹 사이트의 오류, 개선사항, 에러 발견 등의 사항들을 올릴 수 있도록 개발하는 것이 목표였다.게시글에 대한 권한 부여를 어떻게 구현할 것인지 살짝 고민이 되었지만 spring security를 사용하지 않아도 복잡하거나 어렵지 않게 구현할 수 있을 거 같아 일단은 단편적인 방법으로 구현하기로 했다.기능 개발을 다 하고 보니 여러 메서드들에 공통적으로 사용되는 부분이 있었고, 그걸 보니 최근에 배운 내용이 생각났다. (아래와 같은) 🔽공통적으로 사용되는 부분은 끄집어 내서 따로 정의한다. ⭐리팩토링 전 코드@Servicepublic class feedbackService { @Autowired private feedbackRepository rep..

[java] Optional - Optional의 매핑 메소드

🏕️상황 Optional을 사용해야 하는 상황에서 코드를 좀 더 간결하게 하고자 하는 방법을 찾다가 발견한 것이 Optional의 map 함수였다. map 함수라고 하면 java 컬렉션의 map 함수만 생각이 나서 의아했다... '그 map 함수가 optional에서도 연산을 수행하나...?'라는 생각이 들었다. 알아보니 optional 객체의 map() 함수가 따로 존재했던 것이다!!! 그래서 오늘은 아래의 주제에 대해 알아보려고 한다. Optional의 매핑 메소드 optional의 매핑 메서드는 map() 및 flatMap() 이렇게 두개의 주요 메소드를 포함한다. 이러한 메소드를 사용해서 Optional 안의 값을 변환하거나 매핑할 수 있다. 💚map() 메소드 Optional 안의 값을 변환하려..

[8강] Authentication 객체가 가질 수 있는 2가지 타입

로그인 방식은 2가지가 있다. 일반 로그인 aouth 로그인 > 일반로그인으로 접근하려면 controller에서 @AuthenticationPrincipal PrincipalDetails userDetails > 구글로그인으로 접근하려면 controller에서 @AuthenticationPrincipal OAuth2User oauth => 일반 로그인은 PrincipalDetails 에서 유저 정보를 가지고 오는 것이고, oauth 로그인에서는 OAuth2User에서 유저의 정보를 가지고 오는 것이다. 이처럼 서로 다른 두 로그인 방식에 접근하기 위해서 서로 다른 방식을 사용해야한다, 🗝️해결 기존 PrincipalDetails 클래스는 1) 아래처럼 UserDetails만 구현하는 상태였지만 2) 추가..

[7강] 구글 회원 프로필 정보 받아보기

🏕️상황 현재 상태는 구글로 로그인을 완료한 것까지다. 로그인만 했을 뿐 그 뒤에 어떻게 처리를 할지는 아직 구성하지 않았다. 💦과정 .userInfoEndpoint() OAuth 2.0 로그인 프로세스의 일부로 사용자 정보를 가져오는 데 관련된 설정을 제공한다. 이 메서드는 사용자 정보 엔드포인트(User Info Endpoint)와 관련된 구성을 정의한다. .userInfoEndpoint()는 사용자 정보를 가져오는 방법과 구조를 설정한다. .userService() 사용자 정보를 가져온 후에 해당 정보를 어떻게 처리할지를 정의한다. principalOauth2UserService는 사용자 정보를 처리하기 위한 사용자 정의 서비스 빈(Bean)을 참조한다. 사용자 정보를 가져온 후에, 이 메서드를 사..

[6강] 구글 로그인 준비

1. 해당 사이트에 접속한다. https://console.cloud.google.com/projectcreate?previousPage=%2Fapis%2Fdashboard%3Fhl%3Dko%26project%3Dsrpingboot-outh&organizationId=0&hl=ko Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com 2. 프로젝트를 하나 생성한다. 3. User Type을 설정한다. (1단계에서 이메일만 필수적으로 작성해야 해서 작성하고 그 뒤에 적어야 하는 곳들은 모두 skip) 4. 사용자 인증 정보 만들기 여기서 https로 요청했는데 그러면 로컬 프로젝트용으로는 오류가 난다. http로 해야 한다. --------------..