· 프로젝트
프로젝트에 레디스 Cache를 적용하며 많은 에러를 경험했습니다. 그리고 에러를 해결하며, 정확히 이해하지 못했던 개념들을 다시 되짚어볼 수 있었습니다.  레디스 Cache를 적용하며 겪은 에러는 크게 4가지인데, 하나씩 살펴보며 해결책과 관련 개념을 정리했습니다.   우선, 요구사항은 다음과 같았습니다.  서비스에서 이루어지는 메서드 들 중 findUsersById 를 통해 사용자 인증 과정을 거치게 했는데, 아래의 findUsersById 메서드에서 DB에 접근하는 횟수를 줄이는 것이 목표였습니다.public UserEntity findUsersById(Long userId){ return userRepository.findById(userId) .orElseThrow(()..
· 운영체제
강의를 들으면서 정리한 강의 노트입니다. 강의 내용 외에도 이해가 잘 안가는 부분들을 쉽게 정리하려 노력했습니다. 반효경 교수님 운영체제 강의를 들으시는 분들이 이 글을 통해 도움이 되었으면 좋겠습니다!   (혹시 포스팅 중에 잘못된 내용이 있으면 댓글로 지적 부탁드립니다..!)강의 노트 목록1. 운영체제 서론 (Introduction to Operating Systems) 2. 운영체제 구조 : 컴퓨터 시스템의 구성(System Structure & Program Execution 1) 3. 운영체제 구조 : 동기식 입출력과 비동기식 입출력, 저장 장치 계층 구조, 프로그램의 실행(System Structure & Program Execution 2) 4. 프로세스 : 프로세스의 개념, 프로세스의 상태..
이번 포스팅에서는 JCF에서 LinkedList와 ArrayDeque가 어떻게 구현되어 있는지 살펴보겠습니다. 1.  ArrayDeque개념  Deque는 Double-Ended Queue의 줄임말로 큐의 양쪽에서 데이터를 삽입과 삭제를 할 수 있는 자료구조를 의미합니다. 그리고 이 Deque 인터페이스를 구현하는 클래스가 ArrayDeque입니다.  JCF에서 어떻게 구현되어 있나?  elements와 head, tailpublic class ArrayDeque extends AbstractCollection implements Deque, Cloneable, Serializable{ transient Object[] elements; // non-p..
· Network
컴퓨터와 네트워크 강의를 들으며 정리한 강의 노트 모음입니다.  강의 노트라고는 했지만 강의의 커리큘럼을 참고한 것이 크고, 강의 외로 참고한 것들도 꽤 있어서 강의 흐름과 결이 다른 부분이 있을 수 있습니다. 하지만 잘 이해가 안 가는 부분들을 추가 포스팅과 그림으로 최대한 쉽게 정리하려고 노력해서 네트워크 공부에 도움이 되지 않을까 생각합니다.  컴퓨터와 네트워크 강의를 들으시는 분들이나 네트워크 개념에 대한 학습이 필요한 분들께 도움이 되었으면 좋겠습니다. 혹시 잘못된 부분이 있으면 댓글로 지적 부탁드립니다..! 1. OSI 7계층을 쉽게 이해해보자 (1) 2. OSI 7계층, TCP/IP Updated 을 쉽게 이해해보자 (2) 3. 전송 계층 : 다중화(Multiplexing)와 역다중화(Dem..
· 프로젝트
ec2 서버 상에 SpringBoot 백엔드 프로젝트와 mysql를 컨테이너로 올렸는데, 자꾸만 SpringBoot 컨테이너에서 MySQL 컨테이너를 연결하지 못하는 오류가 나타났습니다.  결론적으로 백엔드 파이프라인 구성을 잘못한 것을 파악하지 못하고, 애먼 MySQL과 SpringBoot 설정을 이리저리 삽질했습니다  혹시나 도움이 될까 기록을 정리해두고자 합니다. SpringBoot와 MySQL과의 연결은 대부분 아래 방법으로 해결이 될 것이라 생각합니다. 문제 상황 도커 백엔드 컨테이너를 실행시키면 얼마지나지 않아 자꾸 내려가는 현상이 발생했다. 분명 젠킨스에서는 빌드가 잘 되는데.. 빌드 여부와 관계 없이 백엔드 컨테이너 내부의 문제일 것 같아 로그를 출력해보았다.sudo docker logs ..
· Network
OSI 7계층에 대한 여러 글들을 보았지만, 추상적으로는 이해가 되지만 깊게 이해가 되지는 않았습니다. 그래서 여러 가지 포스팅과 강의를 통해 OSI 7계층에 대한 나름의 이해를 정리해보았습니다. 글을 보시는 분들께 도움이 되었으면 좋겠습니다. 1. OSI 7계층 OSI(Open Systems Interconnection) 7계층은 네트워크에서 OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말합니다. 물리적-데이터링크-네트워크-전송-세션-표현-응용 계층 순입니다.   여기서 계층이라는 것은 개념적인 것입니다. 계층을 나누는 것은 통신이 일어나는 과정을 단계별로 파악하기 위해서 입니다.이렇게 개념적으로 계층을 분리함으로써 흐름을 한눈에 알아볼 수 있고, 7단계 중 특정한 곳에 이..
정렬 알고리즘을 배우며 병합 정렬, 퀵 정렬 등 다양한 종류의 알고리즘에 대해 배웠습니다. 그렇다면 자바에서 자주 사용하는 Arrays.sort() 는 어떤 알고리즘으로 구현되어있는지 궁금해졌습니다.  구글링과 자바 내부코드를 보면, Arrays.sort는 듀얼 피봇 퀵소트를 사용한다라고 나와있습니다.  Arrays.sort 메서드 내부를 들여다보면서, 듀얼 피봇 퀵소트란 무엇인지 그리고 범위에 따라 어떤 정렬 방식을 적용하는지를 알 수 있었습니다.  Arrays.sort() 내부 들여다보기int[] arr = {1, 3, 4, 2, 1 ,7};Arrays.sort(arr)---result: {1, 1, 2, 3, 4 ,7} 보통 자바에서 배열을 정렬할 때,  java.util.Arrays 클래스의 so..
· 프로젝트
프로젝트 리팩토링 도중, 이틀을 고민한 부분이 있습니다. 바로 DTO가 어느 계층까지 내려와야하는 것인지에 대한 고민이었습니다. 지나고보니 그렇게까지 오래 고민할 필요는 없는 것 같지만..? 고민했던 부분들이 누군가에겐 도움이 되었으면 하는 바람에 이 글을 쓰게 되었습니다.  결론부터 말하면, 정해진 정답은 없다는 것입니다. 개발하는 서비스마다 다르고, 같은 서비스에서도 기능마다 다를 수 있습니다.  1. DTO란?우선 DTO란 계층간 데이터 교환을 위해 사용하는 객체입니다. 이때 계층은 Presentation(View, Controller), Business(Service), Persistence(DAO, Repository)로 나뉘게 됩니다. 스프링 프레임워크에 익숙한 개발자들은 보통 Controll..
지난 포스팅에서 JVM에 대해서 알아보았습니다. [Java 파헤쳐보기] JVM과 자바의 메모리 영역JVM과 자바(Java)의 메모리에 대해서 공부한 것을 정리했습니다. 1. Java 프로그램의 전반적인 실행 과정 개념들을 그림을 통해 간단히 살펴보고 하나씩 깊게 들어가보겠습니다. 제일 먼저, 자바 컴dcloud.tistory.com 이번에는 JVM의 가비지 컬렉터(Garbage Collector)에 대해 알아보겠습니다.   가비지 컬렉터(Garbage Collector)는 직역하자면,  쓰레기를 모으는 도구입니다. 가비지 콜렉터는 프로그램이 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지해 해제하는 기능을 수행합니다.  여기서 동적으로 할당되는 메모리 영역은 Heap영역을 말합니다. 그리고 ..
· BOJ
문제https://www.acmicpc.net/problem/3020  풀이 누적합을 이용해 해결한 문제입니다. 입력값이 2 ≤ N ≤ 200,000, 2 ≤ H ≤ 500,000 으로 주어지기 때문에, 이중 for문을 돌면 바로 시간 초과에 걸리게 됩니다. 문제 상황을 위처럼 그림으로 나타내볼 수 있었습니다. 각 높이별로 파괴해야하는 장애물의 개수을 표시한 것입니다. 저 개수를 어떻게 구해야할지 생각해보다가 우선 석순과 종유석 배열을 각각 나누어야겠다고 생각했습니다.    그래서 우선 입력을 석순과 종유석(bottom[], up[])배열에 나누어서 받았습니다.이 때, 주어지는 입력 값인 장애물의 크기는  bottom[], up[] 배열의 인덱스로 입력받아, 해당하는 인덱스 배열의 값을 +1 해줍니다...
· Java GUI
1. Snake game 이란?Snake game은 뱀을 조종하여 먹이를 먹어 길이를 늘리는 게임입니다. 게임의 규칙은 간단합니다.  1. 먹이를 먹으면 뱀의 길이가 증가한다.  2. 뱀의 머리가 뱀의 몸이나 벽에 부딪히면 종료된다.  이를 Java GUI를 통해 구현해보았습니다. 2. Java GUI 코드코드는 아래와 같이 세 가지 파일로 구성됩니다.   1. Main.java  2. GamePanel.java    3. GameFrame.java 1. Main.javapublic class SnakeMain { public static void main(String[] args) { new GameFrame(); }}2. GameFrame.javaimport javax.swin..
지난 포스팅에서 JCF를 다루었습니다. 이번 포스팅에서는 JCF의 ArrayList에 대해 살펴보겠습니다. ArrayList와 LinkedList 차이우선, ArrayList와 LinkedList의 개념적인 차이를 통해 ArrayList를 살펴보겠습니다. ArrayListArrayList는 데이터들이 쭉 늘어선 배열의 형식입니다.  ArrayList는 데이터의 인덱스를 가지고 있어서, 탐색(시간 복잡도: O(1))이 매우 용이하지만 데이터의 삽입과 삭제에서는 인덱스들의 위치를 조절해주어야 하기 때문에 O(n)의 시간 복잡도를 가집니다.  LinkedList 반면, LinkedList는 자료의 주소값으로 서로 연결되어있는 구조입니다. 내부적으로 양방향의 연결리스트로 구현되어있습니다. 탐색 시에 순차적으로 ..
지난 포스팅에서 자바 제너릭의 도입 배경과 기능을 살펴보았습니다. 이번 포스팅에서는 제너릭의 중요한 특징인 PECS에 대해 살펴보겠습니다.  PECS PECS(Producer Extends Consumer Super)란, Producer(데이터 생산: 조회) Component에서는 extends 를 사용하고 Consumer (데이터 소비: 저장, 수정 등) Component 에서는 super를 사용한다는 의미입니다.  불공변이란? 이것을 보다 자세히 이해하기 위해서는 제너릭의 불공변이라는 특징을 알아야만 합니다. 불공변이란, 서로 다른 제너릭 타입 간에는 상하위 관계가 없다는 것입니다. public class Vehicle {}//Car 클래스public class Car extends Vehicle {..
· SWEA
문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com N*N의 숫자가 시계 방향으로 중앙을 향해 돌아가는 배열을 만드는 문제입니다. 예를 들어 N=3, N=4일 때의 결과 값은 아래와 같습니다 풀이 우선 달팽이 배열을 확인해보면 일정한 반복을 통해 배열이 이루어지는 것을 볼 수 있습니다. 예를 들어 N=4일 때의 배열을 쪼개보면 아래 그림과 같은 패턴이 나타납니다. 향하는 방향은 오른쪽 -> 아래 -> 왼쪽 -> 위의 반복을 돌며 각각의 크기는 ..
동구름이
동구름