본문 바로가기

분류 전체보기

[백엔드TIL] DFS와 BFS란? 작동 방식과 구현 방법 이 글은 DFS와 BFS 개념에 대해 설명하고, 작동 방식을 그림으로 보여주며, 이러한 작동 방식을 자바 소스 코드로 구현합니다. 학습 목표 ㆍDFS ㆍBFS ㆍ정리 DFS · DFS(Depth-First Search)는 깊이 우선 탐색이라고 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 알고리즘 동작 방식 · 스택 자료구조를 이용한다. 1. 탐색 시작 노드를 스택에 삽입하고, 방문 처리한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리하고, 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 위의 1번과 2번 과정을 더 이상 수행할 수 없을 때까지 반복한다. * ‘방문 처리': 스택에 한 번 삽입되어 처리된 노드가.. 더보기
[백엔드TIL] TCP, UDP 특징과 차이점 오늘은 네트워크의 계층들 중 전송 계층에서 사용하는 프로토콜에 대해서 알아보려고 합니다. 전송계층은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층으로, 쉽게 말해 데이터의 전달을 담당합니다. 그리고 데이터를 보내기 위해 사용하는 프로토콜이 있는데, 그 프로콜들이 바로 오늘의 주인공 TCP와 UDP입니다. 원래 TCP와 UDP에 대한 글을 포스팅 할 생각은 1도 없었는데, UDP 채팅 서버를 구현해야하는 과제를 하는 과정에서 부족함을 느끼고 공부의 목적으로 포스팅을 결심했습니다. 많이들 알고 계실텐데 그래도 확실히 집고 넘어가면 좋을 것 같습니다 전송계층이 어디있나 헷갈리시는 분들을 위해 OSI 7layer와 TCP/IP 4layer에 대한 사진도 첨부합니다~ 1. TCP(Transmission C.. 더보기
[백엔드TIL] AWS serverless 개발 -cognito 개념 AWS cognito란? - 유저 계정 관리, 자격증명(토큰 관리)를 따로 DB사용과, Security 구현 없이 사용할 수 있게 하는 AWS 기능. User pool(사용자풀) - 사용자 가입 및 로그인 기능 담당 Identity Pool (자격 증명 풀) - AWS 엑세스에 필요한 임시자격증명 - AWS 내의 서비스(S3 등)에 접근하기 위한 토큰 생성 가능 - 토큰은 jwt기반 자격 증명 토큰(jwt) 구조 - "iss": https://cognito-idp.{지역}.amazonaws.com/{유저풀id} - 유저 풀 id는 aws에서 조작 - "username" : 필수 입력해야함. AWS cognito 아키텍처 방안 1. 프론드엔드단에서 가입, 자격 증명하기 - 장점: 구성 쉬움(백엔드 없음) .. 더보기
[백엔드TIL] OOP(객체지향프로그래밍) 개념 OOP란? 필요한 데이터를 추상화하여 속성(Attributes)와 행위(methods)를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 방법이다. 데이터를 중심으로 필요한 기능을 함수로 구현하는 방식의 절차 지향 프로그래밍과 달리, OOP에선 데이터와 함수들을 묶고 이를 객체로 관리한다. 객체라고 하면 뭔가 말이 어렵고 한데, 그냥 우리가 일반적으로 사용하는 언어 구조와 비슷하다고 생각하면 이해하기 쉽다. 위 그림을 예시로 들면 우선 데이터는 '돈', '잔돈', '제품'이다. 앞서 절차 지향에선 데이터(돈, 잔돈, 제품)를 행위와 별도로 생각한다고 했다. 그래서 절차 지향에선 데이터에 대한 모든 행위를 '~돈을 ~', '~잔돈을~', '~제품을~'의 식으로 표.. 더보기
[백엔드 TIL] WEB 과 WAS 개념 웹(Web)의 개념 WWW(World Wide Web)이란 인터넷에 연결된 전세계 사용자들이 서로의 정보를 공유할 수 있는 장소를 의미한다. 웹에는 수많은 '웹사이트(Website)'들이 있고, 각각의 웹사이트는 '웹 페이지(Web Page)'로 구성된다. 즉, 서로 연관된 내용으로 작성된 웹 페이지들의 집합을 웹 사이트라고 부른다. 웹이란 온라인 상에 다양한 정보(웹 페이지)가 서로 연결(링크)되어 있는 것이라고 볼 수 있다. 서버(Server) 네트워크를 통해 클라이언트에게 정보나 서비스를 제공하는 컴퓨터 시스템 웹 서버 ( Web Server ) - 클라이언트의 요청을 받아 HTML이나 Object를 HTTP 프로토콜을 기반으로 이용해서 전송하는 것 (정적 컨텐츠를 제공하는 서버) - 사용자가 클라.. 더보기
[백엔드TIL] TDD (Test Driven Develpment) 원리 TDD (Test Driven Develpment) 테스트 주도 개발 -> 성공 테스트뿐만 아니라 실패 테스트까지 작성해야한다 반복 테스트를 이용한 소프트웨어 방법론 작은 단위의 테스트 먼저 설계 및 구축 후 테스트를 통과할 수 있는 코드를 짜는 것 애자일 개발 방식 중 하나 -> 코드 설계시 원하는 단계적 목표에 대해 설정하여 진행하고자 하는 것에 대한 결정 방향의 갭을 줄이고자 함 테스트 코드 작성 목적 코드의 안정성 높일 수 있음 기능을 추가하거나 변경하는 과정에서 발생할 수 있는 side-effect를 줄일 수 있음 -> A기능을 수정하기위해 어떤 메소드를 수정하는데, 이 메소드를 B기능에서도 사용하고있었을 때. B기능이 동작이 제대로 되지않을 수 있는데 이와 관련된 테스트코드 미리 작성해뒀다면 .. 더보기
[백엔드TIL] Java Comparable과 Comparator의 차이 아마 한 번쯤 써 본 분들이라면 알겠지만, Comparable과 Comparator는 모두 인터페이스(interface)라는 것이다. 즉, Comparable 혹은 Comparator을 사용하고자 한다면 인터페이스 내에 선언된 메소드를 '반드시 구현'해야한다는 것이다. 그럼 각각의 인터페이스에는 어떤 메소드가 선언되어있을까? 한 번 공식 API문서를 뒤져보자. [Comparable] docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#method.summary Comparable (Java Platform SE 8 ) This interface imposes a total ordering on the objects of each class that .. 더보기
[백엔드TIL] 자바와 코틀린의 차이 기존에 java로 구현했던 spring 프로젝트를 kotlin으로 전환했다. 코틀린을 도입하기로 결정한 이유는 다음과 같았다. 왜 kotlin인가? 간결성, 생산성 코틀린은 자바보다 더 간결하고 직관적이라, 쓰고 읽는 데 시간이 덜 걸린다. 자바에 존재하는 여러 가지 번로운 준비 코드(생성자, 게터, 세터 등)들을 코틀린은 묵시적으로 제공하기 때문에 그런 준비코드 없이 더 깔끔하다. 기능이 다양한 표준 라이브러리를 제공하기 때문에 반복되는 코드를 줄일 수 있다. 안정성 실행 시점에 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해준다. 코틀린은 null이 될 수 없는 값을 추적하며, 실행 시점에 NullPointException이 발생할 수 있는 연산을 사용하는 코드를 금지한다. 자.. 더보기
[Java] x,y 좌표 정렬 하기 설명 N개의 평면상의 좌표(x, y)가 주어지면 모든 좌표를 오름차순으로 정렬하는 프로그램을 작성하세요. 정렬기준은 먼저 x값의 의해서 정렬하고, x값이 같을 경우 y값에 의해 정렬합니다. 입력 첫째 줄에 좌표의 개수인 N(3 더보기
[백엔드TIL] Spring Batch에 대한 이해 Spring Batch Batch Application 종종 어플리케이션에서 필수적인 작업으로 배치 프로세싱이 요구됩니다. 여기서 배치의 의미를 한 번 짚고 가겠습니다. Batch : 집단, 무리, 함께 묶다. Batch는 한 무리를 의미하며, 대부분 그 규모가 큰 것들을 말합니다. 그래서 배치 애플리케이션이라고 하면 개발자가 정의한 작업을 한번에 일괄 처리하는 애플리케이션이라고 정의할 수 있습니다. 그럼 어떨 때 이 배치 애플리케이션이 필요할까요? 예를 들어, 한 기업에서 사전 예약 이벤트를 진행했는데 신청한 유저의 데이터 수는 100만 건이라고 해볼게요. 사전 예약 이벤트를 접수한 모든 유저에게 메일을 보내야합니다. 100만 건의 메일을 어떻게 보내야 할까요? 이 작업은 기존의 웹 애플리케이션을 제작.. 더보기