분류 전체보기 141

[Database] SQL과 NOSQL의 차이

기본적으로 두 기술의 가장 큰 차이점은 SQL은 관계형 데이터베이스이고, NoSQL은 비관계형 데이터베이스이다. 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크에 따라 결정하는 것이 아니다. 프로젝트를 진행하기에 앞서 적합한 데이터베이스를 택해야 한다. 차이점을 알아보자. SQL (관계형 DB) SQL을 사용하면 RDBMS(관계형 DB 관리 시스템)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있다. 주로 데이터의 다양한 엔티티와 변수 간의 관계가 있는 구조화된 데이터를 관리하는 데 사용된다. 관계형 데이터베이스에는 핵심적인 두 가지 특징이 있다. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 데이터는 ..

CS/Database 2023.01.05

[Database] SQL Injection

SQL Injection이란? 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 ※ 인젝션 공격은 OWASP Top10 중 첫 번째에 속해 있으며, 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있는 공격 (OWASP이란? → 보안 취약점 등을 연구하고, 10대 웹 애플리케이션의 취약점(OWASP TOP 10)을 발표) 왜 발생할까? 웹 어플리케이션은 User의 행동(클릭, 입력 등)에 따라 DB에 있는 데이터를 서로 다르게 표시한다. 이를 위해 Query는 User가 입력한 데이터를 포함하여 Dynamic하게 변하므로 개발자가 의도하지 않은 정보를 열람할 수 있게 된다. 주로 어떨 때 발생할..

CS/Database 2023.01.04

스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹서비스] 책을 보며 따라하기 기록 1. OAuth 동의 화면 책과 좀 다른 부분이 있다. 구글링해보니 User Type을 '외부'로 체크해야 한다고 함. 2. enum Role import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum Role { GUEST("ROLE_GUEST", "손님"), USER("ROLE_USER", "일반 사용자"); private final String key; private final String title; } → 스프링 시큐리티에서는 권한 코드에 항상 ROLE_이 앞에 있어야..

Spring/그 외 2023.01.04

git commit 삭제

🚨 문제 깃에 올라가면 안 되는 파일을 .gitignore에 추가하고 푸시했는데, 반영 안 됐음. 뭐임? 이동욱 개발자님 블로그 보니 Git의 캐시문제 때문이라고 한다. git의 캐시가 문제가 되는거라 아래 명령어로 캐시 내용을 전부 삭제 후 다시 add All 해서 커밋하시면 됩니다. (출처 : https://jojoldu.tistory.com/307) 그래서 이 블로그에 나와있는 대로 git rm -r --cached . git add . git commit -m "fixed untracked files" 이렇게 해서 다시 푸시를 해보니 정상적으로 .gitignore처리가 됐다. 근데 문제는 commit 기록이 남아서 거길 들어가보면 내가 어떤 파일을 올렸다가 .gitignore 처리를 해서 다시 내..

에러 2023.01.04

혼자 구현하는 웹 서비스

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹서비스] 내가 보려고 적는 기능 설명들 1. domain 패키지 도메인을 담을 패키지이다. 💡 도메인이란? → 게시글, 댓글, 회원, 정산, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역이다. 🚨 기존에 MyBatis와 같은 쿼리 매퍼를 사용했다면, dao 패키지를 떠올리겠지만, dao 패키지와는 결이 다르다. 그간 xml에 쿼리를 담고, 클래스는 오로지 쿼리의 결과만 담던 일들이 모두 도메인 클래스라고 불리는 곳에서 해결된다. 2. @NoArgsConstructor 기본 생성자 자동 추가 3. Entity 클래스에는 Setter 메소드가 없다. 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 명확하게 구분하기 위..

Spring/그 외 2023.01.03

프로그래머스 - 더 맵게 (자바)

Heap,PriorityQueue 연습 내가 보려고 씀 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42626 풀이 출처 : https://easybrother0103.tistory.com/118 https://velog.io/@agugu95/Java-Heap-Binary-Heap Priority Queue 우선순위 큐로 데이터 중에서 우선순위가 높은 데이터를 빠르게 알 수 있다. 큐와 연산이 동일하나 우선순위가 가장 높은 데이터를 알 수 있다. 이를 통해 최대 힙과 최소 힙을 구현 가능하다. ● 최대 값이 우선순위인 큐 = 최대 힙 ● 최소 값이 우선순위인 큐 = 최소 힙 우선순위 큐를 통해 데이터를 정렬하는 것이 heap sor..

프로그래머스 - 귤 고르기 (자바)

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/138476 풀이 참고 : https://devmoony.tistory.com/170 귤의 종류와 그 개수들을 HashMap에 저장 종류가 뭔지 알 필요 없으므로(갯수만 알면 됨), map의 value들을 list에 저장 list를 크기순(갯수순)으로 내림차순 정렬 개수가 제일 많은 것부터 k 차감 개수의 종류가 바뀔 때 answer는 1씩 증가 k가 0보다 작거나 같으면 종료 import java.util.*; class Solution { public int solution(int k, int[] tangerine) { int answer = 0; Arrays.sort(tangerin..

알고리즘/Map 2023.01.02

Spring Boot와 MySQL 연동 방법

내가 까먹을까봐 올림 application.yml이나 application.properties 파일에 (+ 내가 예전에 구글링하다 yml 보고 이거 뭐야? 했어서 설명 추가함. 이런 거 엄청 간단해서 다들 알 것 같지만, 나같이 주입식 단기 국비교육받은 사람들은 모를 수도 있음. 거기선 이유 안 알려주고 걍 하라고 함. 걍 properties 파일에서 양식만 바꾼 게 yml 파일입니다. 예를 들어, properties 파일에선 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 이었던 게, yml 파일에선 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver 이런 식입니다. 들여 쓰기 중..

에러 2023.01.01

[Web] 쿠키(Cookie) & 세션(Session)

쿠키와 세션을 사용하는 이유? HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용된다. 기본적으로 HTTP 프로토콜 환경은 "connectionless, stateless"한 특성을 가지기 때문에 서버는 클라이언트가 누구인지 매번 확인해야 한다. 이 특성을 보완하기 위해서 쿠키와 세션을 사용하게 된다. connectionless 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어 버리는 특징 HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 특성이 있다. 헤더에 keep-alive라는 값을 줘서 커넥션을 재활용하는데 HTTP1.1에서는 이것이 디폴트다. HTTP가 tcp위에서 구현되었기 때문에 (tcp는 연결지향..

CS/Web 2023.01.01

[Web] 브라우저 동작 방법

주소창에 https://www.naver.com 혹은 https://www.youtube.com 등 다양한 URL을 검색하여 해당 웹 페이지에 접속한 경험이 있을 겁니다. 이 url이 입력되었을 때 어떤 과정을 거쳐서 출력되는걸까? 브라우저 주요 기능 사용자가 자원을 서버에 요청하고 요청한 자원(웹 페이지)을 브라우저에 표시하는 것 웹 브라우저가 웹서버에 웹 페이지를 달라고 하는것 : 요청(request) 요청한 웹 페이지를 웹 브라우저에 제공하는 것 : 응답(response) 보통 자원은 HTML 문서지만 PDF, 이미지 등 다양한 형태일 수 있다. 자원의 주소는 URI에 의해 정해진다. 웹 브라우저의 종류는 다양하다. 크롬, 네이버 웨일, 파이어폭스, 사파리 등이 대표적인 예이다. 웹 브라우저의 주요..

CS/Web 2023.01.01