본문 바로가기

개발 일기

(10)
주소(URL)를 단축하기 위해선 어떻게 해야할까? 일전에 해당 게시글에서 주소 단축을 위해 .hashcode()를 사용하려했을 때, 문제점에 대해 설명했었다. 중복의 문제뿐만 아니라, hashcode() 메소드를 사용했을 때, 주소가 너무 길어지는 단점이 있었다. 따라서, 해당 단점을 해결하기 위해 다른 방법들을 찾아보게 되었다. 1. 단축된 URL을 만들어야 하는데, 오히려 URL이 길어지는 현상 => 해당 현상을 해결하려 찾아본 결과, 많은 사람들이 기존의 긴URL을 단축하는 것이 아닌, 긴 URL의 ID값을 인코딩하고 있었다. 2. 그래서 어떻게 URL을 줄여야할까? BASE62 방법을 사용하고 있다고 한다. 나는 BASE64만 알고 있었는데, 이는 + = / 와 같은 문자를 포함하기 때문에 URL이 SAFE하지 않게 된다고 한다. 그래서 [a-z..
String에 .hashcode()를 적용하면, 다른 값을 반환할까? 주소 단축 프로그램(웹)을 제작하던 중, 원래의 긴 주소를 짧은 주소를 변환하는 과정이 존재한다. 이 과정에서 짧은 주소는 긴 주소하나에 유일하게 대응되어야 한다. 하지만, 해시함수에 대해 아는 바가 없어 일단, hashcode()를 생각하게 되었다. 내가 아는 hashcode()는 각자 다 다른 값을 배정해준다고 알고 있었는데, 문득 찝찝해졌다. Hashcode() ? hashCode는 두 객체가 같은 객체인지 확인하는 Method입니다. Hashcode 메소드의 내부입니다. int형으로 반환되는 것을 보실 수 있는데, int 형은 4byte입니다. 따라서, 0부터 0xFFFFFFFF(4,294,967,295)까지 만큼의 숫자를 반환할 수 있는데, String의 갯수가 과연 저 안에서 끝날까요? 절대 ..
진행중인 또다른 프로젝트 현재 Redis를 사용하여 주소 단축 프로그램을 제작하고 있다. 해당 과정에서 현재 생각해야하거나 공부해야 하는 것은 1. Redis의 동작 과정 2. 각 어노테이션이 무슨 역할을 하는지? 3. 인덱스를 어떤 것으로 지정해줘야하는지? 4. 유저가 짧은 주소를 입력했을 때 Redirection을 어떻게 해야하는지 5. 캐시 만료기간을 어떻게 정해야하는지. 6. 많은 수의 유저가 접속했을 때 어떻게 해야하는지 7. Crud Repository vs JPA Repository 공부하면서 추가할 예정
개발을 어떻게 했던 것일까? 여지껏 웹 프로젝트를 진행하며 내 결과물에 대해 스스로 만족했었다. 기획했던 기능들이 제대로 작동하고 눈에 보였기 때문에 잘 만든 프로젝트라고 생각했다. 그러나, 프로젝트의 내부를 다 찬찬히 뜯어보니 이걸 왜 사용했는지에 대해 전혀 의식하지 않고 코드를 구성했다는 것을 알 수 있었다. 최근 한 기업의 과제전형을 진행했었는데, JPA에 관해 아무것도 모르고 과제를 진행한 것 같아 지금 너무 창피할 정도이다...제출 후에 알음알음 공부한 것을 토대로 고치고 있긴 하지만, 왜 처음부터 제대로 알아보지 않고 사용했을까에 대해 너무 후회가 된다. 이 외에도 굉장히 많은 후회가 남는 것들이 많은데... 그것들을 적어보자면 1. @Autowired의 남발 => 생성자를 사용하는 것이 좋다고 한다. 2. Test co..
Redis (1) RemoteDictionaryServer (=REDIS) "Key - Value" 구조로 비정형 데이터를 저장, 관리할 수 있는 오픈 소스 기반의 비관계형 DBMS Redis의 특징 Redis가 가지는 가장 큰 강점은 다양한 Collection(String, List, Set, SortedSet, Hash)_을 지원한다는 것입니다. 또한, Redis는 single thread로 동작하기 때문에 atomic operation이 보장됩니다. (싱글쓰레드로 운영되기 때문에, 데이터가 많다면 저장된 전체 키를 확인하는 명령어는 이를 조회하는 동안 레디스가 다른 일을 하지 못한다. (scan으로 대체 가능하다고 함.)) In-Memory로 높은 처리 속도를 보여주며, persistence (dataset dump..
AWS EC2에 SpringBoot + Vue.js 프로젝트 배포하기 (1) - 개발환경 구축 오늘의 교훈 : AWS EC2 서버를 종료하지말자 ! 다 날라간다 ^^ (1) 필요 라이브러리 or 모듈 설치를 통한 개발환경 구축하기 ✅ JAVA (버전 확인) sudo apt install openjdk-8-jdk ✅ npm설치 sudo apt install npm ✅ node 12.x 설치 curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs ✅ npm 업그레이드 curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs ✅ Git 설치 sudo apt install git ..
카카오 로그인 (Vue, SpringBoot) 실행기 드디어 혼자 힘으로 Vue와 SpringBoot를 이용하요 카카오 로그인 API를 구현하였습니다! 참고로 카카오로그인 API 연동 + 자체 회원가입을 구현하였습니다. 1. 로그인 버튼을 클릭하는 부분 로그인 이미지를 클릭하면, 카카오로그인 페이지로 넘어갈 수 있도록 구현하였습니다. 물론, 저 AppKey나 redirecturl등을 숨겨 구현할 수도 있습니다만.. 일단 편의상 이렇게 구현하였습니다. 카카오로그인 제품설정 中 Redirect URL은 다음과 같이 설정해주시면 됩니다. (로그인 후, 보여줄 페이지로 지정) 저는 kakalogin.vue가 자체 회원가입을 진행하는 곳이어서 (이름 잘못 지정함...ㅎㅎ...) redirect url을 이곳으로 지정했습니다. Redirect된 페이지 해당 페이지는 ..
Jwt Token 저장소에 대해 프로젝트를 진행하면서, JWT 토큰을 이용하여 로그인단을 구현하는 일이 대부분이었다. 그 때마다 공통적으로 나오는 질문이 있었는데, "토큰은 어디에 저장하는게 좋을까?"였다. 찾아보니, Local/Session Storage와 Cookie에 저장하는 2가지 방법이 존재했다. 두 가지 모두 Session저장소처럼 사용자의 인증 상태를 별도 저장소로 유지할 필요가 없는 무상태성을 띔 당시에는 모두가 Cookie를 사용했기 때문에 의식없이 이를 사용했지만, 그 이유를 알아봐야할 것 같아 포스트를 작성하게 됐다. Web Storage web storage 는 HTML5 부터 지원되는 기술로 클라이언트(브라우저)에 데이터를 저장할 수 있는 방법이다. Local/Session Storage가 있는데, Session..