안정적인 블로그

Fixture Monkey 라이브러리 - 랜덤으로 값이 할당되지 않는 문제

서론 이전 글에서 객체의 필드값에 랜덤으로 값을 할당했었는데 실제로 테스트 해보니 랜덤이 아니었던 문제가 있었다. 이는 sampleList() 사용할 때 발생하였으며, 원인을 정확히 파악하지는 못했지만 라이브러리를 뜯어보며 나름의 가설을 세워보았다. 이전 글에 추가하려 했으나 점점 길어져서 따로 작성하게 되었다. 라이브...

Docker에서 실행 중인 DB 백업 + 메일링 설정하기

Database 백업 10일동안 진행했던 해커톤 포텐데이 의 프로젝트 문덕을 디벨롭하면서, 애플 앱스토어를 통해 실제로 유저들에게 서비스를 제공하기로 했다. 100% 완벽한 안정성을 가진 서비스는 없으므로, 백업과 복구할 수 있는 수단을 미리 준비해야 한다. 가장 편하고 간단한 방법은 클라우드 서비스의 RDS 서비스를 이용하는 것이다. ...

Spring - 공유 페이지 제공하기

공유페이지 제공 기존에 진행 중인 사이드 프로젝트 문덕은 문화생활에 대한 리뷰를 작성하고 보관할 수 있는 서비스다. 커뮤니티 기능 없기 때문에 자신만 자기가 쓴 글을 볼 수 있었다. 공유를 원하는 사용자를 위해 우리는 공유페이지를 제공하기로 했다. 이 글에서는 임시방편으로 만들었던 공유페이지에서 완성도를 끌어올리기 위해 어떻게 로직을 ...

회고록2

이 글을 또 쓰게 된 계기 처음 회고록을 시작한지 4개월도 안지났다. 시간 진짜 안지나가는 것 같다. 이렇게 자주 쓸 생각은 아니었는데 어쩌다보니 또 쓰자고 마음먹게 되었다. 이유는 단순하다. 해이해졌다고 생각이 들었기 때문이다. 사실 지난 회고록을 쓴 이후 나름의 선방을 하긴 했다. 학점도 미쳐버린 폼으로 역대 최고치를 찍었고, 회사 인턴 생...

불변 데이터를 간단명료하게 정의할 수 있는 JAVA의 Record 기술

