Backend 32

[spring security] 3. UserDetailsService, UserDetails

UserDetailsService, UserDetails는 유저 정보를 가져와 비교하기 위해 쓰이는 인터페이스입니다. 1. UserDetailsService UserDetailsService는 Spring Security가 사용자 정보를 가져오는 역할을 담당하는 인터페이스입니다. 보통 사용자 정보는 데이터베이스나 외부 인증 소스에서 가져오는데, UserDetailsService 인터페이스 구현 시 오버라이드 되는 loadUserByUsername 메서드는 사용자 이름을 기반으로 사용자 정보를 조회하는 역할을 합니다. public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFo..

Backend/spring 2023.08.29

[spring security] 2. configure 작성

configure 작성 스프링 시큐리티 구성 파일을 나타내며 다음과 같은 기능을 수행합니다: PasswordEncoder 빈 설정 비밀번호 인코딩을 위한 BCryptPasswordEncoder를 빈으로 등록합니다. CorsConfigurationSource 빈 설정 CORS(Cross-Origin Resource Sharing) 설정을 구성하여 특정 출처로부터의 요청을 허용합니다. SecurityFilterConfig 클래스: SecurityConfigurerAdapter를 상속받아 커스텀한 보안 필터 설정을 구성합니다. configure(HttpSecurity http) 메서드에서 보안 관련 설정을 수행합니다. CSRF 보호를 비활성화하고, CORS 설정을 적용합니다. 특정 URL 패턴에 대한 접근 권..

Backend/spring 2023.08.27

[spring security] 1. 의존성 추가, 기본 로그인 페이지

스프링 시큐리티는 인증 (Authentication) ,권한(Authorize) 부여 및 보호 기능을 제공하는 프레임워크다. 인증(Authentication) , 인가(Authorization) 인증: 해당 사용자가 본인이 맞는지를 확인하는 절차. 인가: 인증된 사용자가 요청된 자원에 접근가능한가를 결정하는 절차 1. 의존성 추가 build.gradle 2. 기본 로그인 페이지 지정하지 않으면 기본 아이디는 user이고 비밀번호는 스프링부트를 실행할 때 마다 자동으로 생성되어 터미널에 나온다. 3. name, password 지정 application.properties에 아래와 같이 username, password를 지정할 수 있다. spring.security.user.name = 1234 spri..

Backend/spring 2023.08.20

spring boot 개발환경 설정(spring initializr)

프로젝트 기본 구조를 생성할 때 spring initializr를 이용한다. 1. Extension 설치 2. Command Palette에 Spring Initialzr을 입력 *ctrl + shift + p 를 누르고면 Command Palette가 나옵니다. 저는 gradle 프로젝트를 생성했습니다!! 위의 명령어 입력후 아래 기본 정보를 순서대로 선택하게 되어있는데 프로젝트 언어 말고는 전부 그냥 엔터쳤습니다. dependency도 뭐가 필요한지 잘 몰라서 lombok만 미리 추가했습니다. 스프링 부트 버전 프로젝트 언어 (JAVA선택) 그룹 ID Artifact ID 패키지 타입 자바버전 Dependency 3. 기본 구조 생성 완료 Artifact ID는 demo라는 폴더명 이였네요ㅎㅎ

Backend/spring 2023.08.18

JAVA에서 html 다루기 (Jsoup)

JAVA에서 html을 String 데이터로 들고 있는데 특정 요소에 속성을 추가하는게 필요했습니다. 라이브러리 종류 3가지 방법(Jsoup, javax.swing.text.html3, HTML Template Engine)에 대해 알아보았는데 아래에 각 라이브러리의 사용 사례와 특징을 설명하겠습니다. 선택 시 프로젝트의 요구사항과 개발 환경을 고려하여 결정하시면 됩니다. 1. Jsoup: HTML을 파싱하고 조작하는 작업에 우수한 성능을 제공하는 라이브러리입니다. 주로 웹 스크래핑, HTML 파싱, 수정, 정보 추출 등에 사용됩니다. 특히 복잡한 HTML 문서를 다루는 데 편리하며, 간단한 DOM 조작과 선택이 필요한 경우에도 유용합니다. import org.jsoup.Jsoup; import org...

