분류 전체보기 149

[Springboot] login 구현

로그인이란 인증, 인가를 거치는 단계이다. 1. 인증(Authentication)과 인가(Authorization) 인증: 해당유저가 실제 등록된 유저인지 확인하는 단계 인가: 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 단계 하지만 보통의 웹 사이트들은 비연결성 무상태로 통신하기에 로그인을 구현하기에 어려움이 따른다. 비연결성 무상태 비연결성 무상태란 리소스 절약을 위해 클라이언트가 요청 시 연결, 처리 후 요청을 끊는 방식을 뜻한다. 클라이언트 - 서버 간 연결을 계속 유지한다면 서버 측에서 기하학적 비용이 발생할 수도 있기 때문이다. 그런데 요청을 끊으면 어떻게 로그인한 페이지가 로그아웃이 되지 않고 유지되는가? 보통 쿠키세션, JWT 방식을 이용하여 로그인을 유지한다. 쿠키세션 방식..

Springboot 2023.06.29

[Springboot] @Valid

오늘은 게시판 백엔드 구현 후, 로그인 환경을 구현했다. ID 조건 1. a ~ z와 숫자 0 ~ 9만 입력받을 것 2. 길이는 4글자 이상, 10글자 이하일 것 이었다. Service에서 Replace를 사용하여 구현했었다. 구현을 완료하고 난 후, 참고자료를 확인했는데 어노테이션으로도 손쉽게 기능을 구현할 수 있었다. 우선 gradle에 빈 검증기를 작성하여야 사용할 수 있다. implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation' Entity 코드 import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints..

Springboot 2023.06.28

[Spring] IoC, SpringContainer, DI

IoC (Inversion of Control) 제어의 역전, 의존성 역전 이라고도 한다. 객체의 제어권한을 개발자가 아닌 외부로 넘겨 개발자는 애플리케이션의 핵심 비즈니스 로직에 집중할 수 있게 한다. IoC를 사용함으로써 결합도 감소 및 응집도를 증가시킴으로써 더욱 유연한 코드작성을 가능하게 해준다. SpringContainer(Bean, DI)를 통하여 구현한다. SpringContainer Bean의 생성, 관리, 의존성 주입(DI)등을 담당하여 IoC를 실현하기 위한 도구 Bean: 스프링 컨테이너에서 생성하고 관리되는 객체 Bean은 스프링 컨테이너에 의해 관리되므로 필요한 곳에서 주입(DI; Dependency Injection)하여 사용한다. 스프링 컨테이너는 Beanfactory와 App..

CS 2023.06.28

[Springboot] 405 error