Record란? 자바 14버전에 처음 등장하여 16버전에서 정식 스펙이 되었다. 데이터 전송 객체(DTO)나 값 객체(VO) 같은 불변 데이터를 간단하고 명확하게 정의할 수 있게 해준다. Record의 등장 배경 기존 클래스 사용에 있어서 반복적이고 귀찮은 코드인 보일러 플레이트 코드를 줄이기 위해 도입되었다. [보일러 플...

코드와 함께 간단하게 옵저버 패턴 알아보기

옵저버 패턴(Observer Pattern) 스타크래프트의 옵저버 유닛처럼 관찰자를 뜻하는 패턴이다. 옵저버(관찰자)들이 관찰하고 있는 옵저버블(대상자)의 상태가 변화가 있을 때마다 대상자는 자신의 목록에 있는 관찰자들에게 통지하고, 알림을 받은 관찰자들은 그에 따른 작업을 수행하는 행동 패턴이다. 객체들 사이의 일대다 의존성을 정의...

팩토리 패턴의 종류와 스프링이 사용하는 팩토리 패턴

팩토리 패턴(Factory Pattern) 팩토리 패턴은 객체 생성 로직을 별도의 클래스나 메서드로 분리하는 패턴이다. 객체 생성 로직을 숨기고, 로직의 변경이 클라이언트에 영향을 주지 않아 코드를 유연하고 확장 가능하게 한다. 팩토리 패턴에는 크게 3가지로, 단순 팩토리 패턴, 팩토리 메서드 패턴, 추상 팩토리 패턴이 있다. 단순...

인스턴스의 개수를 1개로 제한하는 싱글톤 패턴

싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. [여러 개의 웹 요청이 들어올 때] 만약 싱글톤 패턴을 사용하지 않는다면, 한 번에 여러 개의 요청이 들어올 때마다 해당 요청을 처리하기 위한 객체들이 여러 개 생성될 것이다. 모든 요청에 대해 각각 객체가 생성되고 소...

다익스트라 심화 - 플로이드 워셜(Floyd-Warshall)

다익스트라의 한계 다익스트라(Dijkstra) 알고리즘 벨만 포드(Bellman-Ford) 알고리즘 이전 포스팅에서 다익스트라는 음수 가중치를 고려할 수 없다는 한계를 극복하기 위해 벨만 포드 알고리즘을 다뤘었다. 이외에 또다른 한계를 알아보자. 다익스트라는 하나의 점에서 모든 지점까지의 최단 경로를 구하는 알고리즘이다. 모...

다익스트라 심화 - 벨만 포드(Bellman-Ford)

다익스트라의 한계 다익스트라(dijkstra) 알고리즘 위 그림에서 다익스트라는 각 노드에 한번만 방문하고, 바로 앞에 있는 간선 중에서 가장 짧은 것을 선택한다. 그 결과 1->3 경로의 거리는 음수 가중치를 인식하지 못해 5가 아닌 10이라는 결과가 도출된다. 이렇게 다익스트라는 음수 가중치를 가진 간선이 있다면 사용할 수...

Spring Security 이해를 위한 Spring Interceptor 예제 살펴보기

이 포스팅에서는 스프링을 사용하여 사용자의 인증 여부를 확인하기 위해 보통 Spring Security를 사용합니다. 하지만 이 프레임워크는 거대하기 때문에 처음부터 이해하기는 힘듭니다. 이 포스팅에서는 비슷한 동작 방식을 가진 스프링 인터셉터를 통해 사용자의 인증 여부를 확인하는 간단한 예제를 알아보겠습니다. 등장하는 ...

해쉬(Hash) 자료구조 알아보기

🤔 해시(Hash) 란? 해시란 다양한 길이를 가진 데이터를 고정된 길이의 데이터로 매핑한 값을 말한다. 해시 알고리즘을 이용해 고유한 인덱스를 얻는다. 인덱스를 이용하여 빠른 검색 속도와 빠른 저장 속도를 갖는다. [해시 함수] 데이터를 효율적으로 관리하기 위해, 임의의 길이의 데이터를 수학적 연산을 통해 고정된 길이의 데이...

우아한테크캠프 7기 코딩테스트 후기

😃 문제 유형 어떤 문제가 나왔는지 궁금하신 분들을 위해 가장 먼저 설명하겠다. 문제에 대한 자세한 설명은 생략한다. 코테 문제 개수를 보고 8이라는 숫자를 보자마자 놀랐지만 다행히(?) 3문제만 알고리즘이고, 나머지는 객관식으로 백엔드 기술들과 관련된 개념을 묻는 문제들이 나왔다. 이번에 새롭게 객관식 나왔는데...

자바의 stream 간단 정리

🤔 스트림(stream) 이란? 자바 8부터 추가된 기술로 데이터의 추상화된 연속적인 흐름을 다루는 API다. 람다를 활용해 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있다. 스트림은 데이터 소스(타입)를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드를 정의해 놓아서 데이터 소스에 상관없이 모두 같은 방식으로 다룰 수 있어 코드...

블로그 포스팅을 시작하면서 이번 년도의 마음가짐, 회고록

이 글을 쓰게 된 계기 sopt 서버파트에 떨어졌다. 정말 열심히 작성했고 나름 잘 작성했다고 생각했기에 어느정도 자신만만했다. 하지만 떨어졌다. 떨어진 이유를 전혀 몰랐다면 정말 억울하고 슬펐겠지만 다행히(?) 짐작할 수 있었다. 작성할 때에도 염려되었던 부분인데 개발에 관련된 얘기만 주구장창 나열했다. sopt는 실력이 낮더라도 얼마나 다양하고...