분류 전체보기(33)
-
Discord에서 Github Bot 설정하기
현재 캡스톤 프로젝트를 진행 중인데 역할 별로 어떤 부분을 개발하고 있는지 잘 알기 위하여 Github Bot을 적용하기로 했다. 현재 Discord에서 회의를 하기 때문에 Discord에서 설정하기로 했다. 0. Webhook 웹훅이란 웹에서 발생하는 특정 이벤트를 콜백으로 변환해 주는 것이다. 즉, 서버에서 이벤트가 일어나면 미리 정의한 callback URL로 클라이언트를 호출하는 방식이다. 우리는 Git에서 어떤 이벤트가 일어날 때 Discord 클라이언트를 호출하게 된다. 1. Discord 에서 채널 설정 우선 Discord에서 채널을 하나 생성한다. 나는 github라는 채널을 생성하였다. github 오른쪽의 톱니바퀴 모양을 눌러 해당 채널의 설정으로 들어가 연동 탭에 들어간다. 연동 탭에..
2024.03.13 -
스프링 시큐리티 없이 JWT 회원가입 및 로그인 구현
스프링 시큐리티 없이 JWT를 이용한 회원가입 및 로그인 구현을 정리하고자 한다. 시큐리티를 쓰지 않는 이유는 시큐리티 자체가 너무 많은 역할을 해주기 때문에 직접 구현하며 어떤 식으로 진행되는지 확인하고자 함이다. 물론 내가 진행한 프로젝트 내에서 스프링 시큐리티를 아예 쓰지 않는 것은 아니지만 JWT 인증에 한해서는 사용하지 않는다. 0. JWT 에 관해 이 글을 읽기 전 JWT에 관한 이해가 필요하다. 앞선 글을 읽고 오길 바란다. 2024.02.23 - [Web] - JWT(Json Web Token) 이란 무엇인가? - 쿠키와 세션 비교를 통해 1. dependency 설치 implementation 'io.jsonwebtoken:jjwt-api:0.12.3' implementation 'io...
2024.03.08 -
JWT(Json Web Token) 이란 무엇인가? - 쿠키와 세션 비교를 통해
글 다 썼는데.. 갑자기 사라졌다. 화가 나지만 복습 겸 다시 쓴다.. 다른 분들은 꼭 임시 저장하시길.. 그동안 프로젝트를 하면서 로그인, 회원가입 부분을 구현하다 보면 세션 방식, JWT 방식으로 구현해보곤 했다. 구체적인 차이에 대해서 잘 몰랐으나 이번 프로젝트를 하면서 다시 공부하였고 공부한 부분을 정리해보고자 한다. 1. JWT(Json Web Token) 란 무엇인가? JWT는 클라이언트와 서버 간 인증방식을 안전하게 하기 위해 이용하는 토큰이다. .(점)으로 이루어진 세 문자열로 이루어져 있다. https://jwt.io/ 이 사이트에서 JWT 토큰 인코딩 디코딩을 해볼 수 있다. 세 부분은 다음과 같이 나눠진다. Header 헤더 부분에는 토큰의 종류 (JWT), 사용된 해쉬암호화 방식 등..
2024.02.23 -
시간복잡도
1. 개요 알고리즘의 시간복잡도에 대해 알아보자. 2. 정의 시간 복잡도 : 문제를 해결하기 위한 연산 횟수, 일반적으로 1억 번의 연산을 1초로 간주 3. 유형 빅-오메가 Ω(n) : 최선일 때 (Best case) 빅-세타 θ(n) : 보통일 때 (Average case) 빅-오 O(n) : 최악일 때 (Worst case) -> 코딩테스트에서는 빅-오를 염두하고 임한다. -> 다양한 테스트 케이스를 수행해 모든 케이스를 통과해야 하기 때문이다. 문제의 시간복잡도를 충족하며 해결하기 위해서는 1. 알맞은 알고리즘을 사용하고 2. 비효율적인 로직 찾아서 효율적으로 바꾼다
2024.02.14 -
언어별 백엔드 프레임워크 비교
Python 웹 프레임워크 Python 의 다양한 라이브러리 사용 가능 → 데이터, 머신러닝 관련 라이브러리가 다른 언어보다 제공이 잘 된다. Django MTV (Model - Template - View) 패턴을 사용 → 역할에 따라 독립적으로 개발되기 때문에 유지보수가 수월하고 확장이 용이하다. 테스트 관련 라이브러리 제공 Django ORM 을 이용하여 편리하게 데이터베이스 접근 SQL 쿼리를 직접 사용하지 않고도 파이썬 객체를 사용해 DB 를 다룰 수 있다. → DB 종류에 의존하지 않음 → 추후 DB 가 바뀌더라도 유연하게 대처 가능 자체 Admin 페이지 제공 지속적인 업데이트 23년 12월에 Django 5.0 이 나올 만큼 개발자들이 지속적으로 업데이트를 해주고 있다. (물론 다른 프레임..
2024.01.07 -
[토비의 스프링 Vol.1] 2장 테스트
2.1 UserDaoTest 다시 보기 2.1.1 테스트의 유용성 앞서 main 메소드를 통해서 작성한 코드가 잘 동작하는지 확인했다. 하지만 1장에서 다양한 리팩토링을 거치며 예상한 의도와 코드가 정확히 일치하는지 확인하기 위해서는 테스트를 작성하는 것이 좋다. 테스트의 결과가 원하는 대로 나오면 코드의 변경 이후에도 설계나 결함이 없다고 확신을 얻을 수 있기 때문이다. 2.1.2 UserDaoTest의 특징 Django를 이용하여 다양한 프로젝트를 진행하며 제대로 된 테스트를 짜본 적이 없다. 이에 테스트를 하려면 서버를 켜고 직접 값을 넣으며 제대로 작동하는지 확인을 해야 했다. DB를 한번 비우면 테스트를 하기 위한 노가다 작업이 필수였고, 그 작업을 하던 와중에도 오류가 발생할 가능성이 있었다...
2023.11.22 -
[토비의 스프링 Vol.1] 1장 오브젝트와 의존관계
1.1 초난감 DAO DAO 란? - Data Access Object는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담한 오브젝트이다 1.1.2 UserDao JDBC의 일반적인 순서 DB Connection 생성 SQL Statement(또는 PreparedStatement) 생성 Statement 실행 실행결과를 ResultSet으로 받아서 오브젝트에 옮겨준다 작업 중 생성된 Connection, Statement, ResultSet 같은 리소스는 작업을 마친 후 반드시 닫아준다. (close) JDBC API 가 만드는 예외 처리 1.1.3 main()을 이용한 DAO 테스트 코드 책에 있는 코드를 테스트해보기 위해서 직접 웹이나, DB를 띄워서 테스트해 볼 수 있지만 이는 배보다 배꼽이 ..
2023.09.26 -
백준 2164 : 카드2
문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다. N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로..
2023.09.04 -
백준 1181 : 단어 정렬
문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 단, 중복된 단어는 하나만 남기고 제거해야 한다. import java.util.Arrays; import java.util.Comparator; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { public static void main(String[] args) { Main main = new Main(); Scanner sc = new Scanner(System.in); int length = sc.nextInt(); sc.ne..
2023.09.01 -
TCP와 UDP의 특징과 차이
오늘은 OSI 7 Layer 중 4계층인 전송 계층에서 TCP와 UDP에 대해 정리해보고자 한다. TCP TCP(Transmission Control Protocol) 은 전송 제어 프로토콜 이라고도 불린다. 컴퓨터가 다른 컴퓨터와 통신을 위기 위한 프로토콜의 일종이다. TCP 의 특징 기존에 IP Protocol을 이용해서 데이터를 전달할 때는 비연결성 (패킷을 받을 대상이 없거나 대상이 서비스 불능 상태여도 패킷을 전달하는 문제)와 비신뢰성 (데이터 소실, 순서 보장 불가의 문제)가 있었다. 이러한 문제를 해결하기 위해서 등장한 것이 TCP이다. 연결지향 - Three way Hand Shaking Three way Hand Shaking은 TCP 통신에서 정확한 전송을 보장하기 위해 상대방 컴퓨터와..
2023.06.21 -
IP 에 대해 알아보자!
웹 개발을 하다 보면 IP 라는 단어가 많이 등장한다. IP라 하면 난 막연히 IP 주소를 생각했던 것 같다. 이번 기회에 IP에 대해 공부한 내용을 정리해보고자 한다. What is IP IP 란 Internet Protocol 의 약자로 인터넷상에서 어떤 정보를 수신 및 송신하기 위한 통신 규약이다. IP 의 역할 1. 지정된 IP 주소(IP Address) 에 데이터 전달 2. 패킷(Packet) 이라는 통신 단위로 데이터 전달 IP 의 한계 클라이언트는 출발지(클라이언트 IP) 와 도착지(서버 IP), 전송할 데이터를 담은 패킷을 인터넷을 통해 서버로 보내려고 한다. 패킷은 출발지에서 도착지로 바로 가지 않고 인터넷의 수많은 노드(서버)들을 거쳐서 도착하게 된다. 이러한 방식 때문에 몇 가지 한..
2023.06.17 -
싱글톤 컨테이너
웹 어플리케이션과 싱글톤 웹 어플리케이션은 수 많은 사람들이 동시에 요청을 보낸다. 하지만 요청 하나 하나 마다 객체를 만든다면 메모리가 당연히 과부하가 올 것이다. 예를 들어 100만명의 고객이 초당 요청을 하나씩 보낸다 생각하면 초당 객체가 100만개가 생성되고 소멸된다. 그림으로 보면 다음과 같을 것이다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회 : 호출할 때마다 객체 생성 MemberService memberService1 = appConfig.memberService(); // 2. 조회 : 호출할 때마다 객체 생성 MemberServic..
2023.05.12