🌟 목차 1️⃣ 데이터베이스 제약 조건 2️⃣ 데이터베이스 정규호 3️⃣ ORM 의 장단점 4️⃣ @DynamicUpdate 1️⃣ 데이터베이스 제약 조건 NOT NULL NULL 값을 저장할 수 없도록 UNIQUE 중복된 값을 저장할 수 없도록 PRIMARY KEY 기본키를 지정 FOREIGN KEY 다른 테이블과 연결하여 외래키를 지정 DEFAULT 필드의 기본값을 지정 2️⃣ 데이터베이스의 정규화 👻 정규화란 - 관계형 데이터베이스에서 데이터 모델의 중복을 최소화하기 위해 데이터를 분해하는 것 - 목표 : 테이블 간에 중복된 데이터를 허용하지 않는 것 👻 제1정규화 - 테이블의 컬럼이 원자값을 갖도록 테이블을 분해 이름 취미 토끼 밥먹기, 샤워하기 돼지 밥먹기 위와 같은 테이블은 아래로 변경할 수 ..

🌟 목차 1️⃣ PUT 과 PATCH 의 차이점 2️⃣ 자바의 컴파일 과정 3️⃣ 빌더 패턴 4️⃣ 스프링의 일부 어노테이션 1️⃣ PUT 과 PATCH 의 차이점 두 http method 모두 리소스의 업데이트를 의미한다. 그러나 약간의 차이점이 존재한다. put 은 리소스의 모든 것을 업데이트하고, patch 는 리소스의 일부만 업데이트 한다. name 김철수 age 8 nickname 닉네임입니다. 위와 같은 객체가 존재하고 닉네임을 변경해야 한다고 가정해보자. { "name":"김철수", "age":8, "nickname":"김김" } put 을 사용하는 경우에는 모든 것을 업데이트해야 하므로 모든 정보를 다시 보내야 한다. 만일 요청 시에 일부 필드를 제외하고 보내게 되면 해당 필드에는 null..

🌟 목차 1️⃣ SOLID 원칙 2️⃣ 자바의 원시타입, 참조 타입 그리고 Literal 리터럴 3️⃣ this, this() 4️⃣ final, static, static final 5️⃣ super, super() 6️⃣ 스프링의 4가지 특징 7️⃣ 스프링의 동작 과정 1️⃣ SOLID 원칙 객체지향 설계에서 지켜야 하는 다섯가지의 소프트웨어 개발원칙을 이른다. 1️⃣ - 1️⃣ SRP (Single Responsibility Principle) 하나의 기능만 해야 한다. 클래스가 제공하는 모든 서비스는 하나를 수행하는 데에 집중되어 있어야 한다. 📝 코드로 살펴보기 class Animal{ String name; String age; int roomNo; public Animal(String nam..

https://www.youtube.com/@ChanSuShin Chan-Su Shin 한국외국어대학교 컴퓨터공학부 신찬수 교수의 강의용 채널로 전체 공개 콘텐츠입니다. (죽어가던 채널을 코로나가 강제로 부활시키는군요.) 주로 자료구조와 알고리즘에 대한 내용을 다루며, www.youtube.com 교수님의 강의를 듣고 정리한 글입니다. 🧙🏻 Quick Select 알고리즘의 단계 k번째로 작은수를 찾아야 하는 상황에서, 후보군의 수 중에서 하나를 임의로 골라 피봇이라고 칭한다. (이하 p) 후보를 하나씩 p와 비교하여 작으면 S, 같으면 M, 크면 L 배열에 넣는다. S 의 크기가 k보다 작으면 S, k가 S와 M의 크기를 더한 것보다 크면 L 에 k번째로 작은 수가 위치한 것이다. 앞선 두 상황에 모두..

https://heethehope.tistory.com/186 [스프링부트] 스프링 시큐리티의 구조와 처리 과정 / 로그인은 어떻게 이루어질까? 프로젝트에서 로그인을 맡게 되었다. 이를 구현하는 과정 중에 시큐리티를 우선 이해하고 구현하는 것이 좋을 것 같아 코드를 파보게 되었다. 🧙🏻 시큐리티의 동작 순서 우선 자세한 설명에 heethehope.tistory.com 이전 글에 작성한 것을 토대로 시큐리티를 이해하고 로그인을 구현하기 시작했다. 우선, 내가 참여한 프로젝트에서는 로그인에 성공할시, jwt 액세스 토큰을 발급해주기로 했다. 이 글은 프로젝트 구현이 끝난 뒤에 작성되었기 때문에 현재의 코드와 일부 상이하며 그에 따른 오류가 존재할 가능성이 있다. 따라서 따라 치면서 참고할 만한 코드는 아닌 ..

현재 진행하고 있는 프로젝트에서 리프레시 토큰은 쿠키에, 액세스 토큰은 헤더에 담아서 통신을 하기로 했다. 얼마 전, 리프레시 토큰 구현을 마치고 로그인 시, 쿠키를 함께 반환하도록 기능을 구현했다. 그러나 이 과정에서 예상치 못한 오류들이 나왔다. 🍪 수정 전 쿠키 관련 세팅 private Cookie createCookie(TokenResponseDto tokenResponseDto) throws UnsupportedEncodingException { Cookie cookie = new Cookie(JwtTokenProvider.REFRESH_TOKEN_HEADER_STRING, tokenResponseDto.getRefreshToken()); cookie.setMaxAge(Math.toIntExac..

프로젝트에서 로그인을 맡게 되었다. 이를 구현하는 과정 중에 시큐리티를 우선 이해하고 구현하는 것이 좋을 것 같아 코드를 파보게 되었다. 🧙🏻 시큐리티의 동작 순서 우선 자세한 설명에 들어가기에 앞서, 간략한 순서에 대해서 설명하고자 한다. 전체적인 구조의 흐름을 익히는 것이기에 간략하게만 설명하겠다. 첫번째로, 사용자가 로그인을 시도하면 AuthenticationFilter 가 UsernamePasswordAuthenticationToken을 만들고 실질적인 인증 로직을 담당하는 providers 를 관리하는 AuthenticationManager 를 호출한다. AuthenticationManager는 적절한 Provider 를 호출하여 인증 로직을 수행하고 인증된다면 SecurityContextHol..
😖 틀린 코드 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); Stack s = new Stack(); List cnts = new ArrayList(); // 각 괄호의 레이저의 개수 int result = 0; int cnt = 0; // 레이저의 개수 int idx = 0; // ( 등장할 때마다 카운트 하나씩 올리고 ) 나올 때마다 하나씩 내리기 boolean isLaser = false; for(int i=0; i