오늘은 Springboot로 게시판을 만들었다. 문제 처음에 비밀번호 인증을 구현하는 데에 있어서 405 에러가 발생했다. 405 에러는 client 가 server 가 요청하지 않는 method를 사용하였을 때 발생한다고 한다, 시도 Service code를 하나하나 주석처리 하면서 어디서 에러가 발생하는지 찾아봤다. 에러는 DB의 패스워드와 입력받은 패스워드를 비교하는 if문에서 원하지 않는 값을 반환한다는 걸 알게 됐다. 해결 같은 값을 넣어도 if문에서 DB의 패스워드와 입력값의 패스워드가 일치하지 않았었다. 왜그런지 찾아보니 입력값을 통째로 String으로 받아 json형식인 채로 들어와 DB의 값과 일치하지 않았다 (패스워드가 "123"이라면 입력받은 값은 "password":"123"이 들어..

TroubleShooting 2023.06.27

[Springboot] Execution failed for task ':test'

문제 Execution failed for task ':test' 테스트 실행에 실패했다고 에러가 발생했다. Execution failed for task ':test'. > There were failing tests. See the report at: file:///C:/Users/.../index.html * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. 시도1. index.html 확인 후 조치 ClassNotFoundException: PersistenceTe..

TroubleShooting 2023.06.26

Java - DB 연결2: ORM

ORM이란 객체와 관계형DB(RDBMS)의 데이터를 자동 매핑(연결)해주는 도구이다. Java에서는 JPA, Hibernate이 있다. RDBMS는 테이블 형태로 데이터를 저장하고 java는 객체라는 개념으로 데이터를 표현한다. - JPA(Java Persistence API) JPA는 인터페이스와 어노테이션을 정의하고, 이를 사용하여 객체와 테이블 간의 매핑 규칙을 정의한다. 이를 구현한 프레임워크(예: Hibernate)와 연결하여 사용한다 - Hibernate: 자바 프로그래밍 언어를 기반으로 한 오픈 소스 ORM(Object-Relational Mapping) 프레임워크 - JPA에서 구현한 인터페이스와 어노테이션을 사용하여 ORM을 구현 - 객체 지향적인 방식으로 DB(데이터)를 다룰 수 있다...

DB 2023.06.26

Java - DB 연결1: JDBC

DB 데이터 접속이란 코드와 DB의 데이터를 연결하는 것을 의미한다. SQL Mapping과 ORM 방법 두가지가 존재하며, 이 글에서는 SQL Mapping 방식인 JDBC에 대해 알아볼 것이다. 우선 SQL Mapping이란, 코드 내에 SQL을 직접 입력하여 DBMS에 접속하는 방법이다. ORM에 비해 사용하기 복잡하며, Java에선 JDBC이 SQL Mapping 방식을 통하여 연결시킨다. JDBC란? JDBC는 "Java Database Connectivity"의 약자로, 자바의 표준 API이다. 자바 프로그램에서 데이터베이스와 연결하고 상호 작용하기 위한 API(응용 프로그램 인터페이스)이다. JDBC를 사용하면 자바 환경으로 관계형 데이터베이스에 액세스하여 데이터를 검색, 삽입, 업데이트, ..

DB 2023.06.26

WIL : Week02

Fact: 있었던 일 알고리즘 문제를 총 3~40문제 정도 풀면서 중간중간 스트림에 대해 공부할 수 있었다. Feeling: 느낀점 알고리즘 문제를 푸는 것은 재미있었지만, 낯선 알고리즘 문제가 나왔을 때는 어려움을 느꼈다. 스트림에 대한 공부는 조금 지루해서 집중이 잘 되지 않았지만, 실제로 활용할 때는 재미있었다. Finding: 알게된 것 알고리즘 지식이 없으면 해결할 수 없는 문제에도 포기하지 않고 도전하여 방향벡터와 유클리드 호제법, 재귀함수의 적절한 활용법을 익혔다. 자료구조의 적절한 선택과 활용 방법, 그리고 Hash, Tree, Linked List의 차이점을 이해할 수 있었다. 간단한 StreamAPI와 사용법에 대해 이해하고 활용할 수 있었다. Future: 알게된 것을 어떻게 활용할 ..

TIL, WIL 2023.06.24

[Springboot] PathVariable vs RequestParam

오늘부터 본격적인 주특기인 SpringBoot가 시작됐다. 이해해야 할게 많아서 5시간짜리 강의를 12시간 동안 들었는데 전부 듣지 못하였다. 특히 PathVariable과 RequestParam이 헷갈려서 정리를 했다. PathVariable: URL 경로의 일부를 변수로 사용하는 데에 사용되며 RESTful 한 웹 서비스에서 자주 사용된다. //@PathVariable public String helloRequestPath(@PathVariable String name, @PathVariable int age) { return String.format("Hello, @PathVariable. name = %s, age = %d", name, age); } RequestParam: URL의 쿼리 매개변..

Springboot 2023.06.23

Springboot

lombok : 필수적인 메서드와 생성자 등을 런타임 시점에 바이트를 조작하여 생성. 코드절약을 도와주는 라이브러리 MVC(Model-View-Controller): 애플리케이션을 데이터 모델(Model), 사용자 인터페이스(View), 비즈니스 로직(Controller)으로 구분하여 개발 코드 재사용, 유지 보수성, 개발자 간 협업을 용이하게 한다. Model: - 애플리케이션의 데이터와 비즈니스 로직을 담당 - 데이터 유지 및 조작하는 역할 - 데이터의 변경 시, View나 Controller에게 알림 View: - 사용자 인터페이스(UI) 부분 - 데이터를 시각적으로 표시하고 사용자 입력을 받는 역할 - 주로 템플릿, HTML, CSS 등을 이용하여 구현됨 Controller: - Controlle..

Springboot 2023.06.23