전체 글 134

[Springboot] 관계 매핑(ORM; Object Relational Mapping) N:M

외래키의 주인은 1:N, N:1에선 1이고 N이 가지고 있는다. N:M 직접 연관을 맺으면 안된다. 가운데에 테이블을 하나 더 생성하여 테이블을 거쳐 관계를 맺어야 한다. N : 1 : M 형식이 된다 예시: 여러 메뉴(N)를 가지는 식당과 여러 손님(M) 사이의 주문(1) 중간 테이블인 Order테이블 @ManyToOne @JoinColumn(name = "user_id") private User user; @JoinColumn: 외래키를 매핑할 때 사용. 저장시 user_id라는 릴레이션(튜플)에 저장한다. users(손님) 테이블 @OneToMany(mappedBy = "user") private List orderList = new ArrayList(); mappedBy: 타겟 엔티티(Order)..

Springboot 2023.07.07

[Network] HTTP/HTTPS의 차이, SSL/TLS이란?

HTTP/HTTPS HTTP와 HTTPS는 클라이언트와 서버 간 통신에 사용되는 프로토콜이다. 프로토콜이란 컴퓨터나 디지털 장치 등 다양한 기기간에 통신하기 위한 규칙과 규약이다. 사용자의 요청(주소창에 URL을 입력하거나 웹 페이지의 링크를 클릭 등) 시, 브라우저는 해당 URL로 서버에 요청(Request)을 보낸다. 이 요청을 HTTP 또는 HTTPS 프로토콜을 사용하여 이루어진다. HTTP HTTP (HyperText Transfer Protocol): 텍스트 기반으로 데이터를 전송하며 보안 기능이 없는 평문 통신 방식이다. 중간에 제3자가 데이터를 가로채거나 조작할 가능성이 있다. 80번 포트를 사용하여 데이터를 전송한다. HTTPS HTTP에 SSL/TLS을 사용하여 데이터를 암호화하여 안전하..

CS 2023.07.05

[WIL] Week 3

Fact: 있었던 일 1. Springboot를 사용하여 게시판 CRUD 구현 2. jwt, security를 사용하여 회원가입 및 login 구현 Feeling: 느낀점 CRUD 구현에는 큰 어려움이 없어 재미있었다. 로그인 기능을 구현하기 위한 security, jwt의 개념을 이해하는데 어려움을 느꼈다. Finding: 알게된 것 JPA(Java Persistence API)의 프레임워크(Hibernate)를 이용한 Java-DB를 연결하는 방법 JWT(json web token) 생성부터 전달까지의 흐름 및 코드 작성법 usernamePasswordAuthenticationFilter를 이용하여 내부 인증을 처리하는 방법 및 동작방식 @Vaild를 이용하여 Dto 또는 Entity의 값을 제한하는..

TIL, WIL 2023.07.02

[Springboot] Security

어제 Security가 Controller보다 먼저 실행된다는 것을 알았다. 하지만 오늘 직접 코드를 구현해 봄으로써 어떻게 Controller 이전에 Security가 올 수 있는지 확실히 알지 못했기에 login 기능을 구현하는데에 어려움을 겪었다. 찾아보던 도중, 좋은 notion글이 있어서 참조했다. Spring Security 인증(Authentication): 해당 사용자가 본인이 맞는지 확인하는 과정 hyeonjunju.notion.site 클라이언트가 정보를 요청하면 AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 토큰을 생성한다. AuthenticationFilter 예시코드 public Authentication attemptAuthentication(Htt..

Springboot 2023.07.01

[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) 제어의 역전, 의존성 역전 이라고도 한다.new 키워드를 통해 객체를 생성하지 않고, Spring이 객체의 생명주기를 관리하는 것을 의미한다객체의 제어권한을 Spring 으로 넘겨 개발자는 애플리케이션의 핵심 비즈니스 로직에 집중할 수 있게 한다.IoC를 사용함으로써 결합도 감소 및 응집도를 증가시킴으로써 더욱 유연한 코드작성을 가능하게 해준다.SpringContainer(Bean, DI)를 통하여 구현한다. SpringContainerBean의 생성, 관리, 의존성 주입(DI)등을 담당하여 IoC를 실현하기 위한 도구Bean: 스프링 컨테이너에서 생성하고 관리되는 객체Bean은 스프링 컨테이너에 의해 관리되므로 필요한 곳에서 주입(DI; Dependen..

CS 2023.06.28

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

[Springboot] @PathVariable vs @RequestParam

최근에 자주 헷갈렸던 @PathVariable과 @RequestParam의 차이점을 정리했다. 🔹 @PathVariableURL 경로 자체에 값을 포함시켜 전달하는 방식.RESTful한 웹 서비스에서 자주 쓰이며, 리소스를 식별하는 데 적합하다. @GetMapping("/hello/{name}/{age}")public String helloRequestPath(@PathVariable String name, @PathVariable int age) { return String.format("Hello, @PathVariable. name = %s, age = %d", name, age);}예를 들어 /hello/robbie/30 요청 시:name = robbieage = 30👉 특정 리소스에 직..

Springboot 2023.06.23