IT 21

[JAVA/JPA] JPA.. 이름만 들어봤다!! 이제라도 알자..

업무를 진행하면서 Spring 을 사용하는 것이 처음이라 생소한 것들이 많다. 이전에는 순수 자바 1.7 + 서블릿 + MyBatis 를 사용했기에 모르는 내용이 많아 최근 들어 공부를 진행하고 있다. 하지만 업무는 날 기다려주지 않고, 코드리뷰 진행 시 내가 모르는 부분에 대해 질문했고, 이에 대한 답변으로 들었던 내용을 모르고 이를 뒷받침하는 JPA 영속성 컨텍스트를 모르기 때문에 찾아봤다. 질문: 분명 save(), commit(), flush() 라는 코드를 명시적으로 작성하지 않았는데 데이터가 왜 업데이트 된건가요? 답변: 그건 Entity Manager 가 처리해줘서 그래요! 라고 답변을 받았다. 너무나 쇼킹했고 더 궁금해서 자료를 찾았는데 이 또한 김영한 님의 JPA 강의를 듣고 작성한 것 ..

IT/프로그래밍 2021.07.28

[RDS/MySQL] AWS Aurora 를 쓰는데 종종 개발서버 Latency가 길어진다!?

개발 서버를 t2.micro 로 RDS/Aurora(MySQL) 로 생성하고 캐릭터셋만 맞춰서 작업을 진행해왔다. 분명 단일 EC2 인스턴스 3개에서 접근할 때 아무 문제가 없이 동작하던 DB였다. 하지만 그렇게 생성하고 서비스가 2개 정도 늘었다. 그만큼 난 RDS 커넥션을 붙였다. 이때부터가 문제의 시작이었다. 종종 개발서버에서 응답이 오지않아 QA, 클라이언트 개발자들이 '서버 죽었다' 라고 이야기해주어서 서버 로그를 볼때마다 늘 AcquireTimeout 문제라고 Sequelize 에러가 발생했으며, 재기동으로 급한 불 끄기에 급급했다. 그래서 오늘은 제대로 서버를 봐주자!! 라는 마인드로 어떤 부분의 문제인가를 찾다가 알게된 글을 공유하려고 한다. MySQL의 timeout 설정 sleep 세션..

[RDB/MySQL] 이모지를 사용하는 DB Charset 설정

이모지를 사용하는 서비스에서는 일반적인 UTF-8 Charset 으로는 불가능하다. 이유는 이모지가 3Byte 가 아닌 4Byte 이기에 이모지를 어플리케이션을 통해 DB에 저장 시 ??? 로 들어가는 경우를 볼 수 있다, 그렇다면 이 문제를 해결하기 위한 방법은 무엇일까? 4byte의 문자를 저장할 수 있는 DB charset 과 설정법을 알아보자 MySQL 에서 2010년 3월 24일 utf8mb4 라는 Charset 을 추가지원했다. (관련 : https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-3.html ) 자 위에서 설명된 내용 중 현재 우리에게 가장 중요시되는 부분은 4Byte 문자를 지원한다는 것이다. Emoji 가 바로 그 4Byte에 해..

[BlockChain/tech] 블록체인 기술을 뒷받침하는 것들.

