반응형

전체 글 130

Git 고급 브랜치 전략과 Gitflow

Git 고급 브랜치 전략 소개와 Gitflow를 통해 우리 프로젝트에 적용하는 방법에 대해 소개합니다. Vincent Driessen 의 브랜치 모델 Vincent Driessen가 제안한 고급 브랜치 전략으로 브랜치를 다음과 같이 분류하고 규칙을 정해 버전관리를 합니다. Main Branch master 현재 릴리즈되어있는 버전 또는 바로 릴리즈가 가능한 다음 버전 master 브랜치에 merge 가 발생하는 것은 곧 신규 릴리즈가 있다는 의미 발견된 모든 버그가 해결된, 정상적으로 동작하는 상태여야함 develop 다음 릴리즈를 위해 개발된 모든 기능들이 통합되어 관리되는 브랜치 모든 개발자가 함께 관리하는 브랜치, 항상 컴파일이 가능한 상태를 유지 Supporting branch feature 특정..

IT기본 2019.11.15

Netlify를 사용하여 정적 사이트 배포하기

근래의 웹개발은 주로 백엔드와 프론트엔드 영역을 나누어 개발하는 것이 주류가 되었습니다. 개인적으로 과거 JSP, jQuery 기반으로 개발된 웹사이트들은.. 두 번 다시는 겪고 싶지 않을 정도로 프론트엔드를 개발하는 기술들이 눈부시게 발전했고, 지금도 진행중입니다. 이런 추세때문인지 자연스레 정적 웹사이트를 쉽게 배포할 수 있는 서비스가 인기를 얻고있는데, 그 중 하나인 Netlify 를 소개합니다. 개요 Netlify는 JAMstack 혹은 SPA 형태로 개발된 프론트엔드 애플리케이션을 배포하는 것에 최적화된 서비스입니다. Gatsby와 같은 블로그를 배포하는 용도로 쓰이는 것으로 유명한데요. 이외에 Vue, React 등 많은 형태의 정적 애플리케이션을 배포할 수 있습니다. (참고로 Gatsby는 ..

IT기본 2019.11.14

Java ORM JPA과 객체지향 쿼리 사용(JPQL, Criteria, QueryDSL)

개요 예전부터 객체지향 언어인 자바와 관계형 데이터베이스간 패러다임의 불일치로 개발자들이 많은 불편함을 겪여왔다. 객체지향 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성 줄여주는 장치들을 제공 관계형 데이터베이스는 데이터 중심으로 구조화, 집합적인 사고가 필요하고 추상화, 상속, 다형성 같은 개념이 없음 연관관계를 표현할 때 객체는 타 객체 참조 (reference) 로, 관계형 DB 는 외래키로 표현하는 등 연관관계를 표현 객체를 테이블에 맞춰 모델링 class Member { String id; // MEMBER_ID 컬럼 사용 Long teamId; // TEAM_ID FK 컬럼 사용 String userName; } class Team { Long id; // TEAM_ID PK ..

Back-End/JPA 2019.11.04

Reflection Type을 활용해 JPA 공통 AttributeConverter 구현

얼마전에 JPA에서 사용할 공통 AttributeConverter 를 구현하면서 고민했던 점들을 정리한다. 공통 AttributeConverter 의 필요성 Entity와 테이블을 매핑하다보면 String, Integer, Long, LocalDateTime 외에 Json값이 저장되어있는 컬럼이나 코드값이 저장되어있는 컬럼의 경우 AttributeConverter 를 통해 Json 모델, Enum 과 매핑을 시킨다. // Entity @Entity public class UserEntity { @Converter(converter = UserStatusAttributeConverter.class) private Status status; @Converter(converter = UserOptionAttr..

Back-End/JPA 2019.11.04

Spring AOP 동작 방식, 원리

스프링은 기본적으로 프록시 기반 AOP 를 제공한다. 스프링에서는 Java Dynamic Proxy를 사용하거나 Cglib을 사용하여 프록시 기반 AOP를 구현했다. 이 글에서는 어떻게 Spring 에서 AOP를 사용할 수 있는 방식의 차이와 프레임워크가 AOP를 지원하기 위해 어떤 처리를 해주는지 개인적으로 분석한 내용을 정리한다. AopProxy 라는 Delegator 인터페이스로 표현되며 Dynamic Proxy 기반은 JdkDynamicAopProxy 클래스, Cglib 기반은 CglibAopProxy 클래스이다. Dynamic Proxy 기반과 Cglib 차이는 어떻게 프록시 객체를 생성하는지 방식 차이이다. Dynamic Proxy 는 프록시 객체 생성을 위해 인터페이스를 필수로 구현해야하며,..

개인적인 IT 서적 추천

읽어야할, 읽고싶은, 추천하고 싶은 도서 내역을 정리해보았습니다.도서 목록 객체지향의 사실과 오해 저자 : 조영호 소개 : 『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝게도 많은 사람들이 객체지향의 본질을 오해하고 있다. 가장 널리 퍼져있는 오해는 클래스가 객체지향 프로그래밍의 중심이라는 것이다. 객체지향으로 향하는 첫 걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 클린 코더 저자 : 로버트 C. 마틴 소개 : 세계적으로 유명한 프로그래머 ‘밥 아저씨’ 로버트 마틴이 쓴 책으로, 프로 개발자가 되는 길을 알려준다. 수십 년의 경험을 바탕으로 장인 정신, 실천 기법, 도구뿐만 아니라 프로가 가져야 할 마음가짐과 태도를..

기타 2019.10.30

Windows에서 Linux 명령어 사용환경 구성하기

개발자 특성상 Windows, Linux 등 다양한 환경의 PC를 이용하게 되는데요. 저는 주로 일반 사무, 업무를 볼 때는 Windows, 개발할 땐 Linux 환경을 이용합니다. 다만 직업 특성상 Linux 환경에 노출되는 시간이 많고, 자연스레 Linux 명령어에 익숙해지게 되는데요. 이 때문에 가끔 Windows의 CMD 명령어들이 Linux와 달라 불편함을 종종 느낄때가 있습니다. 이 때문에 이번에 개인적으로 사용하는 PC (Windows)에 Cygwin 을 설치해봤습니다. Cygwin 이란 공식 홈페이지 : https://cygwin.com/ 설치 : https://cygwin.com/install.html POSIX 기반 소프트웨어를 Windows에서 구동 및 개발이 가능하도록 환경을 제공해..

IT기본 2019.10.23

ELK를 활용한 로그 중앙집중 처리

어플리케이션 수행 중 발생하는 예외(Exception)를 모니터링 할 수 있는 시스템을 위해 ELK를 로컬환경에 구성한다. 구성 ELK Logstash : 데이터 수집, 필터링, Elasticsearch에 색인 (ETL 기능) Elasticsearch : 데이터 저장소 + 검색엔진 Kibana : 수집 데이터 시각화 적용 Logback Logstash용 Appender를 활용하여 WARN 이상 레벨의 로그를 Logstash에 적재 (https://jsonobject.tistory.com/243), Logstash에서 Elasticsearch로 색인 * LogstashEncoder는 스프링앱에서 발생하는 로그를 ELK스택에서 사용되는 JSON형태로 변환 * LogstashSocketAppender는 Log..

Back-End 2019.10.22

Spring Boot 설정파일

Spring Boot의 큰 장점 중 하나는 기존 Spring을 이용하면서 해야했던 설정들 (XML방신이던, Java방식이던)을 자동으로 진행해주는 것이라 생각합니다. (AutoConfiguration)이를 통해 개발자는 설정파일 (application.property, yml 파일 등)에 간단한 설정정보들만 입력해주는 수준으로도 Spring의 다양한 기능들을 쉽게 이용할 수 있습니다. 이렇게 설정할 수 있는 설정의 종류는 굉장히 다양하며 예를들어 Datasource 설정의 경우에만도 아래와 같이 굉장히 많은 옵션들을 설정할 수 있습니다. # DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)spring.datasource.continue-on..

Spring Boot Build 시 MyBatis Type Alias 미적용 문제

MyBatis를 이용하여 개발하면 주로 resultType에 적어줄 타입에 alias를 적용하여 사용한다.​보통 다음과 같이 SqlSessionFactoryBean을 정의할 때 setTypeAliasesPackage 메소드를 이용하여 정의한다.SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setTypeAliasesPackage(ALIAS 대상 클래스가 위치한 패키지경로);헌데 위와같은 방식으로 alias를 적용한 후 IDE를 통해 실행시키면 문제없이 잘 실행되는데​배포를 위해 jar로 빌드한 후 실행하자 ClassNotFoundException 이 발생하며 alias된 타입들을 못찾는 문제가 발생했다.​..