Backend/JAVA 2023.08.16

[JAVA] 패키지와 클래스 (같은 이름의 클래스 import)

패키지(package) 자바는 클래스의 구분을 위해 패키지를 사용합니다. 패키지는 클래스들을 논리적으로 그룹화하여 충돌을 방지하고, 클래스의 이름을 명확하게 지정하는 데 도움을 줍니다. FQCN (Fully Qualified Class Name) 클래스의 정규화된 이름은 패키지를 포함하여 클래스를 명시적으로 지정하는 방법입니다. 이를 사용하면 라이브러리명이 겹칠 때 충돌을 피하고 원하는 클래스를 명확히 지정할 수 있습니다. 만약 같은 이름의 클래스가 다른 패키지에 있을 때, import 문을 사용하여 해당 클래스를 구분하면 됩니다. 자바에서 import 문은 다음과 같이 사용됩니다: // 패키지가 com.example.package1인 MyClass 클래스를 import import com.example..

Backend/JAVA 2023.07.25

JAVA 문자열 비교 (== 연산자와 equals 메서드의 차이)

class Main { public static void main(String[] args) { String str1 = "Programming"; // true or false String str2 = "Programming"; String str3 = new String("Programming"); System.out.println(str1==str2); // true System.out.println(str1==str3); // false System.out.println(str1.equals(str3)); // true System.out.println(str2.equals(str3)); // true } } str1==str2: str1과 str2는 모두 문자열 리터럴인 "Programming"..

Backend/JAVA 2023.07.25

자바 메모리 구조(with Constant Pool)

자바의 메모리 구조는 다음과 같이 크게 세 가지 영역으로 나뉘어집니다. 자바 프로그램이 실행되면, JVM은 아래 세 영역을 생성하고 메모리를 관리합니다. 이렇게 분리된 메모리 구조는 자바의 안정성과 자동 메모리 관리를 가능하게 합니다. 1. 메소드 영역 (Method Area 또는 클래스 영역): 모든 스레드가 공유하는 영역으로, 클래스 정보와 클래스 변수(static 변수)가 저장됩니다. 클래스 정보는 클래스의 구조와 멤버 변수, 메서드 코드 등을 포함합니다. JVM이 실행될 때 클래스 로더에 의해 클래스 파일이 로드되고 파싱되어 메소드 영역에 저장됩니다. 상수 풀(Constant Pool): 상수 풀은 클래스 파일 내부에 위치한 특별한 메모리 영역입니다. 클래스 파일에는 리터럴 값(문자열, 정수, 부..

Backend/JAVA 2023.07.25

Java 객체 형변환 (mapper.convertValue)

자바에서 직접 형변환을 할 수 없는 경우가 있습니다. 아래는 예제입니다. @RequestMapping(value = "/convertValueTest", method = RequestMethod.POST) @ResponseBody public HashMap convertValueTest(@RequestBody Map param, HttpServletRequest request) { HashMap result = new HashMap(); try { ObjectMapper mapper = new ObjectMapper(); TestModel testModel = mapper.convertValue(param.get("testModel"), new TypeReference() {}); service.conv..

Backend/JAVA 2023.06.14

[spring] @RequestParam @RequestBody 차이점

@RequestParam과 @RequestBody는 Spring Framework에서 요청 파라미터를 받는 데 사용되는 어노테이션입니다. @RequestParam 사용법: @RequestParam("paramName") 역할: URL 매개변수를 받아올 때 사용합니다. 예를 들어, ?paramName=value 형태의 URL 매개변수에서 paramName에 해당하는 값을 받아올 수 있습니다. 기본적으로는 요청의 쿼리스트링(또는 폼 데이터)에서 해당 매개변수를 찾아 값을 바인딩합니다. required 옵션을 사용하여 필수 매개변수 여부를 지정할 수 있습니다. 기본적으로는 단일 값을 받지만, List나 배열을 사용하여 여러 값을 받을 수도 있습니다. @RequestBody 사용법: @RequestBody 역할..

Backend/spring 2023.05.25