JPA 단 방향(연관 관계)
·
Spring Boot
Post : 게시글 Reply : 댓 글 post가 주인이지만 reply안에 있는 private Post post; 로 접근하는 게 좋다. 일 대 다 1 > N post 테이블에 @OnetoMany @JoinColum(name = "POST_ID") 조인 컬럼 안 쓰면 하나의 테이블이 더 생긴다, private List replies = new ArrayList (); reply를 칼럼으로 인식하지 말고 연관 관계로 인식해라 @OnetoMany 쓸 때는 조인 칼럼도 같이 써서 fk의 이름도 정해주는 게 좋다. 이렇게 일대다로 연결을 해봤다. 디비에서 조회 SELECT * FROM POST; SELECT * FROM REPLY; Post에 Reply Id 가 있는 게 아니라 Reply에 Post Id 가 ..
HTTP, HTTPS 정의와 차이점
·
Computer Science
HTTP (하이퍼텍스트 전송 프로토콜) HTTPS (보안 소켓 레이어 전송 프로토콜)는 웹 통신에 사용되는 두 가지 프로토콜이다. HTTP는 인터넷에서 데이터를 전송하기 위해 사용되는 프로토콜로, 웹 브라우저와 웹 서버 간에 텍스트를 주고 받을 수 있도록 해준다. HTTP는 암호화되지 않은 텍스트로 통신하기 때문에 데이터가 평문으로 전송되므로 보안에 취약하다. 반면, HTTPS는 HTTP와 비슷한 방식으로 동작하지만, 보안 기능이 추가된 프로토콜이다. HTTPS는 SSL(Secure Socets Layer) 또는 TLS(Transport Layer Security)프로토콜을 사용하여 데이터를 암호화하고 인증서를 통해 웹 서버의 신뢰성을 확인한다. 이로써 데이터의 기밀성과 무결성을 보호할 수 있으며, 중간..
API, REST API, REST FUL API
·
API
API(Application Programming Interface) API는 응용 프로그램에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻 한다. 웹은 요청과 응답으로 작동한다. 클라이언트가 요청을 하게되면 서버는 이를 받고 여러 가지 동작을 수행 해 응답해준다. 우리가 네이버에서 회원가입 버튼을 누르게 되면 회원가입을 도와주는 API가 동작한다. 한 프로그램에서 다른 프로그램으로 데이터 주고받기 위한 방법 ex) 식당에서의 메뉴판 티비 리모컨 손님 > 메뉴판 > 주방 손님 > 리모컨 > 티비 REST API(Representational State Transfer) 특징 REST API(Representational State Transfer API)는 웹 서비..
Get, Post, Redirect
·
Spring Boot
"Get, post, redirect" 패턴은 사용자가 웹 페이지를 제출하고 서버가 이를 처리하고 응답을 반환하는 과정에서 사용된다. 이 패턴은 일반적으로 웹 애플리케이션에서 사용자 인터페이스를 보완하는 데 사용된다고 한다. (웹 애플리케이션에서 사용되는 HTTP 메서드와 기능을 나타낸다) 각 특징, 사용방법 및 어떤 동작을 할 때 사용하는지 알아보자. 1. GET 정보를 요청하기 위한 메소드이다. 서버로부터 데이터를 요청하고 응답으로 데이터를 받아온다. 데이터를 URL의 쿼리 매개변수나 경로 변수로 전달할 수 있다. 요청이 캐시될 수 있으며, 브라우저 히스토리에 기록된다. 안전한 연산으로 간주되며, 동일한 요청을 여러 번 보내더라도 동일한 결과를 얻어야 한다. 2. POST 서버에 데이터를 제출하기 위..
타임리프(Timeleaf)
·
Spring Boot
타임리프(Timeleaf)는 서버 사이드 java 템플릿 엔진으로, 웹 애플리케이션 개발에서 동적인 HTML, XML, JSON 등의 문서를생성하는데 사용된다. 타임리프의 특징 자바와 자연스러운 통합 : 자바 코드와 웹 템플릿을 쉽게 통합할 수 있다. 심플하고 직관적인 문법 : 간결하고 읽기 쉬운 템플릿 문법을 제공한다. 다양한 템플릿 기능 : 조건문, 반복문, 변수 선언, 템플릿 상속 등 다양한 기능을 제공한다. 템플릿 캐싱 : 템플릿의 변동 없이 재사용 가능한 캐시를 생성하여 성능을 향상시킨다. 타임리프의 문법 변수 표현식 : ' ${변수명} ' 형태로 변수를 템플릿에 표현할 수 있다. OGNL(객체 그래프 탐색 언어) 표현식 : ' *{표현식} ' 형태로 객체의 속성에 접근하고 출력할 수 있다. 조..
이진탐색(Binary Search)
·
Algorithm
정렬된 상태의 데이터에서 특정 값을 빠르게 탐색하는 방법 - 찾고자 하는 값과 데이터 중앙에 있는 값을 비교 - 찾고자 하는 값이 더 작으면 데이터 왼쪽 부분에서 이진 탐색 - 찾고자 하는 값이 더 크면 데이터 오른쪽 부분에서 이진 탐색 알고리즘 시간 복잡도 : O(logn) 이진 탐색의 구현 1. 탐색의 대상이 되는 자료들이 array[low] 에서부터 array[high]에 들어있다고 가정하자. (정렬되어 있어야 함) 즉 어떤 시점에서 탐색되어야 할 범위는 low에서 high 까지가 된다. 맨 처음 low에는 0번 인덱스의 값, high에는 n-1번 인덱스의 값이 들어갈 것이다. 2. low와 high값에 의거해 중간값mid 값은 (low + high) / 2이다. 즉, array[low] ~ arr..
백준 2003 투포인터
·
Codding_Test/BaekJoon
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class baeckjoon_2003 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int m = ..
투포인터 (Two Pointers)
·
Algorithm
배열에서 두 개의 포인터를 사용하여 원하는 결과를 얻는 방법 두 개 포인터의 배치 방법 - 같은 방향에서 시작 : 첫 번째 원소에 둘다 배치 - 서로 다른 방향에서 시작 : 첫 번째 원소와 마지막 원소에 배치 다중 for문의 복잡도를 좀 더 선형적으로 풀 수 있음 sum의 값이 5보다 작다면, end를 1 늘려준다. sum의 값이 여전히 5보다 작으니 end를 1 늘려준다. sum의 값이 5보다 크니, start를 빼주고 값을 늘려준다. sum의 값이 5와 같아져서 cnt를 1 올려주고, start와 end를 둘 다 올려준다. sum의 값이 5와 같아져서 cnt를 1 올려주고, start와 end를 둘 다 올려준다. sum이 5보다 크니, start를 빼주고 옆으로 움직인다. sum의 값이 5와 같으니 ..
백준 1254 팰린드롬 만들기
·
Codding_Test/BaekJoon
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class baekjoon_1254 { public static void main(String[] args) throws IOException { // readLine 사용 시 예외처리 필수 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String str = in.readLine(); int answer = str.length(); for (int i = 0; i < str.length(); i++) { if(isPalind(str.subst..
힙(Heap)
·
Algorithm
힙(Heap) 완전 이진 트리 형태 - 중복 값 허용 - 반 정렬 상태 최소값 또는 최대값을 빠르게 찾아내는데 유용한 자료구조 - 최소 힙, 최대 힙 힙의 종류 최대 힙 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리 key(부모 노드) >= key(자식 노드) 최소 힙 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리 key(부모 노드) 1 && heap.get(cur / 2) 1 && heap.get(cur / 2) > heap.get(cur)){ // 방금 들어온 data가 부모 data 보다 작다면 int parentVal = heap.get(cur / 2); heap..