전체 글75 [Jest] Jest란? 이번 글에서는 JavaScript 진영에서 사용하는 테스팅 프레임워크인 Jest가 무엇인지 알아보려고한다. 테스팅 프레임워크는 작성한 코드가 예측한대로 동작하는지 테스트해보기 위한 Tool 정도로 생각하면 된다. 코드를 테스트하고 테스트한 코드를 저장해두고 안정성 검증 용도로 사용하면 로직이 변경 됐을 때 기존코드와 다른점을 쉽게 파악할 수 있다. 불필요한 설명일 수 있지만 아주 간단히 테스트 코드가 왜 필요한지 설명을 하자면, 아래와 같이 코드의 변경이 있다고 했을때 같은 테스트 코드로 확인 했을 때 정상동작하던 것이 수정후에는 실패하는 걸 확인할 수 있을 것이다. 그러면 당연히 잘못된 것을 인지하고 로직을 수정하거나 테스트 예상결과를 수정하여 테스트 코드를 성공시킬 것이다. 이런식으로 테스트를 하면서.. 2023. 1. 2. [Flyway] DB에 Flyway 적용하기 Flyway적용에 기본적인 환경 구성을 진행하도록하자. DB는 이미 실행되어 있다는 가정하에 진행하도록한다. 우선 실습을 진행하며 동작방식에 대해 정리해보도록하자. flyway가 관리해줄 DB 및 스키마를 생성하도록하자. -- DB 생성 create database flyway; -- use flyway DB use flyway; -- person table 생성 CREATE TABLE person ( id bigint PRIMARY KEY AUTO_INCREMENT, name varchar(20) ); -- table 확인 desc person; 테이블 생성까지 완료 되었다면, 아래 명령어를 실행하여 flyway를 설치하도록하자. wget -qO- https://repo1.maven.org/maven2.. 2022. 7. 31. [Flyway] Flyway란? Flyway란? DDL이든 DML이든 스키마 정의에 대한 변경이 일어나는데, 이를 미리 정해둔 규칙에 의해 자동으로 Database에 적용해주는 DataBase 형상관리 툴이다. 왜 필요한가? DataBase 형상관리가 왜필요하지?라는 생각이 들 수도 있지만 매우 중요한 포인트이다. 실무에서는 실서버 및 개발환경이 나눠져 있고 개발 안에서도 dev, qa, staging 등 여러 환경으로 나뉜다. 실서버와 개발환경의 DB를 같이 사용하는건 말이 안되기에 당연히 각각의 DB를 사용할 것이다. 이 상태에서 실서버에서 이미 사용중인 아래와 같은 SELECT 쿼리가 있다고 해보자. -- person 테이블에는 id, name 컬럼만 있다고 가정 SELECT id, name FROM person WHERE id .. 2022. 7. 31. [Linux] E437: terminal capability "cm" required Press ENTER or type command to continue vi /home/~~ 을 실행하려고 했더니 아래와 같은 문구가 노출 되는 경우가 있다. E437: terminal capability "cm" required Press ENTER or type command to continue 아래의 명령어를 실행하여 해결하도록하자. export TERM=vt100 2021. 5. 25. [켄트 백의 TDD] 테스트 주도 개발(TDD) TDD(Test Driven Development)는 간단히 말해 테스트코드를 작성하고 해당 테스트코드가 정상적으로 실행되고 정확한 결과가 나오도록 확인하며 로직을 작성하면서 개발하는 방법이다. TDD의 궁극적인 목표는 작동하는 깔끔한 코드(Clean Code)를 만드는 것이다. 깔끔하지 못한 코드는 기능개선 및 유지보수를 힘들게하고 코드 한 줄의 수정이 불러올 후폭풍을 두렵게한다. 자동화된 테스트로 개발을 이끌어 나가서 우리의 개발시간을 효율적으로 사용할 수 있게 하는것이 바로 TDD(테스트 주도 개발)이다. 빨강 : 실패하는 테스트 코드를 먼저 작성한다. Compile조차 되지 않을 수 있다. 초록 : 빨리 테스트가 통과되도록 한다. 무슨짓(코드복사 등)을 해도 좋다. 리팩토링 : 중복 코드 제거 클.. 2021. 5. 24. [Spring JPA] JPA 엔티티 매핑(Entity Mapping) 이번 글에서는 JPA를 사용하여 DB Table과 Entity매핑에 대해서 알아보도록하자. Entity는 그냥 간단히 JPA가 관리하는 Class 정도로 인식하면된다. Class의 필드와 Table의 컬럼을 매핑하고 객체와 테이블을 매핑하는 과정에 대해서 알아보도록 하자. JPA에서는 대표적으로 아래의 어노테이션을 사용한다. 객체와 테이블 매핑: @Entity , @Table 기본 키 매핑: @Id 필드와 컬럼 매핑: @Column 연관관계 매핑: @ManyToOne , @JoinColumn 우선 객체와 테이블을 매핑하는 @Entity 어노테이션을 알아보도록하자. 1. @Entity 테이블과 매핑할 클래스에는 @Entity 어노테이션인 반드시 명시되어야한다. @Entity 어노테이션에 적용할 수 있는 속.. 2021. 3. 24. [Spring Error] There is no PasswordEncoder mapped for the id "null" Spring Security를 이용해서 회원가입을 하고 로그인을 하려고보니 아래와 같은 에러가 발생했다. 이유를 확인해보니 Spring Security 버전 5 이상부터는 PasswordEncoder가 변경되었기 때문에 회원정보 저장시에 password앞에 암호화 정보를 같이 지정해서 저장해야하기 때문이다. # 암호화 명시 방식 {암호화 명}실제 비밀번호 # 기존 패스워드 1234 # 암호화 방식을 명시한 패스워드 {noop}1234 위처럼 암호화 방식을 명시한 후에 코드를 적용해보도록하자. 아래의 코드는 회원을 생성하는 Service 로직인데, 이를 변경해보도록 하자. # AS-IS public Member createMember(MemberDto memberDto) { return memberRepo.. 2021. 3. 21. [Spring JPA] JPA 란? 이번 글에서는 JPA(Java Persistence API)가 무엇인지 알아보려고한다. JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말은 즉, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다. 우선 JPA에 앞서, 먼저 ORM에 대해 알아보도록하자. ORM(Object-Relational Mapping) 우리가 일반 적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고.. 2021. 3. 18. [Docker] Centos에서 MySQL을 도커 컨테이너로 실행하기 이번 글에서는 Centos7에서 MySQL을 도커 컨테이너로 띄운 후에 접속하는 방법에 대해 알아보도록 하자. 해당 글에서 진행되는 과정들은 모두 GCP(Google Cloud Platform)에서 진행할 예정이다. 기본적으로 Docker Hub에 이미 MySQL의 이미지가 등록 되어있기 때문에 해당 이미지를 pull해서 컨테이너로 실행해주면된다. 데이터베이스를 컨테이너로 띄워서 활용하는 방식은 CDB(Container DataBase)이라고 하고 그렇지 않은 것은 non-CDB라고 한다. 0. 도커허브에서 MySQL 이미지 검색 # docker image 검색 docker search mysql 1. MySQL 이미지 Pull 하기 도커이미지 pull 할 때는 mysql:{version}으로 버전을 명.. 2021. 3. 13. [Jenkins] Jenkins로 Nginx 및 Spring Boot 컨테이너를 원격서버에 띄워서 Reverse Proxy 구성하기 이번글에서는 젠킨스를 이용하여 nginx 컨테이너 및 Srpingboot 컨테이너를 원격서버에서 실행시킨 후에 nginx 컨테이너로 요청이 들어오면, 이 요청을 SpringBoot 컨테이너로 전달하는 과정을 진행하려고한다. 이러한 과정을 Reverse Proxy 라고 하는데, 클라이언트가 서버로 요청을 하면 WAS로 직접 접근하지 않고 Web서버인 nginx로 먼저 접근한다. 그러면 nginx는 이를 WAS에게 전달해주는 것이다. 왜 이러한 구조로 서버를 구성하는 것일까? 이유가 궁금하다면 아래의 블로그를 참고하도록하자. Nginx Reverse Proxy 사용하기 호주로 해외여행을 간다고 생각해보자. 중국을 경유하여 가는 비행기 티켓을 구매했다. Proxy랑 엮어보면 인천공항은 출발지, 중국은 Prox.. 2021. 2. 7. [SpringBoot] TimeZone 설정 후 출력하기 현재 사용자들에게 서비스하고 있는 프로젝트가 있다고 치자, 이 프로젝트를 다른 국가에 런칭해야 하는 상황 이라면? 당연히 현지에 있는 시간에 맞춰서 사용자에게 시간을 제공해줘야한다. 이럴 때, 사용하는것이 TimeZone 설정이다. 이번 글에서는 스프링부트에서 타임존을 어떻게 설정하고 어떤식으로 출력해서 사용하는지 알아보도록하자. 1. TestCode로 확인하기 우선 테스트케이스에서 타임존설정을 해서 국제표준시간과 한국시간을 출력해서 설정해 따라 결과가 달라지는 것을 보도록하자. @RunWith(SpringRunner.class) @SpringBootTest public class TimeZoneTest { @Test public void queryFilterForActionLogBotTest() { T.. 2021. 2. 3. [Jenkins] Jenkins를 이용하여 원격 서버에 SpringBoot 컨테이너 띄우기 이번글에서는 GCP(Google Cloud Platform) VM 인스턴스 위에서 실행 중인 젠킨스에서 원격 서버인 AWS EC2 인스턴스로 SpringBoot 프로젝트를 빌드한 jar 및 Dockerfile 을 전송하여 도커이미지로 변환 후 컨테이너로 띄우는 실습을 해볼것이다. 기존에 Jenkins- Github연동이 되어있다는 가정하에 진행되는 과정이니, 만약 연동이 되지 않았다면 아래의 글을 먼저 진행하고 오도록 하자. [Jenkins] Jenkins & Github 연동 및 자동배포 구성하기 1 이 글을 시작으로 jenkins와 github의 특정 프로젝트를 연동 시켜두고 해당 프로젝트에서 push 발생 시, jenkins가 이것을 인식하고 자동으로 배포하는 과정에 대해서 진행하려고한다. 배포될 .. 2021. 1. 24. 이전 1 2 3 4 ··· 7 다음