일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- SSAFY웰컴킷
- linkedlist
- 자료구조
- Java
- unionfind
- SSAFY
- 서로소집합
- SWEA
- 산술 연산자
- 내부반복
- 비교 연산자
- 삼항 연산자
- 덱
- SSAFY입학
- 자바 연산자
- 논리 연산자
- 삼성청년SW아카데미
- 연결리스트
- Stream
- rank
- 연산자 우선순위
- 코딩교육
- 프로그래머스
- 비트 연산자
- 순위함수
- prefix sum
- Union
- 누적합
- deque
- 알고리즘
- Today
- Total
목록CS (19)
개발하는 몽당연필

매번 프로젝트 때 마다 로그인 구현할 때 JWT 방식을 사용해왔다. 하지만 면접볼 때 마다 JWT에 대해 깊게 질문이 들어오면 제대로 답변하지 못했다 😭 로그인 인증 구현 때 많이 사용하는 JWT에 대해 깊게 알아봅시다 🙌🏻 JWT에 대해 알아보기 전에 먼저 "토큰 기반 인증"과 "서버 기반 인증"에 대해 알아보겠습니다. 📌 서버 기반 인증 (Session / Cookie) 세션 기반의 인증 시스템입니다. 서버 측에서 사용자들의 정보를 기억하기 위해 세션을 유지하는데, 이는 메모리, 디스크, 데이터베이스 등을 통해 관리합니다. 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하여 유지해야 하므로 Stateful한 구조를 가진다. [ 인증 방식 ] 사용자가 로그인 시 올바른 사용자임을 확인하고,..
컴포지션은 기존 클래스가 새로운 클래스의 구성요소가 되는 것으로, 상속(Inheritance)의 단점을 커버할 수 있습니다. 상속 하위 클래스가 상위 클래스의 특성을 재정의한 것 → IS-A 관계 컴포지션 기존 클래스가 새로운 클래스의 구성요소가 되는 것 → HAS-A 관계 그럼 컴포지션에 대해 더 알아봅시다. 📌 상속 (Inheritance) 컴포지션에 대해 알아보기전에 상속을 먼저 간단하게 알아봅시다. 먼저 상속이란 하위 클래스가 상위 클래스의 특성을 재정의한 것을 말합니다. 부모 클래스의 메서드를 오버라이딩하여 자식에 맞게 재사용하는 등, 상당히 많이 쓰이는 개념이면서 활용도도 높습니다. 하지만 이렇게 장점만 존재하는 것은 아닙니다. 상속을 제대로 사용하지 않으면 유연성을 해칠 수 있습니다. 🔍 구..
오늘은 Record에 대해서 알아보겠습니다. Record는 Java 14에서 프리뷰로 도입되고 16부터 정식 스펙에 포함된 클래스 타입으로, 순수히 데이터를 보유하기 위한 클래스입니다. 객체를 생성할 때 보통은 아래와 같이 개발자가 만들어야합니다. 📎 불변 데이터 객체 예시 public class Person { private final String name; private final int age; @Override public int hashCode() { return Objects.hash(name, address); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } else if (!(obj insta..

📌 프로그래밍의 오류 종류 프로그램에서 오류가 발생하면 시스템 레벨에서 프로그램에 문제를 야기하여 원치않는 버그를 일으키거나, 심각하면 실행 중인 프로그램을 강제로 종료시키기도 합니다. 프로그램 오류의 원인으로는 정말 다양한 상황이 있는데, 내부적인 요인으로는 프로그램 설계 로직에 구멍이 있어서 그럴수도 있고, 외부적인 요인으로는 프로그램 자체 문제가 아닌 하드웨어에서 문제가 생겨 프로그램에 오류가 발생할 수 도 있습니다. 프로그래밍에서 이러한 오류를 발생 시점에 따라 크게 3가지로 나눕니다. 컴파일 에러 (compile-time error) : 컴파일시에 발생하는 에러 런타임 에러 (runtime error) : 실행시에 발생하는 에러 논리적 에러 (logical error) : 실행은 되지만 의도와 ..

📌 변수의 기본형 & 참조형 타입 변수 (variable) : 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간 자바에서 말하는 데이터 타입(자료형) : 변수에 적재할 데이터가 메모리에 어떻게 저장되고 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 키워드 데이터 타입(자료형)은 크게 2가지로 구분됩니다. 기본형 (primitive type) : 계산을 위해 실제 값을 저장한다. 참조형 (reference type) : 객체의 주소를 저장한다. null 또는 객체의 주소 (4byte, 0x0 ~ 0xffffffff) 📌 기본형 타입 (Primitive Type) 기본형 타입에는 크게 논리형 (boolean), 문자형 (char), 정수형 (byte, short, int, lo..

📌 들어가기전 ... C / C++ 프로그래밍을 할 때 메모리 누구를 막기 위해 객체를 생성한 후 사용하지 않는 객체의 메모리를 프로그래머가 직접 해제 해주어야 했습니다. 하지만, Java에서는 JVM이 구성된 JRE가 제공되며, 그 구성 요소 중 하나인 GC이 자동으로 사용하지 않는 객체를 파괴합니다. GC에 대해 알아보기 전에 'stop-the-world'라는 용어를 알아야합니다. 'stop-the-world'란 GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것 입니다. 어떤 알고리즘을 사용하더라도 'stop-the-world'는 발생하게 되는데, 대개의 경우 GC 튜닝은 이 'stop-the-world' 시간을 줄이는 것이라고 합니다. GC를 해도 더 이상 사용 가능한 메모리 영역이 없는..
📌 Intrinsic Lock 자바의 모든 객체는 lock을 가지고 있다. 모든 객체가 가지고 있기 때문에 고유 락 (Intricsic Lock)이라고 하고, 모니터처럼 동작한다고 하여 monitor lock 혹은 monitor라고 한다. public class Counter { private int count; public int increase() { return ++count;// Thread-safe 하지 않은 연산 } } Q. 위의 코드에서 ++count 문이 atomic 연산인가? A. read (count 값 읽기) modify (count 값 수정) write (count 값 저장) 과정에서 여러 Thread가 공유 자원(count)으로 접근할 수 있으므로 동시성 문제가 발생한다. 📢 동시..

📌 직렬화란? 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 스트림(stream of bytes) 형태로 연속적인 데이터로 변환하는 기술 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference Type의 데이터들은 인스턴스를 전달할 수 없다. 따라서, 이런 문제를 해결하기 위해선 주소값이 아닌 Byte 형태로 직렬화된 객체 데이터를 전달해야 한다. 직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서, 전송 및 저장이 가능한 데이터로 만들어주는 것이 바로 직렬화라고 말할 수 있다. 이를 시스템적으로 살펴보면, JVM의 ..
백준 문제 풀다가 LIS 문제가 나왔는데 구글의 도움을 받고 풀어서 ㅠㅠ 정리해보려고 한다🤗 🔍 최장 증가 부분 수열 (LIS) 주어진 수열에서 오름차순으로 정렬된 가장 긴 부분 수열을 찾는 문제 이 때 부분 수열은 연속적이거나, 유일할 필요는 없다 🔍 구현 방법 총 2가지 방식으로 구현할 수 있다. 동적 계획법을 활용한 풀이 → O(N^2) 이분 탐색을 활용한 풀이 → O(NlogN) 이 문제를 두가지 방식으로 해결해봅시다❕ https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장..
call by value / call by reference는 간단하면서도 중요한 주제이다. 헷갈리기 쉬운 개념이기도 하다. 결론부터 말하자면 자바는 call by value 방식을 사용한다❕ 💡 Call by value (값에 의한 호출) 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성된다. (종료 시 해당 공간이 사라짐) call by value 호출 방식은 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달한다. 이 때 복사된 인자는 함수 안에서 지역적으로 사용되기 때문에 local value 속성을 가진다. 따라서, 함수 안에서 인자 값이 변경되더라도, 외부 변수 값은 변경되지 않는다. void main(String[] args) { int val = 25;/..