1. 분산원장기술(DLT, Distributed Ledger Technology) - 의미: 중앙원장기술과 반대로 중앙서버나 중앙관리자의 제어 없이 분산화된 네트워크의 각 노드(개인)들이 Database 를 공유하고 계속 동기화하는 기술. - 블록체인 == 분산원장이지만, 분산원장이 블록체인인 것은 아니다. 중앙원장기술의 문제점으로 제기돼던 내용 중, 비용문제, 시간문제, 보안문제가 있었다. 타 글, 혹은 블록체인에 대해 이야기를 할 때, 비용, 시간 등에서 블록체인기술이 더 낫다 라고 이야기들을 하지만 이 부분은 잘 고려해봐야한다고 한다. 2. 합의 형식 규칙 (합의 알고리즘) - PoW ( Proof-of-Work ): 작업증명 > 많은 해시(hash) 를 보유한 사람이 코인을 얻을 수 있는 블럭(B..

IT/스터디 2021.05.06

[NodeJS/Redis] 캐시를 사용한 리스트 전달하기

최근에 프로젝트를 진행하면서 구현했던 기능 중 하나에 대해 포스팅하고자 한다. 해당 기능을 구현하는데 사용된 것은 Redis, MySQL, NodeJS 이렇게 3가지가 주된 기능을 구현하는데 사용됐다. 개요는 위와 같고, 실제 구현된 기능에 대한 메인 요구사항은 다음과 같다. 관리자 페이지에서 등록된 이벤트 중 진행중인 이벤트 리스트는 상위에서 랜덤한 리스트 배열로 전달해주시고, 이외에 신청한 이벤트/종료된 이벤트는 아래에서 무한스크롤로 할 수 있도록 해주세요. 이 기능에 대해 등록되는 이벤트들의 개수는 큰 변화가 없을 것이고 빈번한 수정이 일어나는 리스트 데이터가 아니기 때문에 캐싱을 하여 작업하도록 설계했고, 이외에 무한스크롤에 해당하는 데이터는 실제 RDB에 접근하여 전달하도록 설계했다. 구현한 순..

IT/프로그래밍 2021.05.04

[NodeJS] Sequelize에서 JSON 안에 JSON 처리는 어떻게 해?

간만에 또 이렇게 글을 써 본다. 내용은 매우 간략하지만 처음 경험하는 것이라서 이 부분으로 인해 열심히 삽을 팠다! 사용 라이브러리 Sequelize : 6.6.1 Node: 12.13.1 RDS: MySQL Aurora 위와 같은 환경에서 아래와 같이 테이블을 생성했다. Schema sequelize.define( 'test' { name: { type: DataTypes.STRING(10), allowNull: false, comment: '테스트 테이블내 컬럼, 이름' }, contents: { type: DataTypes.JSON, allowNull: false, comment: '테스트 내용', }, }; 위와 같은 스키마를 정의했다는 가정하에 데이터는 아래와 같다. { name: '테스트',..

IT/프로그래밍 2021.04.15

[JS] 휴대전화번호 정규식

오랜만에 작성하는 블로그! 이유는.. 뭘 써야할 지 잘 몰랐어서 안쓰다가 오늘 간만에 쓰게 됐습니다. 최근 TDD 를 통해 회사 프로젝트를 구성하고 실행해 보고 있습니다. 그러면서 테스트 케이스를 작성하게 되는데 그 중 일부를 발췌해 작성해봅니다~ 업무를 할 때마다 늘 마주치는 휴대전화번호 입력 그리고 생년월일 입력이 있습니다. const { expect, assert } = require('chai'); describe('정규식 테스트 진행', () => { it('휴대전화번호 정규식 테스트', () => { /** * 조건, 휴대전화번호만 전달되는 경우, 하이픈이 같이 들어오는 경우 * 휴대전화번호 맨 앞자리는 지금은 010으로 통합됐으나, 이전엔 아니었음. * 010, 011, 012, 016, 0..

IT/프로그래밍 2021.04.09

터미널 버전 Redis 설치하기

이전에 회사 노션 페이지에 직접 작성했던 Redis 설치법! 활용해서 많은 AWS EC2 로컬 레디스를 작업했었는데, 이제 블로그를 시작했으니 내 블로그로 옮겨오기를 해봅니다! 아래대로 터미널 열어서 슥--삭 하고 복사 & 붙여넣기 진행하시면 바로 설치되니까 편히 사용하시기를!! (전 매우 편히 이용하고 있습니다~) 기준은 Linux(aws ec2 terminal) 에서 진행했었고, ~ sillicon 은 잘... ~ SSH 접근 후 사용. ( 일반 유저 ) sudo yum -y update sudo yum -y install gcc make #Redis Download cd /tmp wget [http://download.redis.io/releases/redis-4.0.0.tar.gz](http://..

좌충우돌 Sequelize 5.x 에서 Sequelize 6.x 로 마이그레이션

회사에서 Sequelize 5.x -> Sequelize 6.x 로 마이그레이션을 해보려던 중 마주쳤던 라이브러리 지원 함수 삭제 등으로 인한 이슈가 있었다. 오늘은 이에 대해 한 번 써보려한다. 회사에서 5.x -> 6.x 을 진행하면서 생겼던 내용에 대해서만 기술하기 때문에, 이외에 다른 내용이 있다면 댓글로 작성해주시거나 하면 다른 분들에게도 공유될 수 있어 좋을 것 같습니다 ^오^ 우선적으로 회사에선 기존에 Sequelize 4.x 와 Sequelize 5.x 를 각 프로젝트에서 쓰고 있었다. 하지만 지금의 Sequelize 버전은 몇이지..?! 무려 6버전이다.. 자잘한 Minor 버전을 제외한다고 해도 라이브러리 버전이 차이가 난다. 그리고 NodeJS 버전도 낮았기에.. 하하.. 라이브러리 ..

IT/프로그래밍 2021.03.31

TDD? TDD란 뭘까?

우선 아래 글은 정보 및 주관이 섞인 글입니다. 참고 부탁드립니다 >_O 면접을 보다가 받았던 과제에서 TDD 를 사용해서 작업해달라고 요청받았던 적이 있었다. 이전부터 내용은 알고 있었는데 정리가 잘 안되고 사용도 많이 못해봐서 이렇게 글이라도 적어본다! ( 이래야 다시 보고 하겠지라는 마음으로! ) TDD 가 뭐야?? 테스트 주도 개발(Test-driven development, TDD)은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 우선 개발자는 바라는 향상 또는 새로운 함수를 정의하는 (초기적 결함을 점검하는) 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 케이스를 통과하기 위한 최소한의 양의 코드를 생성한다. 그리고 마지막으로 그 새 코드를 표준에 맞도록 리팩토..

반응형