전체 글

전체 글

    [Algorithm/Python] 다익스트라 최단 경로 알고리즘이란?  || dijkstra

    [Algorithm/Python] 다익스트라 최단 경로 알고리즘이란? || dijkstra

    들어가며 본 포스팅에서는 다익스트라 최단 경로 알고리즘에 대해 소개합니다. 📌 다익스트라 최단 경로 알고리즘이란? 다익스트라 최단 경로 알고리즘이란, 가장 짧은 경로를 찾기 위한 알고리즘으로, 음의 간선(0보다 작은 값을 가진 간선)이 없을 때에 적용할 수 있는 알고리즘입니다. 1️⃣ 출발 노드를 설정합니다. 2️⃣ 최단 거리 테이블 초기화(무한으로 설정)합니다. 3️⃣ 방문하지 않은 노드 중에 최단 거리 테이블에서 최단 거리가 가장 짧은 노드를 선택합니다. 4️⃣ 선택한 노드를 거쳐 다른 노드로 가는 거리를 계산합니다. 5️⃣ 계산된 거리가 최단 거리 테이블의 거리보다 짧을 경우, 갱신합니다. 6️⃣ 위의 3️⃣4️⃣5️⃣를 반복합니다. 가장 최단 거리의 노드를 선택하여 주변 간선을 확인합니다. 더 짧..

    [Algorithm/Python] 이진 탐색(Binary Search)란?

    [Algorithm/Python] 이진 탐색(Binary Search)란?

    들어가며 본 포스팅에서는 순차 탐색(Sequential Search)과 이진 탐색(Binary Search)에 대해 소개합니다. 📌 순차 탐색이란? 순차 탐색(Sequential Search)이란, 특정 데이터를 찾기 위해 앞에서부터 차례대로 값을 비교해나가는 탐색 방식입니다. 1️⃣ 가장 첫 번째 데이터를, 찾고자하는 데이터(타겟)과 비교합니다. 2️⃣ 값이 서로 일치하지 않는다면, 다음 데이터로 이동하여 비교합니다. 3️⃣ 이를 반복하며 일치할 때, 탐색을 종료합니다. ✅[ CODE ] def sequential_search(n, target, arr): for i in range(n): if arr[i] == target: return i + 1 i + 1 번째의 데이터가 타겟과 동일하다는 결과를 ..

    [Spring] Exception 처리 과정 || ErrorCode, CustomException, ControllerAdvice

    ❏ ErrorCodeErrorCode는 Enum 타입으로, 반복적으로 사용되는 Error 상태와 메시지를 포함합니다. Enum 타입으로 미리 에러코드와 메시지를 정의해두며, 편리하게 활용합니다.@Getter @RequiredArgsConstructor public enum ErrorCode { INVALID_TOKEN(401, "Token이 유효하지 않습니다."), ACCESS_DENIED(403, "접근 권한이 없습니다."), MEMBER_NOT_FOUND(404, "존재하지 않는 회원입니다."), AUTHENTICATION_FAILED(400, "아이디 또는 비밀번호가 옳지 않습니다."), BOARD_NOT_FOUND(404, "존재하지 않는 게시물입니다."), BOARD_AUTHOR_MISMATCH..

    [Error] unable to evaluate the expression method threw 'org.hibernate.lazyinitia

    [Error] unable to evaluate the expression method threw 'org.hibernate.lazyinitia

    📌 오류 발생 원인Member member = memberRepository.findById(Long.valueOf(memberId)) .orElseThrow(() -> new UsernameNotFoundException("존재하지 않는 계정입니다.")); Authentication authentication = jwtProvider.getAuthentication(member);먼저, memberRepository에서 findById를 통해 Member(회원) 엔티티를 조회해온다. public Authentication getAuthentication(Member member) { MemberContext memberContext = new MemberContext(member); return new..

    [OS] 운영체제(Operating System)이란? || 추상화, 필요성, 기능, Kernel

    들어가며본 포스팅에서는 운영체제의 개념과 필요성, 운영체제의 기능, Kernel에 대해 소개합니다.📌 운영체제(OS)운영체제란 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서, 사용자가 하드웨어를 쉽고 효율적으로 사용할 수 있는 프로그램의 모임이자, 시스템 소프트웨어이다. 추상화(abstraction)을 제공하는 프로그램이라고도 정리해볼 수 있다. 어떻게 하드웨어를 쉽고 효율적으로 사용할 수 있도록 하는가에 대해 이야기 해보자면, 추상화라는 개념을 알아야 한다.❔ 추상화추상화(Abstraction)란, 복잡한 시스템 및 개념을 단순화하는 것이다. 소프트웨어를 설계할 때에도 추상화하여 미리 포괄적인 개념을 설계한 후에 구체화하여 진행한다. 따라서, 복잡한 시스템이더라도 사용자가 보다 쉽고 직관적인 방식..

    인증 방식 (Cookie & Session & Token) + JWT

    JWT 인증 방식에 대해 공부해보다가, 다른 인증 방식과의 차이를 정리해두어야겠다는 생각이 들었다. 클라이언트의 인증을 위한 대표적인 방식 Cookie, Session, Token을 다뤄보자 📌 Cookie 인증쿠키(Cookie)는 사용자의 브라우저에 저장되어 통신할 때 포함되어 전달한다. 사용자의 브라우저에 저장되는 데이터들이므로, 고유 정보 식별이 가능하다. 1. 클라이언트가 서버에 요청(Request)를 보낸다. 2. 서버는 클라이언트의 요청에 대한 응답(Response)을 작성하고, 응답 헤더의 Set-Cookie에 사용자의 브라우저에 저장될 데이터를 담아 보낸다. 3. 이후 해당 클라이언트는 요청을 보낼 때마다, 저장된 쿠키를 요청 헤더의 Cookie에 담아 보내게 된다. 4. 따라서, 서버는 ..

    XML Web Services (+ HTTP, SOAP, WSDL, UDDI), 시나리오

    XML Web Services (+ HTTP, SOAP, WSDL, UDDI), 시나리오

    XML Web Services 관련 기술로는 HTTP, SOAP, WSDL, UDDI가 있다. 📌 HTTPHyperText Transper Protocol의 약자로, 서로 다른 시스템을 통신할 수 있는 프로토콜이다. HyperText라는 것은, 컴퓨터 화면 및 전자 기기에서 볼 수 있는 텍스트 데이터를 의미하는데, 이것을 빠르게 네트워크 상에서 교환하기 위한 프로토콜인 것이다. Client - Server 웹에서 이루어지는 대표적인 인터넷 프로토콜이며, 클라이언트에서 URL을 통해서 서버에 요청(Request)을 하면, 서버에서는 해당 요청에 대한 응답(Response)을 하는 형태로 동작한다. Stateless 서버에서는 클라이언트에 대한 상태를 전혀 보관하지 않는다. Connectionless 또한,..

    SOA(Service Oriented Architecture)란?

    SOA(Service Oriented Architecture)란?

    📌 ServiceSOA를 알기 전, 서비스란 무엇인지 간단하게 설명해보자면, 우리가 컴퓨터에서 실행하는 프로그램, 애플리케이션을 소프트웨어라 한다. 이러한 소프트웨어를 다운로드하여 컴퓨터, 모바일에서 사용을 하곤 하는데, 서비스라는 것은 인터넷, 네트워크를 통해 제공되는 정보 및 기술을 의미한다. 소프트웨어와 함께 제공되어 설치하지 않고도 인터넷을 통해 서비스에 접속하여 이용할 수 있다. ✅ 구조Service Interface : 서비스 인터페이스는 서비스를 호출하기 위한 통신 방법이 정의된다. 이용자는 이를 제공받아 서비스를 이용한다. Service Implementation : 실질적으로 서비스가 구현되어 있는 곳이다. 서비스 이용자들은 서비스 구현이 어떻게 이루어져있는 지에 대해서는 몰라도 인터페이..

    분산 컴퓨팅, RPC vs. XML Web Service 비교

    분산 컴퓨팅, RPC vs. XML Web Service 비교

    📌 분산 컴퓨팅(Distributed Computing)이란?분산 컴퓨팅(Distributed Computing)이란, 말 그대로 여러 대의 컴퓨터가 분산되어 하나의 일을 해결하는 개념이다. 대량의 데이터 및 연산을 처리해야 하는 거대한 문제를 해결하고자, 원격지에 존재하는 여러 대의 컴퓨터들을 이용하여 협업하는 것으로, 대규모의 데이터베이스와 빅데이터를 분산하여 일을 처리하거나, 여러 프로그램들을 분산시켜 원격으로 실행하는 경우이다. 마치 하나의 컴퓨터인 것처럼 동작하며, 자원의 공유와 협업이 가능하기 때문에 효율적으로 활용이 가능하고, 확장성이 우수하다. ✅ 장점자원의 활용이 효율적자원의 공유와 협업이 가능 확장성이 좋다.빠른 성능을 제공 원격 컴퓨터를 이용하여 협업한다고 하는데,, 원격 컴퓨터를 어..

    [Spring] 공통 필드 하나로 묶기! || BaseEntity, JpaAuditing

    들어가며 Member, Order, Board 등 다양한 엔티티를 생성하여 사용하다보면, 반복되는 공통 속성이 존재하게 됩니다. 예를 들면, 생성일, 수정일, 식별자 등이 있으며, 보통 하나로 묶어 BaseEntity를 생성하여 각 엔티티가 상속받을 수 있도록 구현하며 사용하곤 합니다. 본 포스팅에는 공통 속성을 하나로 묶어 BaseEntity라는 부모 클래스를 생성하는 내용을 소개합니다. 📌 공통 속성public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private LocalDateTime crea..